IA e codice
Sicurezza del codice generato dall’IA: i rischi e come revisionarlo
Sicurezza del codice generato dall’IA significa trattare il codice prodotto da assistenti e agenti di programmazione come quello di un collaboratore che non hai mai incontrato: verifica ogni dipendenza che aggiunge, analizzalo alla ricerca di segreti e di vulnerabilità di tipo injection e fai in modo che una persona lo riveda prima del merge. I rischi che l’IA introduce di nuovo sono i pacchetti obsoleti, malevoli o del tutto inesistenti.
Piano Free, nessuna carta richiesta.
Quali sono i rischi di sicurezza del codice generato dall’IA?
Gli assistenti e gli agenti di programmazione scrivono codice prevedendo ciò che di solito viene dopo, sulla base del codice esistente. Questo li rende veloci, ma significa anche che ripetono ciò che era comune in quel codice, comprese vecchie versioni delle librerie, API deprecate e abitudini poco sicure. Un modello non sa quale release di un pacchetto è stata corretta il mese scorso, a meno che non vada a verificarlo, e un agente in grado di eseguire comandi può installare ciò che suggerisce prima che qualcuno legga la modifica.
Nessuno di questi rischi è nuovo di per sé. A cambiare sono il volume e la velocità: più codice, più dipendenze nuove e meno persone che leggono ogni riga. La risposta è applicare in automatico i controlli che applicheresti a qualsiasi contributo esterno, così che non vengano saltati quando il diff è corposo.
- Versioni di dipendenze obsolete o con vulnerabilità note, suggerite a partire dai dati di addestramento.
- Nomi di pacchetti che non esistono, o che un attaccante ha registrato proprio perché i modelli tendono a inventarli.
- Pacchetti malevoli pubblicati di recente, compresi nomi che imitano quelli di librerie popolari.
- Segreti incollati nel codice o nella configurazione: chiavi API, token, stringhe di connessione.
- Pattern non sicuri, come query SQL o comandi di shell costruiti concatenando stringhe, verifiche dei certificati disattivate o crittografia debole.
- Agenti con permessi ampi che installano pacchetti, eseguono script o fanno il push di modifiche senza revisione.
Che cos’è lo slopsquatting?
Lo «slopsquatting» consiste nel registrare un pacchetto con un nome che i modelli di IA tendono a inventare, così che chiunque installi quel nome inventato ottenga il codice dell’attaccante. Il termine unisce «slop», in gergo l’output di bassa qualità generato dalle macchine, e typosquatting, la pratica con cui gli attaccanti registrano storpiature dei nomi di pacchetti popolari. Funziona perché i registri pubblici come npm e PyPI permettono a chiunque di pubblicare con un nome che nessuno ha ancora rivendicato.
Uno studio sottoposto a revisione paritaria e presentato a USENIX Security 2025 ha testato 16 modelli di generazione di codice e prodotto 576.000 campioni di codice. Gli autori riportano che la quota media di pacchetti allucinati è stata di almeno il 5,2 % per i modelli commerciali e del 21,7 % per i modelli open source, e hanno raccolto 205.474 nomi di pacchetti inventati unici. Ripetendo dieci volte lo stesso prompt, un nome inventato è ricomparso più di una volta nel 58 % dei casi, ed è questo a rendere tali nomi abbastanza prevedibili da poter essere registrati.
Il progetto OpenSSF Malicious Packages pubblica, nel formato OSV, le segnalazioni di pacchetti malevoli trovati nei registri open source, con identificatori che iniziano con MAL-. Confrontare le dipendenze con questo database intercetta i pacchetti già segnalati. Non può intercettare un pacchetto registrato ieri che nessuno ha ancora analizzato, quindi va affiancato alla verifica che un pacchetto esista, di chi lo pubblica e da quanto tempo è disponibile. Questa verifica, nel momento in cui un agente propone un pacchetto, è nella roadmap di KROMSE.
Come revisionare il codice scritto dall’IA prima del merge
L’obiettivo è una routine che funzioni allo stesso modo sia che la modifica l’abbia scritta una persona sia che l’abbia scritta un agente. Gran parte può stare nella pipeline che già esegue i tuoi test; la parte umana consiste nel leggere il diff con lo scetticismo che riserveresti alla pull request di uno sconosciuto. OpenSSF pubblica una guida alle istruzioni orientate alla sicurezza per gli assistenti di programmazione, un utile punto di partenza per i prompt stessi.
- Fai il commit dei lockfile e installa a partire da quelli nella CI, così le versioni revisionate sono le stesse che distribuisci.
- Fissa versioni esatte per le nuove dipendenze e rivedi ogni modifica al lockfile, non solo al manifest.
- Verifica che ogni nuovo pacchetto esista, sia quello che intendevi e che chi lo pubblica e la sua cronologia siano verificabili.
- Mantieni una lista di pacchetti approvati (allowlist), oppure installa tramite un proxy interno del registro che blocchi tutto il resto.
- Esegui analisi del codice sorgente, ricerca di segreti e controlli sulle dipendenze a ogni modifica, e blocca il merge in presenza di nuove rilevazioni critiche.
- Richiedi un revisore designato per le modifiche scritte dall’IA e non permettere agli agenti di fare merge o deploy da soli.
Il codice scritto dall’IA cambia i tuoi obblighi ai sensi del Cyber Resilience Act?
Il Cyber Resilience Act, il regolamento sulla ciberresilienza, pone i suoi obblighi in capo al fabbricante di un prodotto con elementi digitali. Il suo considerando 34 precisa che gli obblighi di gestione delle vulnerabilità si applicano al prodotto nella sua interezza, compresi tutti i componenti integrati. L’articolo 13, paragrafo 5, chiede di esercitare la dovuta diligenza quando si integrano componenti di terzi, compresi quelli open source, e l’allegato I, parte II, chiede ai fabbricanti di identificare e documentare i componenti, anche con una distinta base del software (SBOM), e di effettuare prove e riesami efficaci e periodici della sicurezza del prodotto.
In pratica, una dipendenza aggiunta da un agente è un componente di terzi come qualsiasi altro, e una vulnerabilità che introduce spetta a te gestirla per tutto il periodo di assistenza. Gli obblighi di segnalazione dell’articolo 14 si applicano dall’11 settembre 2026; la maggior parte degli altri obblighi si applica dall’11 dicembre 2027.
Cosa intercettano i controlli automatici e cosa sfugge loro
I database di vulnerabilità conoscono le vulnerabilità che sono state segnalate, e un database di pacchetti malevoli conosce i pacchetti che qualcuno ha analizzato. L’analisi del codice sorgente trova pattern rischiosi noti, come una query costruita a partire dall’input dell’utente, ma non una regola di business sbagliata o un controllo dei permessi mancante che sembra codice qualsiasi. Cercare segreti nel codice attuale non rileva una chiave che è stata committata e poi cancellata, perché resta nella cronologia di git.
Per questo una routine di revisione combina più controlli con una persona che legge la modifica. Quando uno strumento non segnala nulla, registra ciò che non ha potuto vedere, così che «nessuna rilevazione» non venga letto come «nessun rischio». Per il codice scritto dall’IA, le lacune maggiori sono i pacchetti troppo recenti per comparire in qualsiasi database e i nomi che non esistevano finché un modello non li ha suggeriti.
Disponibile oggi in KROMSE
KROMSE controlla il codice e le dipendenze prodotti dal tuo team e dai suoi assistenti IA; segnala le rilevazioni e non modifica il codice.
- Confronta lockfile e manifest con OSV.dev tramite OSV-Scanner, per progetti npm, Yarn v1, pnpm, Poetry, uv, pip, moduli Go, Cargo, Maven, Gradle, Composer, Bundler e .NET.
- Segnala come critiche le dipendenze elencate nel database OpenSSF Malicious Packages, con la rimozione come unico rimedio.
- Trova con Gitleaks le credenziali committate nel codice del commit scansionato; i valori dei segreti vengono oscurati e mai conservati. La cronologia di git non viene analizzata.
- Analisi del codice sorgente per 11 linguaggi: C, C++, C#, Go, Java, JavaScript, TypeScript, Kotlin, Python, Scala e Swift.
- Una spiegazione in linguaggio chiaro di ogni rilevazione e un verdetto dell’IA per ciascuna, entro la quota di utilizzo del tuo piano.
In arrivo
Nella roadmap, non ancora disponibile. Le date sono obiettivi, non promesse; questa pagina viene aggiornata il giorno in cui una funzionalità diventa disponibile.
- In arrivo · Q4 2026 (novembre)Plug-in per agenti di programmazione IA. Un plug-in per gli agenti di programmazione basati sull’IA verificherà ogni pacchetto proposto dall’agente prima che entri nel codice, compresi i pacchetti che non esistono o che sono stati pubblicati solo pochi giorni prima.
- In arrivo · Q4 2026 (novembre)Correzioni proposte dall’IA, approvate da una persona. KROMSE proporrà correzioni per le rilevazioni, scritte con l’IA e applicate solo dopo l’approvazione di una persona del tuo team.
- In arrivo · Q1 2027Sicurezza di agenti e modelli IA. KROMSE produrrà una distinta base dell’IA (AI bill of materials), esaminerà gli strumenti e i permessi che i tuoi agenti possono usare e rileverà i file di modello non sicuri.
Domande frequenti
Il codice generato dall’IA è meno sicuro di quello scritto dalle persone?
Dipende dal modello, dal prompt e dalla revisione. Il codice generato dall’IA tende a ripetere ciò che era comune nel codice esistente, comprese versioni obsolete e pattern non sicuri, e arriva in volumi maggiori. Revisionalo come il codice di un collaboratore che non conosci: stessi test, stesse scansioni e approvazione umana prima del merge.
Che cos’è lo slopsquatting?
Lo slopsquatting è la registrazione di un pacchetto con un nome che i modelli di IA tendono a inventare, così che chiunque installi il nome inventato ottenga il codice dell’attaccante. È una variante del typosquatting. Le difese sono verificare che ogni nuova dipendenza esista e sia quella voluta, fissare le versioni in un lockfile committato e confrontare i pacchetti con i database di pacchetti malevoli.
Come impedisco a un agente IA di installare pacchetti malevoli?
Limita ciò che l’agente può fare: nessuna installazione fuori da una sandbox, installazioni solo da una lista approvata o da un proxy interno del registro, e nessun merge senza revisione umana. Nella CI, confronta le nuove dipendenze con i dati su vulnerabilità e pacchetti malevoli, e fissa le versioni in un lockfile committato.
KROMSE può dirmi se un pacchetto suggerito da un’IA non esiste?
Non oggi. KROMSE confronta le dipendenze presenti nei tuoi lockfile e manifest con OSV.dev, comprese le segnalazioni di OpenSSF Malicious Packages, quindi un pacchetto malevolo già segnalato viene contrassegnato come critico. Il rilevamento di nomi di pacchetti inventati e di pacchetti pubblicati da pochi giorni è nella roadmap, tramite un plug-in per gli agenti di programmazione.
KROMSE corregge il codice generato dall’IA?
No. KROMSE segnala le rilevazioni, le spiega in linguaggio chiaro e può fornire un verdetto dell’IA per ciascuna, entro la quota di utilizzo del tuo piano. Non modifica il codice né apre pull request, e la sua app GitHub ha accesso in sola lettura. Le correzioni proposte dall’IA e approvate da una persona sono nella roadmap.
I segreti nel codice generato dall’IA compaiono in una scansione di KROMSE?
KROMSE esegue Gitleaks sul codice del commit che scansiona e segnala le credenziali committate, con i valori dei segreti oscurati e mai conservati. Non analizza la cronologia di git, quindi una chiave committata e poi cancellata non viene trovata. Esegui la rotazione di qualsiasi chiave esposta, che sia ancora nel codice o no.
Guide correlate
Fonti
- Spracklen et al., «We Have a Package for You! A Comprehensive Analysis of Package Hallucinations by Code Generating LLMs», USENIX Security 2025
- OpenSSF Best Practices Working Group: guida alle istruzioni orientate alla sicurezza per gli assistenti di programmazione IA (in inglese)
- Repository OpenSSF Malicious Packages
- OpenSSF: rilevare i pacchetti malevoli con l’API di OSV (in inglese)
- Regolamento (UE) 2024/2847 (regolamento sulla ciberresilienza)