GitHub sendte CodeQL 2.26.0 den 10. juli med spørringen js/system-prompt-injection, ifølge ByteIota. Har du allerede Code Scanning på et JavaScript- eller TypeScript-repo, fikk du den automatisk, uten oppsett.
Spørringen bruker taint tracking, CodeQLs kjerneteknikk: den følger data du ikke kontrollerer fra inngangen (HTTP-parametere, skjemafelt, query-strenger) til utgangen, altså systemmeldingen i et modellkall. Analogien til SQL-injeksjon holder presist. Når CodeQL flagger en spørring der bruker-ID-en limes rett inn i SQL-strengen, er det fordi upålitelige data styrer en privilegert instruksjon. En systemmelding satt til content: userInput er nøyaktig samme feil: modellen kan ikke skille utviklerens instruks fra angriperens når de deler streng. Dekningen omfatter OpenAI (inkludert Realtime og Sora), Anthropics messages-API og Google GenAI.
To begrensninger avgjør om dette hjelper deg i praksis. Spørringen dekker bare JavaScript og TypeScript, mens mesteparten av LLM-koden i produksjon er Python. Og den finner ikke indirekte prompt-injeksjon, der instruksjonen ligger i et dokument, en nettside eller et verktøysvar som flyter inn i modellens kontekst. Statisk analyse kan ikke vite hva eksternt innhold vil inneholde ved kjøretid. Det er nettopp den varianten Ghostcommit-angrepet bruker.
Hva bør du gjøre?
- Åpne Security-fanen på JavaScript- og TypeScript-repoene dine og se etter nye varsler om system-prompt-injection. Code Scanning er gratis på offentlige repoer.
- Flytt all brukerinput ut av systemmeldingen og inn i user-rollen. Systemprompten skal være en statisk streng du kontrollerer.
- Regn med tiltak ved kjøretid uansett. Den direkte varianten er den eneste spørringen fanger.