Izlaz vašeg modela je nepouzdan ulaz. Pronađite mjesta na kojima to vaš kod zaboravlja.
Statička analiza koda oko vašeg LLM-a — koda koji gradi prompt, poziva model i nešto radi s odgovorom. Ne modela. Ne otpornosti prompta na jailbreak. Koda.
Besplatni paket obuhvaća 3 projekta i 30 analiza mjesečno, bez ograničenja broja korisnika i bez platne kartice. Ova analiza u njega ulazi.
Problem
Model nije biblioteka. On je nepouzdan interpreter: predate mu niz znakova, a on vam vrati drugi. Sve što je utjecalo na taj niz — korisnikov vlastiti prompt, stranica koja mu je pokazana, dokument koji je dobio, rezultat drugog alata — utjecalo je i na odgovor.
Odgovor je bezopasan sve dok mu kod ne da sposobnost djelovanja. Opasnost nije u tome što je model nešto rekao; opasnost je u tome što je program u to povjerovao. Svako mjesto na kojem program s generiranim tekstom postupa kao s kodom, naredbom, upitom, putanjom ili URL-om jest injekcija jedan skok dalje — i za razliku od pitanja može li se prompt zaobići jailbreakom, taj je skok vidljiv u izvornom kodu.
Što Cybseco traži
Tamo gdje izlaz modela dospije do nečega što djeluje. Ovo su vlastite kategorije, ozbiljnosti i CWE identifikatori samog pogona.
eval, exec, compile, new Function, pickle.loads, yaml.load — odgovor postaje program.os.system, subprocess, child_process.exec, execSync — odgovor postaje naredba.execute, raw, createQuery — text-to-SQL je upravo ovaj obrazac, a DROP TABLE je uvjerljiv nastavak.open, readFile, shutil.rmtree, unlink — ../../etc/passwd jednako je uvjerljiv nastavak.requests, httpx, fetch, axios, urlopen — krivotvorenje zahtjeva na strani poslužitelja, koje bira model.Konkretan primjer
Devet redaka i cijeli oblik 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(…) — poziv koji vraća izlaz modela. Analizator veže varijablu kojoj je dodijeljen, i upravo mu to omogućuje praćenje vrijednosti kroz funkciju bez međuproceduralne analize.answer sadrži tekst na koji je napadač mogao utjecati. Između poziva i ponora ništa ga ne pregledava, ne ograničava niti ne svodi na nepromjenjiv skup operacija.exec(…) — tekst postaje program u vlastitom procesu aplikacije, s njezinim vjerodajnicama, njezinom mrežom i njezinim datotečnim sustavom.task — izravno ili preko dokumenta pokazanog modelu — bira što će se izvršiti. Ovo je udaljeno izvršavanje koda jedan skok dalje.Pokrenut na trenutnom pogonu, taj isječak daje jedan nalaz: llm-output-to-code-execution, CWE-94, ozbiljnost kritična, pouzdanost visoka, na retku exec. Pouzdanost je visoka jer je varijabla vezana uz stvarni completion poziv. Ime koje tek sliči odgovoru modela — llm_response, reply — prijavljuje se sa srednjom pouzdanošću, jer je to pretpostavka, a tvrditi drukčije značilo bi lagati o dokazima.
Što ovo nije
Ostali rizici svojstveni LLM-u u kodu
Svaki je prije zapisivanja ovdje pokrenut na uzorku protiv trenutnog pogona.
api_key, lozinka, IBAN ili medicinski zapis smješten u tekst koji šaljete. Prijavljuje se ondje gdje se doista gradi kontekst prompta, a ne kod svakog f-stringa koji slučajno sadrži ključ.PythonREPLTool, ShellTool, interpreter koda, terminal. Dodjela jednog od njih pretvara svako pitanje o injekciji prompta u pitanje o udaljenom izvršavanju koda.allow_dangerous_deserialization=True, trust_remote_code=True, dangerouslyAllow… — okvir ju je isključio jer je bila nesigurna.BLOCK_NONE, safety_settings=None, moderation=false.hub.pull(…), predložak prompta učitan preko HTTP-a. Tko upravlja tom krajnjom točkom, upravlja uputama.sk-…, sk-ant-…, AIza…, hf_… predani u repozitorij.text-davinci-*, gpt-4-0314, claude-instant — slabija hijerarhija uputa, bez odvajanja sistemskog prompta.Zašto bilo čemu od ovoga vjerovati
Neovisan o pružatelju po svojoj konstrukciji. Analizator prepoznaje oblik — nešto proizvodi tekst, nešto ga troši — a ne zapis pojedinog SDK-a. Imenuje okvir koji je vidio kada može (OpenAI, Anthropic, Google, Azure OpenAI, Mistral, Bedrock, Ollama, LiteLLM, LangChain, LangGraph, LlamaIndex, Semantic Kernel, AutoGen, CrewAI, Hugging Face) kako bi nalaz mogao reći odakle je došao. To je oznaka na nalazu, a ne integracija za svaki SDK, i okvir kojeg na tom popisu nema analizira se potpuno jednako.
Pogledajte kako Cybseco zaključuje o stvarnom sustavu
Pogledajte interaktivni demo, a zatim zatražite vođenu probu za svoj tim.