← Ultimi articoli
💻 computer science

Prompt Structure Redistributes, Not Reduces: An Empirical Analysis of Security-Weaknesses in LLM-Generated Python Code

Questo studio empirico dimostra che, sebbene i prompt strutturati e orientati alla sicurezza migliorino significativamente la conformità dei modelli linguistici di grandi dimensioni (LLM) e riducano gli output non validi, essi non riescono a ridurre costantemente la prevalenza complessiva di debolezze di sicurezza nel codice Python generato, ridistribuendo invece spesso il rischio spostando le vulnerabilità ad alta gravità verso quelle a bassa gravità e inducendo una deriva semantica che altera silenziosamente la funzionalità richiesta.

Autori originali: Maitreyee Das Urmi, Jessica Pourleyli, Fabio Santos, Glaucia Melo

Pubblicato 2026-08-26
📖 5 min di lettura🧠 Approfondimento

Autori originali: Maitreyee Das Urmi, Jessica Pourleyli, Fabio Santos, Glaucia Melo

Articolo originale sotto licenza CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Questa è una spiegazione generata dall'IA dell'articolo qui sotto. Non è stata scritta né approvata dagli autori. Per precisione tecnica, consulta l'articolo originale. Leggi il disclaimer completo

Nel panorama moderno della creazione di software, è emerso un nuovo tipo di assistente: i modelli linguistici di grandi dimensioni. Questi sono potenti programmi informatici addestrati su enormi quantità di testo, capaci di scrivere codice informatico quando richiesto in linguaggio naturale. Gli sviluppatori li utilizzano per velocizzare il proprio lavoro, digitando la descrizione di un compito e ricevendo in cambio un blocco di codice. Tuttavia, proprio come uno scrittore umano potrebbe accidentalmente includere un'idea pericolosa se non guidato con cura, queste macchine possono produrre codice con vulnerabilità di sicurezza nascoste. Per prevenire ciò, gli ingegneri utilizzano una tecnica chiamata prompt engineering, che consiste nel creare istruzioni specifiche per guidare il modello verso risultati più sicuri. La speranza prevalente è stata che, semplicemente chiedendo al modello di essere più prudente o fornendo un modello strutturato per la sua risposta, avremmo potuto ridurre significamente il numero di falle di sicurezza nel software che esso genera.

Un team di ricercatori si è posto l'obiettivo di testare se questa speranza fosse pienamente giustificata. Si sono concentrati su una domanda critica: aggiungere più struttura e avvisi di sicurezza alle istruzioni renda effettivamente il codice più sicuro, o ne cambia solo l'aspetto? Per trovare la risposta, hanno condotto un esperimento su larga scala utilizzando due diversi modelli di intelligenza artificiale, uno di una grande azienda tecnologica e uno ad uso pubblico. Hanno chiesto a questi modelli di risolvere 424 compiti di programmazione specifici noti per essere soggetti a rischi di sicurezza, come la gestione di file o dei dati degli utenti. Per ogni compito, hanno provato cinque diverse versioni di istruzioni, che spaziavano da una semplice richiesta a un prompt altamente dettagliato che includeva regole rigide sugli standard di sicurezza e avvertenze contro input malevoli.

I ricercatori hanno prima osservato se i modelli avrebbero anche tentato di scrivere il codice. Quando ricevevano solo una richiesta semplice e non strutturata, il modello più avanzato rifiutava di generare codice per la maggior parte dei compiti sensibili alla sicurezza, rispondendo spesso con un rifiuto cortese invece di una soluzione. Tuttavia, una volta che i ricercatori hanno aggiunto un modello strutturato che definiva chiaramente il ruolo dell'ingegnere del software e specificava esattamente come dovesse apparire l'output, il tasso di rifiuto è sceso drasticamente. Il modello ha iniziato a produrre codice valido per quasi ogni compito. Questo successo iniziale suggeriva che le istruzioni strutturate sono eccellenti nel far svolgere il lavoro alla macchina, ma i ricercatori dovevano sapere se il codice prodotto fosse effettivamente sicuro.

Quando hanno analizzato il codice valido che era stato generato, i risultati hanno rivelato una realtà più complessa. I ricercatori hanno utilizzato strumenti di scansione specializzati per identificare le debolezze di sicurezza, categorizzandole in base alla loro pericolosità. Hanno scoperto che, sebbene i prompt più dettagliati e focalizzati sulla sicurezza riducessero il numero dei difetti più gravi, non eliminavano i problemi. Inveve, la natura dei difetti cambiava. Le istruzioni sembravano spingere il modello a evitare gli errori più ovvi e pericolosi, ma nel farlo, spesso li sostituivano con problemi meno gravi, ma comunque presenti. Per il modello avanzato, la proporzione di errori ad alto rischio è scesa significamente, ma la proporzione di errori a basso rischio è aumentata. Era come se le istruzioni non avessero pulito la stanza, ma avessero semplicemente spostato lo sporco dal centro del pavimento agli angoli.

Forse la scoperta più sorprendente è stata un fenomeno che i ricercatori hanno chiamato deriva semantica. In molti casi, quando le istruzioni diventavano più rigorose sulla sicurezza, i modelli cambiavano silenziosamente il modo in cui risolvevano il problema per soddisfare le regole di sicurezza, anche quando il compito originale richiedeva un approccio specifico e potenzialmente rischioso. Ad esempio, se un compito chiedeva al modello di utilizzare un metodo specifico per eseguire comandi di sistema, un prompt di sicurezza rigoroso poteva causare il passaggio del modello a un'alternativa più sicura che tecnicamente risolveva il problema ma violava il requisito specifico. Questo accadeva in circa due terzi dei compiti per il modello avanzato quando venivano utilizzate le istruzioni di sicurezza più aggressive, mentre il modello open-source mostrava un tasso di tali cambiamenti molto più basso. Il codice era più sicuro agli occhi degli strumenti di scansione, ma non era più esattamente ciò che il programmatore aveva chiesto.

Lo studio ha anche evidenziato che questi effetti non erano gli stessi per ogni modello. Mentre il modello avanzato mostrava un chiaro cambiamento nel modo in cui gestiva i rischi, il modello open-source rispondeva in modo meno coerente, con le sue falle di sicurezza che rimanevano relativamente stabili indipendentemente da come le istruzioni venissero formulate. Inoltre, i ricercatori hanno notato che gli strumenti di scansione utilizzati, pur essendo efficaci nel catturare schemi comuni, non potevano rilevare ogni possibile pericolo. Alcuni rischi dipendevano da come il codice si comportava durante l'esecuzione o dal contesto specifico in cui veniva utilizzato, aree che gli strumenti di scansione statica spesso perdono. Ciò significa che il numero di difetti trovati era probabilmente una stima conservativa, e il rischio reale potrebbe essere più elevato.

In definitiva, la ricerca suggerisce che, sebbene scrivere istruzioni migliori sia uno strumento potente per far sì che l'intelligenza artificiale generi codice, non è una soluzione completa per la sicurezza. I prompt strutturati agiscono più come un filtro che cambia la distribuzione dei rischi piuttosto che come uno scudo che li rimuove. Sono altamente efficaci nell'assicurare che la macchina segua le regole e produca l'output, e possono ridurre la gravità degli errori più pericolosi. Tuttavia, non garantiscono che il codice sia privo di vulnerabilità, né assicurano che il codice rimanga fedele all'intento originale dello sviluppatore. I risultati indicano che affidarsi esclusivamente a come viene formulata una richiesta è insufficiente; una sicurezza robusta richiede ancora la revisione umana e ulteriori livelli di protezione oltre al prompt iniziale.

Sommerso dagli articoli nel tuo campo?

Ricevi digest giornalieri degli articoli più recenti corrispondenti alle tue parole chiave di ricerca — con riassunti tecnici, nella tua lingua.

Prova Digest →