Introduzione
Le vulnerabilità di tipo “injection” sono tra i problemi di sicurezza software più pericolosi e di più lunga data. Si verificano quando dati in entrata non attendibili vengono inseriti direttamente in query, comandi o interpreti di codice senza un’adeguata convalida o elaborazione di escape. Ciò può portare ad accessi non autorizzati, al danneggiamento dei dati o alla compromissione totale del sistema.
Mentre gli strumenti SAST tradizionali si concentrano su linguaggi comuni come JavaScript, Python o Java, il motore di controllo della qualità del codice basato sull’intelligenza artificiale di Aikido è ora in grado di rilevare vulnerabilità di tipo “injection” in linguaggi che gli strumenti SAST in genere non rilevano, quali Perl, Haskell, Groovy, Erlang, Zig, Delphi, PowerShell, COBOL, ABAP, Visual Basic, Pascal e ColdFusion.
Questa regola garantisce che, indipendentemente dal linguaggio utilizzato dal tuo team, le query o i comandi non sicuri vengano individuati prima che raggiungano l'ambiente di produzione.
Perché è importante
Le vulnerabilità da iniezione rimangono una delle 10 principali rischi di sicurezza rischi di sicurezza.
Sono facili da inserire, ma spesso difficili da individuare tramite revisione manuale, specialmente nei linguaggi legacy o meno diffusi.
Senza misure di sicurezza:
- Gli aggressori possono inserire comandi SQL o del sistema operativo in stringhe generate dinamicamente.
- I dati sensibili possono essere sottratti o distrutti.
- Se è possibile eseguire codice, è possibile assumere il controllo di interi sistemi.
Applicando questa regola, ogni porzione di codice che genera query o comandi dovrà utilizzare API parametrizzate, librerie sicure o funzioni di escape, riducendo drasticamente la superficie di attacco.
❌ Esempio non conforme
Di seguito è riportato un esempio in PowerShell, ma lo stesso problema si verifica in molti linguaggi.
# Non sicuro: l'input dell'utente viene concatenato direttamente a un comando di sistema
$userInput = Read-Host "Inserisci nome utente"
Invoke-Expression ("net user " + $userInput)Perché questa operazione non è sicura: Invoke-Expression esegue un comando creato dinamicamente.
Un malintenzionato potrebbe digitare "john && del C:\* /Q" e provocare un comportamento distruttivo.
✅ Esempio conforme
# Safe: use parameterized or validated command execution
$userInput = Read-Host "Enter username"
if ($userInput -match '^[a-zA-Z0-9_-]+$') {
Start-Process "net" -ArgumentList "user", $userInput
} else {
Write-Host "Invalid input"
}Perché è sicuro:
- Gli argomenti del comando vengono passati sotto forma di lista, non come stringa concatenata.
- L'input viene convalidato utilizzando un'espressione regolare basata su una whitelist.
- Nessun dato non attendibile raggiunge mai la shell senza essere stato sottoposto a escape.
Provalo su Aikido Security
È possibile abilitare questa regola direttamente nello strumento Code Quality di Aikido.
Una volta attivato, esegue automaticamente la scansione alla ricerca di schemi di iniezione in tutte le lingue supportate, comprese quelle prive di copertura SAST nativa.
Ogni volta che uno sviluppatore apre una pull request:
- Il sistema verifica il codice nuovo e quello modificato.
- Segnala qualsiasi utilizzo di concatenazione o interpolazione di stringhe all’interno di comandi, query o chiamate all’interprete.
- Il rapporto evidenzia la riga esatta e fornisce un breve suggerimento su come risolvere il problema (ad esempio: “Utilizzare API parametrizzate o input convalidati”).
Questa regola viene eseguita su ogni PR, garantendo una protezione costante anche nei repository con linguaggi misti.
Conclusione
La creazione dinamica di stringhe è uno degli errori più banali che possono portare a gravi violazioni della sicurezza.
Individuando le concatenazioni non sicure e imponendo pratiche sicure di creazione delle query, questa regola previene intere categorie di attacchi di tipo “injection” prima che raggiungano l’ambiente di produzione.
Indipendentemente dalla lingua, l’analisi intelligente di Aikido combina la protezione statica con quella assistita dall’intelligenza artificiale per garantire una copertura più ampia di quanto gli strumenti tradizionali potrebbero mai offrire.

