Mallisi tuloste on epäluotettavaa syötettä. Etsi kohdat, joissa koodisi unohtaa sen.
Staattinen analyysi LLM:n ympärillä olevasta koodista — koodista, joka rakentaa kehotteen, kutsuu mallia ja tekee vastauksella jotakin. Ei mallista. Ei kehotteen kestävyydestä jailbreakia vastaan. Koodista.
Maksuton taso kattaa 3 projektia ja 30 analyysia kuukaudessa, ilman käyttäjämäärän rajaa ja ilman maksukorttia. Tämä analyysi sisältyy siihen.
Ongelma
Malli ei ole kirjasto. Se on epäluotettava tulkki: annat sille merkkijonon ja se antaa yhden takaisin. Kaikki, mikä vaikutti siihen merkkijonoon — käyttäjän oma kehote, sivu joka sille näytettiin, asiakirja joka sille annettiin, toisen työkalun tulos — vaikutti vastaukseen.
Vastaus on vaaraton, kunnes koodi antaa sille kyvyn toimia. Vaara ei ole se, että malli sanoi jotakin; vaara on se, että ohjelma uskoi sen. Jokainen kohta, jossa ohjelma käsittelee tuotettua tekstiä koodina, komentona, kyselynä, polkuna tai URL-osoitteena, on injektio yhden hypyn päässä — ja toisin kuin kysymys siitä, voiko kehotteen kiertää jailbreakilla, tämä hyppy näkyy lähdekoodissa.
Mitä Cybseco etsii
Kohdat, joissa mallin tuloste päätyy johonkin, joka toimii. Nämä ovat moottorin omat kategoriat, vakavuusasteet ja CWE-tunnisteet.
eval, exec, compile, new Function, pickle.loads, yaml.load — vastauksesta tulee ohjelma.os.system, subprocess, child_process.exec, execSync — vastauksesta tulee komento.execute, raw, createQuery — text-to-SQL on täsmälleen tämä kuvio, ja DROP TABLE on uskottava jatko.open, readFile, shutil.rmtree, unlink — ../../etc/passwd on yhtä uskottava jatko.requests, httpx, fetch, axios, urlopen — palvelinpuolen pyyntöväärennös, mallin valitsemana.Konkreettinen esimerkki
Yhdeksän riviä, ja koko riskin muoto.
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(…) — kutsu, joka palauttaa mallin tulosteen. Analysaattori sitoo muuttujan, johon se sijoitettiin, ja juuri se antaa sen seurata arvoa funktion läpi ilman proseduurien välistä analyysia.answer sisältää tekstiä, johon hyökkääjä on voinut vaikuttaa. Kutsun ja nielun välissä mikään ei tarkasta sitä, rajoita sitä eikä kuvaa sitä kiinteään joukkoon operaatioita.exec(…) — tekstistä tulee ohjelma sovelluksen omassa prosessissa, sen tunnuksilla, sen verkolla ja sen tiedostojärjestelmällä.task — suoraan tai mallille näytetyn asiakirjan kautta — valitsee, mitä suoritetaan. Tämä on koodin etäsuoritus yhden hypyn päässä.Nykyisellä moottorilla ajettuna tuo katkelma tuottaa yhden havainnon: llm-output-to-code-execution, CWE-94, vakavuus kriittinen, varmuus korkea, rivillä exec. Varmuus on korkea, koska muuttuja on sidottu todelliseen completion-kutsuun. Nimi, joka vain näyttää mallin vastaukselta — llm_response, reply — raportoidaan sen sijaan keskitasoisella varmuudella, koska se on arvaus ja muun väittäminen olisi valehtelua näytöstä.
Mitä tämä ei ole
Muita LLM-kohtaisia riskejä koodissa
Jokainen niistä laukaistiin näytteellä nykyistä moottoria vasten ennen kuin se kirjoitettiin tähän.
api_key, salasana, IBAN tai potilastieto lähettämäsi tekstin sisällä. Raportoidaan siellä, missä todellista kehotekontekstia rakennetaan, ei jokaisesta f-merkkijonosta, joka sattuu sisältämään avaimen.PythonREPLTool, ShellTool, koodintulkki, pääte. Yhdenkin niistä antaminen muuttaa jokaisen kehoteinjektiokysymyksen koodin etäsuorituskysymykseksi.allow_dangerous_deserialization=True, trust_remote_code=True, dangerouslyAllow… — kehys oli kytkenyt sen pois, koska se oli turvatonta.BLOCK_NONE, safety_settings=None, moderation=false.hub.pull(…), HTTP:n yli ladattu kehotepohja. Se, joka hallitsee tuota päätepistettä, hallitsee ohjeita.sk-…, sk-ant-…, AIza…, hf_… viety repositorioon.text-davinci-*, gpt-4-0314, claude-instant — heikompi ohjehierarkia, ei järjestelmäkehotteen erottelua.Miksi uskoa mitään tästä
Palveluntarjoajariippumaton rakenteeltaan. Analysaattori tunnistaa muodon — jokin tuottaa tekstiä, jokin kuluttaa sen — eikä yhden SDK:n kirjoitusasua. Se nimeää näkemänsä kehyksen kun voi (OpenAI, Anthropic, Google, Azure OpenAI, Mistral, Bedrock, Ollama, LiteLLM, LangChain, LangGraph, LlamaIndex, Semantic Kernel, AutoGen, CrewAI, Hugging Face), jotta havainto voi kertoa mistä se tuli. Se on merkintä havainnossa, ei SDK-kohtainen integraatio, ja listalta puuttuva kehys analysoidaan täsmälleen samalla tavalla.
Näe Cybseco päättelemässä todellisesta järjestelmästä
Katso interaktiivinen demo ja pyydä sitten opastettu kokeilu tiimillesi.