Изходът на вашия модел е недоверен вход. Намерете къде кодът ви забравя това.
Статичен анализ на кода около вашия LLM — кодът, който изгражда промпта, извиква модела и прави нещо с отговора. Не на модела. Не на устойчивостта на промпта срещу jailbreak. На кода.
Безплатният план покрива 3 проекта и 30 анализа месечно, без ограничение за броя потребители и без банкова карта. Този анализ се побира в него.
Проблемът
Моделът не е библиотека. Той е недоверен интерпретатор: подавате му низ и той ви връща друг. Всичко, което е повлияло на този низ — собственият промпт на потребителя, страница, която му е била показана, документ, който е получил, резултат от друг инструмент — е повлияло и на отговора.
Отговорът е безобиден, докато кодът не му даде способност да действа. Опасността не е, че моделът е казал нещо; опасността е, че програмата му е повярвала. Всяко място, където програма третира генериран текст като код, като команда, като заявка, като път или като URL, е инжекция през още един скок — и за разлика от въпроса дали промптът може да бъде заобиколен с jailbreak, този скок се вижда в изходния код.
Какво търси Cybseco
Там, където изходът на модела стига до нещо, което действа. Това са собствените категории, степени на сериозност и CWE идентификатори на машината.
eval, exec, compile, new Function, pickle.loads, yaml.load — отговорът се превръща в програма.os.system, subprocess, child_process.exec, execSync — отговорът се превръща в команда.execute, raw, createQuery — text-to-SQL е точно този модел, а DROP TABLE е правдоподобно продължение.open, readFile, shutil.rmtree, unlink — ../../etc/passwd е също толкова правдоподобно продължение.requests, httpx, fetch, axios, urlopen — подправяне на заявка от страна на сървъра, избрано от модела.Конкретен пример
Девет реда и цялата форма на риска.
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(…) — извикване, което връща изход на модела. Анализаторът свързва променливата, на която е присвоен, и точно това му позволява да проследи стойността през функцията без междупроцедурен анализ.answer съдържа текст, повлиян от нападател. Между извикването и приемника нищо не го проверява, не го ограничава и не го свежда до фиксиран набор операции.exec(…) — текстът се превръща в програма в самия процес на приложението, с неговите удостоверения, неговата мрежа и неговата файлова система.task — пряко или чрез документ, показан на модела — избира какво ще се изпълни. Това е отдалечено изпълнение на код през още един скок.Изпълнен срещу текущата машина, този откъс дава една констатация: llm-output-to-code-execution, CWE-94, сериозност критична, увереност висока, на реда exec. Увереността е висока, защото променливата е свързана с действително completion извикване. Име, което само прилича на отговор от модел — llm_response, reply — се докладва със средна увереност, защото това е предположение, а да се твърди друго би било лъжа за доказателството.
Какво не е това
Други специфични за LLM рискове в кода
Всеки от тях беше задействан върху проба срещу текущата машина, преди да бъде записан тук.
api_key, парола, IBAN или медицински запис, поставени в текста, който изпращате. Докладва се там, където наистина се изгражда контекст на промпт, а не при всеки f-низ, който случайно съдържа ключ.PythonREPLTool, ShellTool, интерпретатор на код, терминал. Предоставянето на който и да е от тях превръща всеки въпрос за промпт инжекция във въпрос за отдалечено изпълнение на код.allow_dangerous_deserialization=True, trust_remote_code=True, dangerouslyAllow… — рамката я е изключила, защото е била опасна.BLOCK_NONE, safety_settings=None, moderation=false.hub.pull(…), шаблон за промпт, зареден по HTTP. Който контролира тази крайна точка, контролира инструкциите.sk-…, sk-ant-…, AIza…, hf_…, подадени в хранилището.text-davinci-*, gpt-4-0314, claude-instant — по-слаба йерархия на инструкциите, без отделяне на системния промпт.Защо да вярвате на нещо от това
Независим от доставчика по конструкция. Анализаторът разпознава формата — нещо произвежда текст, нещо го потребява — а не изписването на един конкретен SDK. Назовава рамката, която е видял, когато може (OpenAI, Anthropic, Google, Azure OpenAI, Mistral, Bedrock, Ollama, LiteLLM, LangChain, LangGraph, LlamaIndex, Semantic Kernel, AutoGen, CrewAI, Hugging Face), за да може констатацията да каже откъде идва. Това е етикет върху констатацията, а не интеграция за всеки SDK, и рамка, която липсва в този списък, се анализира по точно същия начин.
Вижте как Cybseco разсъждава за реална система
Гледайте интерактивното демо, след което заявете насочен пробен период за вашия екип.