Un sandbox escape in Skyvern, l'agente self-hosted che controlla un browser web a partire da passaggi generati da LLM, è stato assegnato a CVE-2026-82447 e pubblicato nel GitHub Advisory Database il 29 agosto 2026 alle 15:30:19 UTC. La correzione del codice che descrive è stata introdotta nel repository il 6 luglio alle 21:44:03 UTC53 giorni prima.

Qual era davvero il bug

Il TextPromptBlock di Skyvern rendeva ogni prompt due volte. Il primo passaggio passava attraverso SandboxedEnvironment di Jinja, come previsto. Il secondo faceva transitare la stessa stringa influenzata dall'attaccante attraverso un renderer non sandboxato, quanto basta per eseguire codice come processo del server. La correzione, commit d723de6, è una cancellazione: tre righe aggiunte e undici rimosse in block.py, eliminando il secondo rendering e l'argomento parameter_values che lo alimentava. Il resto del commit riguarda i test.

Dove la cornice narrativa sbaglia

Di advisory come questo si dicono due cose che qui non sono vere. La prima è che si sia trattato di una patch silenziosa. Non è così: le note di rilascio della v1.0.45, pubblicate il 7 luglio alle 22:19:18 UTC, contengono effettivamente la parola "SSTI". Ma è un singolo punto elenco in un testo di rilascio lungo circa 190 righe, senza advisory di sicurezza del vendor, senza un CVE all'epoca e senza nulla che lo distinguesse dal normale traffico di changelog. La seconda è l'implicazione che l'anno di un CVE dica quando si è stati esposti. Non è così — il CVE è stato assegnato da VulnCheck come autorità di numerazione terza, non dal progetto.

La parte che manda in crisi gli strumenti

Il record dell'advisory riporta un punteggio CVSS 3.1 di 8.8 e un punteggio CVSS 4.0 di 8.7, ed è classificato CWE-1336. Ma il suo array strutturato vulnerabilities è vuoto. L'intervallo interessato — da 0.2.1 fino a, ma escluso, 1.0.45 — esiste solo come testo descrittivo nella pagina di VulnCheck. Qualsiasi scanner che legga i dati strutturati dell'advisory di GitHub e confronti una dipendenza skyvern bloccata con essi non segnalerà assolutamente nulla.

Perché questa forma si ripete

Il percorso di sfruttamento non è affatto esotico. Un parametro di workflow, o l'output di un blocco a monte, è testo prodotto o ingerito dall'agente stesso; arriva a un template renderer; diventa codice sull'host dell'agente. È il ponte da prompt injection a esecuzione nella sua forma più lineare, ed è strutturale negli strumenti che consentono all'output di un modello di guidare un livello di templating.