Un avviso di gravità massima è stato pubblicato per ash_ai, l'estensione AI per il framework Ash di Elixir. Il difetto riguarda il modo in cui un prompt viene trasformato in testo: il contenuto del prompt passa attraverso EEx, il motore di template di Elixir, ed è valutato. Qualsiasi cosa si trovi all'interno dei marcatori di interpolazione di EEx non è quindi un dato: è codice sorgente Elixir eseguito sul server.

Perché il punteggio è 10.0

Perché il percorso vulnerabile è quello documentato. Il pattern interessato è il modo normale in cui viene scritto l'action di prompt della libreria, quindi un deployment standard risulta esposto senza fare nulla di insolito. Se una parte del prompt è assemblata a partire da input dell'utente — un messaggio di chat, una query di ricerca, un ticket di assistenza, un nome di file — quell'input raggiunge un valutatore di codice. Il risultato è esecuzione remota di codice senza autenticazione, senza privilegi richiesti.

Il dettaglio che vanifica ogni difesa a livello AI

La valutazione avviene mentre la stringa del prompt viene costruita — prima che la richiesta venga inviata a qualunque modello. I filtri contro il prompt injection, il rafforzamento del system prompt, la moderazione dell'output, le allowlist per le chiamate agli strumenti e i gate di approvazione umana operano al confine del modello o dopo di esso. Tutti stanno a valle della riga vulnerabile. Non si tratta di un bug di prompt injection che un controllo di allineamento potrebbe intercettare; è template injection che capita di vivere in un prompt, e lo stack AI attorno è irrilevante.

Cosa sbaglia la lettura più comune

"Corretto in 1.0.0" suona come una normale istruzione di upgrade. Non lo è. 1.0.0 è una major release le cui note si aprono con una modifica incompatibile — una dipendenza resa opzionale — e non esiste una patch backportata sulla linea precedente. Quindi la remediation per un CVSS 10.0 è una migrazione di major version, esattamente il tipo di aggiornamento che un team programma invece di applicare subito. La gravità dell'avviso dice stanotte; la forma della release dice il prossimo sprint.

Il pattern da chiamare per nome

I motori di template dentro la costruzione dei prompt stanno diventando comuni, perché i prompt sono stringhe con variabili e un motore di template è lo strumento ovvio. L'insidia è che i motori di template generici sono stati costruiti per rendere markup generato da codice per autori fidati, non per interpolare input runtime non fidati. Ovunque il testo dell'utente fluisca in un template che supporta la valutazione di espressioni, esiste la stessa classe di bug, indipendentemente dal linguaggio.