Výstup vašeho modelu je nedůvěryhodný vstup. Najděte místa, kde na to váš kód zapomíná.
Statická analýza kódu kolem vašeho LLM — kódu, který staví prompt, volá model a s odpovědí něco dělá. Ne modelu. Ne odolnosti promptu vůči jailbreaku. Kódu.
Bezplatný tarif zahrnuje 3 projekty a 30 analýz měsíčně, bez omezení počtu uživatelů a bez platební karty. Tato analýza se do něj vejde.
Problém
Model není knihovna. Je to nedůvěryhodný interpret: předáte mu řetězec a on vám jeden vrátí. Vše, co ten řetězec ovlivnilo — vlastní prompt uživatele, stránka, která mu byla ukázána, dokument, který dostal, výsledek jiného nástroje — ovlivnilo i odpověď.
Odpověď je neškodná, dokud jí kód nedá schopnost jednat. Nebezpečí není v tom, že model něco řekl; je v tom, že tomu program uvěřil. Každé místo, kde program zachází s vygenerovaným textem jako s kódem, příkazem, dotazem, cestou nebo URL, je injektáž o jeden skok dál — a na rozdíl od otázky, zda lze prompt obejít jailbreakem, je tento skok vidět ve zdrojovém kódu.
Co Cybseco hledá
Tam, kde výstup modelu dosáhne na něco, co jedná. Toto jsou vlastní kategorie, závažnosti a identifikátory CWE enginu.
eval, exec, compile, new Function, pickle.loads, yaml.load — z odpovědi se stává program.os.system, subprocess, child_process.exec, execSync — z odpovědi se stává příkaz.execute, raw, createQuery — text-to-SQL je přesně tento vzor a DROP TABLE je věrohodné doplnění.open, readFile, shutil.rmtree, unlink — ../../etc/passwd je stejně věrohodné doplnění.requests, httpx, fetch, axios, urlopen — padělání požadavku na straně serveru, zvolené modelem.Konkrétní příklad
Devět řádků 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(…) — volání, které vrací výstup modelu. Analyzátor naváže proměnnou, do níž byl přiřazen, a právě to mu umožňuje sledovat hodnotu napříč funkcí bez meziprocedurální analýzy.answer obsahuje text, který mohl ovlivnit útočník. Mezi voláním a cílem jej nic nekontroluje, neomezuje ani nepřevádí na pevnou množinu operací.exec(…) — text se stává programem ve vlastním procesu aplikace, s jejími přihlašovacími údaji, její sítí a jejím souborovým systémem.task — přímo nebo prostřednictvím dokumentu ukázaného modelu — vybírá, co se spustí. To je vzdálené spuštění kódu o jeden skok dál.Spuštěn proti současnému enginu dá tento úryvek jedno zjištění: llm-output-to-code-execution, CWE-94, závažnost kritická, spolehlivost vysoká, na řádku exec. Spolehlivost je vysoká, protože proměnná je navázána na skutečné volání completion. Název, který odpověď modelu jen připomíná — llm_response, reply — je hlášen se střední spolehlivostí, protože to je odhad a tvrdit něco jiného by znamenalo lhát o důkazech.
Co toto není
Další rizika specifická pro LLM v kódu
Každé z nich bylo před sepsáním spuštěno na vzorku proti současnému enginu.
api_key, heslo, IBAN nebo zdravotní záznam vložený do textu, který odesíláte. Hlášeno tam, kde se skutečně staví kontext promptu, nikoli u každého f-stringu, který náhodou obsahuje klíč.PythonREPLTool, ShellTool, interpret kódu, terminál. Udělení jednoho z nich mění každou otázku o prompt injection v otázku o vzdáleném spuštění kódu.allow_dangerous_deserialization=True, trust_remote_code=True, dangerouslyAllow… — framework ji vypnul, protože byla nebezpečná.BLOCK_NONE, safety_settings=None, moderation=false.hub.pull(…), šablona promptu načtená přes HTTP. Kdo ovládá ten endpoint, ovládá instrukce.sk-…, sk-ant-…, AIza…, hf_… zacommitované do repozitáře.text-davinci-*, gpt-4-0314, claude-instant — slabší hierarchie instrukcí, žádné oddělení systémového promptu.Proč tomu všemu věřit
Nezávislé na poskytovateli už svou konstrukcí. Analyzátor rozpoznává tvar — něco vyrábí text, něco jej spotřebovává — nikoli zápis jednoho konkrétního SDK. Pojmenuje framework, který viděl, když to jde (OpenAI, Anthropic, Google, Azure OpenAI, Mistral, Bedrock, Ollama, LiteLLM, LangChain, LangGraph, LlamaIndex, Semantic Kernel, AutoGen, CrewAI, Hugging Face), aby zjištění mohlo říct, odkud pochází. To je štítek na zjištění, ne integrace pro každé SDK, a framework, který v seznamu chybí, se analyzuje úplně stejně.
Podívejte se, jak Cybseco uvažuje o reálném systému
Zhlédněte interaktivní demo a poté si vyžádejte řízenou zkušební verzi pro svůj tým.