Patch generate dai modelli: il 26% risolve la falla senza cambiare comportamento

Off-by-1 Labs di 1Password ha generato 6.080 patch con ChatGPT-5.5 e Opus 4.8 su sei vulnerabilità reali, fra cui una privilege escalation nel kernel Linux e una RCE in ActiveMQ. Il 26,0% risolve la falla senza alterare il comportamento, il 20,1% la risolve alterandolo, il 53,9% non la risolve o introduce una vulnerabilità nuova. Oltre un terzo delle patch riuscite blocca l'input di prova invece della causa.

CybersecurityAICybersecurityAIVulnerabilitàPatch ManagementCVESecure CodingLLMApplication Security
Quattro dati sullo studio Off-by-1 Labs sulle patch generate dai modelli
I risultati dello studio pubblicato il 6 agosto. Fonti in fondo.

Off-by-1 Labs, il gruppo di ricerca sulla sicurezza di 1Password, ha pubblicato il 6 agosto una misura su quanto valgono le patch scritte dai modelli. Ha generato 6.080 patch su sei vulnerabilità divulgate di recente e ne ha classificato l’esito. Lo studio è firmato da Keith Hoodlet, con revisione di Casey Ellis, Jason Haddix e Mike Shema.

Come è stato misurato

Le sei vulnerabilità sono reali e nominate: CVE-2026-31431, privilege escalation nel kernel Linux; CVE-2026-34197, esecuzione di codice remoto in ActiveMQ; CVE-2026-8512, use-after-free in Chrome; CVE-2026-45185, RCE in EXIM; CVE-2026-22738, RCE via SpEL in SpringAI; e GHSA-wpqr-6v78-jr5g, RCE nella CLI di Gemini.

I modelli sono due, ChatGPT-5.5 e Opus 4.8, entrambi nelle versioni con accesso alle capacità cyber. Per ogni vulnerabilità e per ogni modello sono state generate 540 patch, in gruppi da 20 sotto condizioni variate. Delle 6.480 prodotte, 400 sono state scartate perché segnalate dal modello stesso, e l’analisi finale ne conta 6.080.

Gli esiti sono classificati in cinque scenari, testuali: “Complete fix; does not alter application behavior”, “Complete fix; alters application behavior”, “Does not fix the vulnerability”, “Complete fix of the old vulnerability while adding a new vulnerability”, “Does not fix the vulnerability while adding a new vulnerability”.

I numeri

EsitoQuota
Risolve la falla senza alterare il comportamento26,0%
Risolve la falla alterando il comportamento20,1%
Non risolve o introduce una vulnerabilità nuova53,9%

La frase dello studio sulla prima riga è “The average success rate for generating a patch that fully resolved the vulnerability… was just 26.0%”. Sull’ultima: le patch “did not resolve the vulnerability, added a new vulnerability, or both, an average 53.9% of the time”.

Le patch fragili dentro quelle riuscite

Lo studio esamina anche il contenuto delle patch classificate come riuscite. Oltre il 33% di quelle classificate S1 e S2, cioè fra quelle che risolvono, contiene “subtleties that we would qualify as ‘fragile’ from a security context”.

Fragile qui ha un significato preciso: la patch mette un controllo mirato al posto di correggere la causa. Sul caso SpringAI i modelli hanno spesso “simply escaped specific characters in user input”, bloccando il proof of concept e lasciando in piedi la vulnerabilità sottostante.

Una patch così passa i test che usano l’exploit noto. Fallisce sulla prima variante.

Trovare e riparare sono capacità diverse

Nei record CVE ufficiali otto delle nove vulnerabilità che JFrog ha corretto in Artifactory, dopo l’incidente ricostruito a Black Hat, sono accreditate a ricercatori di OpenAI, e i modelli in valutazione ne avevano trovate di sconosciute.

Lo studio di Off-by-1 misura l’altra metà del ciclo, e dà 26,0%.

Le due cose non sono in contraddizione. Trovare una vulnerabilità richiede di produrre un input che rompe qualcosa, e la verifica è immediata: o l’exploit funziona o no. Ripararla richiede di capire perché il codice si rompe, distinguere il sintomo dalla causa e non spostare il problema altrove, e la verifica non è più binaria, perché una patch può risolvere e rompere insieme. Il 20,1% che risolve alterando il comportamento è esattamente quella zona.

Cosa ne pensiamo

Il 26,0% dipende dai due modelli e dalle sei vulnerabilità scelte, e cambierà con la prossima generazione. Il 33% di patch fragili dentro quelle riuscite descrive invece un modo di sbagliare che resta uguale, perché non si vede dal risultato del test.

Una pipeline che accetta una patch quando l’exploit noto smette di funzionare classifica quelle patch come buone. Ripetere lo stesso proof of concept dà lo stesso esito su una patch fragile e su una solida. Il controllo che le distingue è dove agisce la correzione, sulla causa o sull’input, e quella lettura del diff oggi la fa una persona.

Una patch generata da un modello va trattata come una proposta di un collaboratore esterno, quindi passa dalla stessa revisione, non da una corsia veloce perché “l’ha scritta l’AI”. E il criterio di accettazione va spostato dal proof of concept alla classe di vulnerabilità: se la correzione filtra caratteri, la domanda è cosa succede con la codifica successiva.

La conclusione dichiarata dallo studio è: “human expertise still plays an essential role in the process of fully resolving vulnerabilities in software without introducing unwanted side effects”. È una posizione di 1Password, che vende sicurezza, e va pesata per quello che è. I 6.080 campioni, le sei CVE nominate e i cinque scenari dichiarati la rendono però una posizione controllabile: la stessa classificazione si può rieseguire su altre vulnerabilità e altri modelli.

Fonti

Vuoi supporto?Sei sotto attacco?Stato dei servizi
Vuoi supporto?Sei sotto attacco?Stato dei servizi