Aikido

Perché è importante individuare potenziali vulnerabilità di tipo “injection” nel proprio codice

Sicurezza

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.

Domande frequenti

Hai delle domande?

Quali tipi di iniezioni rileva questa regola?

Rileva modelli di iniezione SQL, di comandi, LDAP e di codice, ovunque i dati controllati dall'utente vengano inseriti in stringhe eseguibili.

Funziona solo con i linguaggi SAST supportati?

No. Questa regola estende la copertura ai linguaggi per i quali non esiste una soluzione SAST o in cui tale soluzione è poco approfondita, ad esempio PowerShell, COBOL o Haskell.

Quanto è accurato il sistema di rilevamento?

Segnala costrutti ad alto rischio quali la concatenazione di stringhe o l'interpolazione nelle chiamate a database, shell o interpreti. I falsi positivi sono rari poiché la regola tiene conto delle specificità del linguaggio.

In che modo l'Aikido affronta il recupero?

Quando viene rilevata una violazione, lo strumento suggerisce alternative più sicure, come l'uso di istruzioni preparate, API parametrizzate o la convalida basata su whitelist.

Perché non affidarsi esclusivamente alla convalida dei dati in ingresso?

La convalida da sola non può garantire la sicurezza. Una corretta parametrizzazione assicura che gli input non attendibili non modifichino mai la struttura delle query o dei comandi.

Metti in sicurezza ora

Metti in sicurezza il tuo codice, il cloud e il runtime in un unico sistema centralizzato.
Trova e risolvi le vulnerabilità rapidamente e automaticamente.

Nessuna carta di credito richiesta | Risultati della scansione in 32 secondi.