Introduzione
Le vulnerabilità di injection sono tra i problemi di sicurezza software più pericolosi e longevi. Si verificano quando un input non attendibile viene passato direttamente a query, comandi o interpreti di codice senza un'adeguata convalida o sanificazione. Ciò può portare a accessi non autorizzati, corruzione dei dati o alla compromissione completa del sistema.
Mentre i tradizionali strumenti SAST si concentrano su linguaggi comuni come JavaScript, Python o Java, il motore di code quality basato su intelligenza artificiale di Aikido rileva ora le vulnerabilità di injection in linguaggi che solitamente gli strumenti SAST non colgono, come 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, la costruzione non sicura di query o comandi venga intercettata prima di raggiungere la produzione.
Perché è importante
Le vulnerabilità di injection rimangono uno dei rischi per la sicurezza della Top 10 di OWASP.
Sono facili da introdurre ma spesso difficili da rilevare attraverso la revisione manuale, specialmente nei linguaggi legacy o meno comuni.
Senza misure di protezione:
- Gli attaccanti possono iniettare comandi SQL o di sistema operativo in stringhe create dinamicamente.
- I dati sensibili possono essere esfiltrati o distrutti.
- Interi sistemi possono essere presi di mira se è possibile l'esecuzione di codice.
Applicando questa regola, ogni frammento di codice che costruisce query o comandi deve utilizzare API parametrizzate, librerie sicure o funzioni di escape, riducendo drasticamente la superficie di attacco.
❌ Esempio non conforme
Di seguito viene riportato un esempio in PowerShell, ma lo stesso problema si presenta in molti linguaggi.
# Non sicuro: input dell'utente concatenato direttamente in un comando di sistema
$userInput = Read-Host "Enter username"
Invoke-Expression ("net user " + $userInput)Perché questo approccio non è sicuro: Invoke-Expression esegue un comando costruito dinamicamente.
Un utente malintenzionato potrebbe inserire john && del C:\* \/Q e causare danni irreparabili.
✅ 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é questo approccio è sicuro:
- Gli argomenti del comando vengono passati come elenco e non come stringa concatenata.
- L'input viene convalidato utilizzando una whitelist basata su regex.
- Nessun dato non attendibile raggiunge mai la shell senza essere sottoposto a escape.
Provalo in Aikido Security
Puoi abilitare questa regola direttamente nello strumento Code Quality di Aikido.
Una volta attiva, eseguirà automaticamente la scansione alla ricerca di pattern di injection in tutti i linguaggi supportati, compresi quelli sprovvisti di copertura SAST nativa.
Ogni volta che uno sviluppatore apre una pull request:
- Il sistema analizza il codice nuovo e modificato.
- Segnala qualsiasi utilizzo di concatenazione o interpolazione di stringhe all'interno di chiamate a comandi, query o interpreti.
- Il report evidenzia la riga esatta e fornisce un breve suggerimento per la correzione (ad esempio, "Utilizza API con parametri o input convalidati").
Questa regola viene eseguita su ogni PR, garantendo una protezione costante anche nei repository multilingua.
Conclusione
La costruzione dinamica di stringhe è uno degli errori più comuni che possono portare a violazioni della sicurezza critiche.
Rilevando le concatenazioni non sicure e imponendo pratiche corrette per la creazione delle query, questa regola previene un'intera classe di attacchi di injection prima che arrivino in produzione.
Indipendentemente dal linguaggio, l'analisi intelligente di Aikido unisce la protezione statica e assistita da IA per offrire una copertura superiore rispetto agli strumenti tradizionali.

