Ieșirea modelului tău este intrare neîncrezută. Găsește unde codul tău uită asta.
Analiză statică a codului din jurul LLM-ului tău — codul care construiește promptul, apelează modelul și face ceva cu răspunsul. Nu modelul. Nu rezistența promptului la un jailbreak. Codul.
Planul gratuit acoperă 3 proiecte și 30 de analize pe lună, fără limită de utilizatori și fără card bancar. Această analiză intră în el.
Problema
Un model nu este o bibliotecă. Este un interpretor neîncrezut: îi dai un șir de caractere și îți întoarce altul. Tot ce a influențat acel șir — promptul utilizatorului, o pagină care i-a fost arătată, un document care i-a fost dat, rezultatul altui instrument — a influențat răspunsul.
Răspunsul este inofensiv până când codul îi dă o capacitate. Pericolul nu este că un model a spus ceva, ci că un program l-a crezut. Fiecare loc în care un program tratează textul generat drept cod, drept comandă, drept interogare, drept cale sau drept URL este o injecție la un salt distanță — și, spre deosebire de întrebarea dacă un prompt poate fi ocolit printr-un jailbreak, acel salt se vede în codul sursă.
Ce caută Cybseco
Acolo unde ieșirea modelului ajunge la ceva care acționează. Acestea sunt categoriile, severitățile și identificatorii CWE proprii motorului.
eval, exec, compile, new Function, pickle.loads, yaml.load — răspunsul devine un program.os.system, subprocess, child_process.exec, execSync — răspunsul devine o comandă.execute, raw, createQuery — text-to-SQL este exact acest tipar, iar DROP TABLE este o completare plauzibilă.open, readFile, shutil.rmtree, unlink — ../../etc/passwd este la fel de plauzibilă ca o completare.requests, httpx, fetch, axios, urlopen — falsificare de cereri pe partea de server, aleasă de model.Un exemplu concret
Nouă linii și toată forma riscului.
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(…) — un apel care întoarce ieșirea modelului. Analizorul leagă variabila căreia i-a fost atribuită, iar tocmai asta îi permite să urmărească valoarea prin funcție fără analiză interprocedurală.answer conține text influențat de un atacator. Între apel și punctul final nimic nu îl inspectează, nu îl constrânge și nu îl reduce la un set fix de operații.exec(…) — textul devine un program în chiar procesul aplicației, cu credențialele ei, rețeaua ei și sistemul ei de fișiere.task — direct sau printr-un document arătat modelului — alege ce se execută. Aceasta este execuție de cod la distanță, la un salt distanță.Rulat pe motorul actual, acel fragment produce o constatare: llm-output-to-code-execution, CWE-94, severitate critică, încredere ridicată, pe linia exec. Încrederea este ridicată pentru că variabila este legată de un apel completion real. Un nume care doar seamănă cu un răspuns de model — llm_response, reply — este raportat cu încredere medie, pentru că aceea este o presupunere, iar a afirma altceva ar însemna să minți despre dovezi.
Ce nu este aceasta
Alte riscuri specifice LLM în cod
Fiecare a fost declanșat pe un eșantion, pe motorul actual, înainte de a fi scris aici.
api_key, o parolă, un IBAN sau o fișă medicală puse în textul pe care îl trimiți. Raportat acolo unde se construiește un context de prompt real, nu la orice f-string care se întâmplă să conțină o cheie.PythonREPLTool, ShellTool, un interpretor de cod, un terminal. Acordarea oricăruia dintre ele transformă orice întrebare despre injecția de prompt într-o întrebare despre execuția de cod la distanță.allow_dangerous_deserialization=True, trust_remote_code=True, dangerouslyAllow… — un framework a dezactivat-o pentru că nu era sigură.BLOCK_NONE, safety_settings=None, moderation=false.hub.pull(…), un șablon de prompt încărcat prin HTTP. Cine controlează acel endpoint controlează instrucțiunile.sk-…, sk-ant-…, AIza…, hf_… comise în depozit.text-davinci-*, gpt-4-0314, claude-instant — ierarhie de instrucțiuni mai slabă, fără separarea promptului de sistem.De ce să crezi ceva din toate acestea
Independent de furnizor prin construcție. Analizorul recunoaște forma — ceva produce text, ceva îl consumă — și nu scrierea unui anumit SDK. Numește framework-ul pe care l-a văzut atunci când poate (OpenAI, Anthropic, Google, Azure OpenAI, Mistral, Bedrock, Ollama, LiteLLM, LangChain, LangGraph, LlamaIndex, Semantic Kernel, AutoGen, CrewAI, Hugging Face), ca o constatare să poată spune de unde vine. Aceasta este o etichetă pe constatare, nu o integrare pentru fiecare SDK, iar un framework absent din listă este analizat exact la fel.
Vezi cum raționează Cybseco despre un sistem real
Urmărește demonstrația interactivă, apoi solicită o perioadă de probă ghidată pentru echipa ta.