Simone Orsi
Tutti gli articoli
·aisecuritysoftware-engineering

Il Codice Costa Poco, la Correttezza Costa Molto

L'AI rende banale scrivere codice, ma verificare che funzioni correttamente in condizioni avverse sta diventando il vero collo di bottiglia.

Tutti sono entusiasti del fatto che l'AI renda la generazione di codice più veloce ed economica. Secondo me stanno perdendo il punto.

Sì, ora posso tirare su un endpoint API funzionante in pochi minuti. Sì, Claude sa scrivere componenti React decenti. Ma se c'è una cosa che ho imparato da anni di ricerca sulle vulnerabilità è che la parte difficile non è mai stata scrivere codice che funziona. La parte difficile è scrivere codice che funziona correttamente in condizioni che non avevi immaginato.

Il mese scorso ho assistito alla submission di una vulnerabilità in una startup fintech, il risultato? Hanno pagato un bounty da 25.000 dollari. Il bug non era in qualche implementazione crittografica complessa. Era nella logica di validazione degli input che funzionava perfettamente nel 99,9% dei casi ma falliva catastroficamente quando inviavi una sequenza specifica di caratteri Unicode che scatenava un edge case nella loro libreria di parsing.

Gli sviluppatori non erano incompetenti. Il codice funzionava esattamente come previsto. Semplicemente non funzionava correttamente in quel caso specifico.

Questo è il gap che si sta allargando. L'AI può generare codice sintatticamente corretto e funzionalmente valido a un ritmo incredibile. Ma fondamentalmente non pensa come "attacker". Non sa ragionare (abbastanza bene) sui casi limite che gli attackers troveranno, sulle race condition che emergono sotto carico, o sulle interazioni sottili tra componenti che creano vulnerabilità.

Stiamo passando da "posso scrivere questa funzionalità?" a "posso dimostrare che questa funzionalità non si romperà in modi inaspettati?" Il collo di bottiglia si sta spostando dalla generazione di codice alla verifica del codice.

Mentre i sistemi AI diventano più capaci e autonomi, questa sfida della verifica diventa sempre più complessa. Non stiamo solo gestendo codice che deve funzionare correttamente una volta. Stiamo gestendo sistemi che generano e modificano codice continuamente, spesso senza supervisione umana.

Credo che dovremmo spostare l'attenzione sulla costruzione di sistemi che possono dimostrare la propria correttezza mentre evolvono. Questo significa sviluppare architetture auto-verificanti, pipeline di verifica formale continua, e codice che porta con sé le proprie prove di correttezza. Il vantaggio competitivo non verrà dal generare codice più velocemente, ma dal creare sistemi che possono validare il proprio comportamento mentre si adattano.

Il futuro non riguarda scrivere più codice più velocemente. Riguarda costruire sistemi che possono dimostrare la propria correttezza mentre evolvono.