Aikido

Perché dovresti rilevare le potenziali vulnerabilità di injection nel tuo codice

Sicurezza

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.

FAQ

Hai domande?

Quali tipi di injection rileva questa regola?

Rileva pattern di SQL, command, LDAP e code injection, ovvero qualsiasi punto in cui i dati controllati dall'utente vengono uniti a stringhe eseguibili.

‍

Funziona solo per i linguaggi supportati da SAST?

No. Questa regola estende la copertura ai linguaggi in cui il SAST non esiste o manca di profondità, ad esempio PowerShell, COBOL o Haskell.

‍

Quanto è rigoroso il rilevamento?

Segnala costrutti ad alto rischio come la concatenazione o l'interpolazione di stringhe nelle chiamate a database, shell o interprete. I falsi positivi sono rari perché la regola riconosce il contesto del linguaggio.

‍

In che modo Aikido gestisce la remediation?

Quando viene riscontrata una violazione, lo strumento suggerisce alternative più sicure, come l'uso di prepared statement, API parametrizzate o la validazione basata su whitelist.

‍

Perché non affidarsi esclusivamente alla validazione dell'input?

La sola validazione non può garantire la sicurezza. Una corretta parametrizzazione assicura che gli input non attendibili non alterino mai la struttura di query o 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.