GitHub ha pubblicato GHSA-48jh-3gj7-fg8v alle 21:37:00 UTC del 4 settembre — CVE-2026-73556, CVSS 5.3, contro vLLM, il server di inferenza open source più ampiamente distribuito. Nei feed viene presentato come un nuovo bug di denial of service. È lo stesso bug corretto dal progetto a luglio, sopravvissuto nel percorso di codice che la patch non ha toccato.
Il percorso gemello
L’avviso è esplicito: "The fix for GHSA-rwxx-mrjm-wc2m … wrapped the regex compile in the xgrammar and outlines backends with compile_regex_with_timeout (and, for outlines, validate_regex_is_buildable). The lm-format-enforcer backend was left unguarded: it compiles the attacker-supplied regex with no timeout and no buildability check." Tutti e tre i backend arrivano alla stessa costruzione DFA di interegular; due sono limitati e uno no.
La misurazione
L’avviso pubblica i propri tempi: il riferimento '[0-9]{3}' compila in 0.0002 s; la regex dell’attaccante '(a{1,300}){300}' non è terminata in 20 s, "one core pegged at 100% in interegular FSM construction". Poiché la compilazione della grammatica avviene all’interno del percorso structured-output del motore, la richiesta non torna mai indietro e le richieste concorrenti restano bloccate dietro di essa — denial of service a livello di worker. L’avviso osserva che la stessa richiesta contro il backend outlines restituisce un errore pulito.
Che cosa non torna nella formulazione ricevuta
Due cose. Non si tratta di una nuova classe di attacco, ma di un fallimento nella completezza della patch — il dato interessante è che una correzione di sicurezza è arrivata in due dei tre sibling call site e nessuno se n’è accorto per sei settimane. E "affected versions < 0.26.0" si legge come esposizione attuale: 0.26.0 è stata rilasciata il 27 luglio e la release corrente è la 0.28.0, quindi la disclosure arriva 39 giorni dopo la correzione. Chiunque tenesse traccia della propria versione di vLLM non è mai stato esposto dopo luglio; chiunque sia rimasto bloccato sotto quella versione lo è stato, senza saperlo, da allora.
La condizione preliminare che non è poi molto
L’avviso rileva che "vLLM ships with no authentication by default". L’attacco consiste in una singola POST a /v1/completions con una regex di structured output — nessuna credenziale, nessun accesso al modello oltre l’endpoint, nessuna configurazione speciale se non la selezione del backend lm-format-enforcer. Lo structured output è la funzionalità che la maggior parte delle implementazioni in produzione attiva, perché è il modo in cui si rendono affidabili le risposte JSON.
