Výstup vášho modelu je nedôveryhodný vstup. Nájdite miesta, kde na to váš kód zabúda.
Statická analýza kódu okolo vášho LLM — kódu, ktorý zostavuje prompt, volá model a s odpoveďou niečo robí. Nie modelu. Nie odolnosti promptu voči jailbreaku. Kódu.
Bezplatná úroveň zahŕňa 3 projekty a 30 analýz mesačne, bez obmedzenia počtu používateľov a bez platobnej karty. Táto analýza sa do nej zmestí.
Problém
Model nie je knižnica. Je to nedôveryhodný interpret: podáte mu reťazec a on vám jeden vráti. Všetko, čo ten reťazec ovplyvnilo — vlastný prompt používateľa, stránka, ktorá mu bola ukázaná, dokument, ktorý dostal, výsledok iného nástroja — ovplyvnilo aj odpoveď.
Odpoveď je neškodná, kým jej kód nedá schopnosť konať. Nebezpečenstvo nie je v tom, že model niečo povedal; je v tom, že tomu program uveril. Každé miesto, kde program zaobchádza s vygenerovaným textom ako s kódom, príkazom, dopytom, cestou alebo URL, je injektáž o jeden skok ďalej — a na rozdiel od otázky, či sa prompt dá obísť jailbreakom, tento skok vidno v zdrojovom kóde.
Čo Cybseco hľadá
Tam, kde výstup modelu dosiahne na niečo, čo koná. Toto sú vlastné kategórie, závažnosti a identifikátory CWE enginu.
eval, exec, compile, new Function, pickle.loads, yaml.load — z odpovede sa stáva program.os.system, subprocess, child_process.exec, execSync — z odpovede sa stáva príkaz.execute, raw, createQuery — text-to-SQL je presne tento vzor a DROP TABLE je vierohodné doplnenie.open, readFile, shutil.rmtree, unlink — ../../etc/passwd je rovnako vierohodné doplnenie.requests, httpx, fetch, axios, urlopen — falšovanie požiadavky na strane servera, zvolené modelom.Konkrétny príklad
Deväť riadkov a celý tvar rizika.
from openai import OpenAI
client = OpenAI()
def run_plan(task: str):
answer = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": task}],
)
exec(answer.choices[0].message.content)client.chat.completions.create(…) — volanie, ktoré vracia výstup modelu. Analyzátor naviaže premennú, do ktorej bol priradený, a práve to mu umožňuje sledovať hodnotu naprieč funkciou bez medziprocedurálnej analýzy.answer obsahuje text, ktorý mohol ovplyvniť útočník. Medzi volaním a cieľom ho nič nekontroluje, neobmedzuje ani neprevádza na pevnú množinu operácií.exec(…) — text sa stáva programom vo vlastnom procese aplikácie, s jej prihlasovacími údajmi, jej sieťou a jej súborovým systémom.task — priamo alebo prostredníctvom dokumentu ukázaného modelu — vyberá, čo sa spustí. Je to vzdialené spustenie kódu o jeden skok ďalej.Spustený proti súčasnému enginu dá tento úryvok jedno zistenie: llm-output-to-code-execution, CWE-94, závažnosť kritická, spoľahlivosť vysoká, na riadku exec. Spoľahlivosť je vysoká, pretože premenná je naviazaná na skutočné volanie completion. Názov, ktorý odpoveď modelu iba pripomína — llm_response, reply — sa hlási so strednou spoľahlivosťou, lebo je to odhad a tvrdiť niečo iné by znamenalo klamať o dôkazoch.
Čo toto nie je
Ďalšie riziká špecifické pre LLM v kóde
Každé z nich bolo pred zapísaním spustené na vzorke proti súčasnému enginu.
api_key, heslo, IBAN alebo zdravotný záznam vložený do textu, ktorý odosielate. Hlásené tam, kde sa skutočne zostavuje kontext promptu, nie pri každom f-stringu, ktorý náhodou obsahuje kľúč.PythonREPLTool, ShellTool, interpret kódu, terminál. Udelenie jedného z nich mení každú otázku o prompt injection na otázku o vzdialenom spustení kódu.allow_dangerous_deserialization=True, trust_remote_code=True, dangerouslyAllow… — framework ju vypol, pretože bola nebezpečná.BLOCK_NONE, safety_settings=None, moderation=false.hub.pull(…), šablóna promptu načítaná cez HTTP. Kto ovláda ten endpoint, ovláda inštrukcie.sk-…, sk-ant-…, AIza…, hf_… zacommitované do repozitára.text-davinci-*, gpt-4-0314, claude-instant — slabšia hierarchia inštrukcií, žiadne oddelenie systémového promptu.Prečo tomu všetkému veriť
Nezávislé od poskytovateľa už svojou konštrukciou. Analyzátor rozpoznáva tvar — niečo vyrába text, niečo ho spotrebúva — nie zápis jedného konkrétneho SDK. Pomenuje framework, ktorý videl, keď to ide (OpenAI, Anthropic, Google, Azure OpenAI, Mistral, Bedrock, Ollama, LiteLLM, LangChain, LangGraph, LlamaIndex, Semantic Kernel, AutoGen, CrewAI, Hugging Face), aby zistenie mohlo povedať, odkiaľ pochádza. Je to štítok na zistení, nie integrácia pre každé SDK, a framework, ktorý v zozname chýba, sa analyzuje úplne rovnako.
Pozrite sa, ako Cybseco uvažuje o reálnom systéme
Pozrite si interaktívne demo a potom si vyžiadajte riadenú skúšobnú verziu pre svoj tím.