Iniezione
Trasforma una casella di ricerca in una lettura dell'intero database.
Cos’è Iniezione?
L'input non attendibile viene concatenato in una query che un interprete poi analizza, quindi l'input smette di essere un valore e diventa parte dell'istruzione. Incrementerai un endpoint di ricerca del catalogo in tre mosse: una singola virgoletta solleva un errore SQL non elaborato che restituisce la query, una condizione sempre vera rimuove il filtro pubblicato e UNION SELECT raggiunge un'altra tabella per le email dell'account, gli hash bcrypt e i ruoli. La correzione è un parametro associato, quindi il database compila prima l'istruzione. Anche la restituzione di un errore SQL non elaborato fornisce la mappa a un utente malintenzionato.
Cosa imparerai in Iniezione
- Riconoscere l'iniezione SQL: un parametro di richiesta concatenato in una query che il database quindi analizza, in modo che l'input possa riscrivere la query e raggiungere i dati che l'endpoint non aveva mai inteso restituire
- Leggere l'escalation da un'indagine con virgolette singole che fa trapelare un errore SQL, a una condizione sempre vera che rimuove un filtro, a una UNION SELECT che scarica una tabella completamente diversa
- Comprendere che l'iniezione non dipende da credenziali rubate o da autenticazione mancante; un account ordinario e completamente autenticato può inserire tramite qualsiasi input che il server considera come codice
- Applicare la correzione: utilizzare query con parametri o istruzioni preparate in modo che il valore sia associato separatamente e trattato come dati, anziché escape scritti a mano o liste bloccate di caratteri pericolosi
- Evita la divulgazione di errori SQL non elaborati ai client e controlla ogni endpoint che crea una query, un comando o un modello dall'input per lo stesso modello di concatenazione
Iniezione — Fasi della formazione
-
Un normale posto per l'acquirente
Wexlar gestisce un mercato all'ingrosso e distribuisce account di acquirenti self-service a chiunque si iscriva. Bob ne prese uno, con un'identità usa e getta. Il suo posto è un semplice acquirente: sfoglia il catalogo, fai ordini, niente di privilegiato. Apre la console per sviluppatori per vedere cos'è l'account e cosa offre l'API.
-
Una casella di ricerca
Niente nell'account di Bob è privilegiato, quindi non ci sono funzioni di amministrazione a cui accedere. L'unico input che gli interessa è la ricerca nel catalogo: prende tutto ciò che digita ed esegue una corrispondenza del nome con il database dei prodotti.
-
Una ricerca normale
Bob inizia con una ricerca ordinaria per vedere il funzionamento dell'endpoint e apprenderne la forma. La ricerca accetta un parametro di query q e restituisce i prodotti il cui nome corrisponde.
-
Funziona come previsto
La ricerca si comporta esattamente come previsto. Tre laptop pubblicati, solo i campi che un acquirente dovrebbe vedere.
-
Aggiungi una virgoletta singola
La sonda di iniezione più vecchia che esista: Bob aggiunge una singola virgoletta al termine di ricerca. Se il termine viene cercato come valore, la ricerca di un nome con virgolette semplicemente non restituisce nulla. Se viene concatenato in SQL, la virgoletta vagante interromperà la query.
-
La domanda, aperta
Un carattere in più ha causato l'arresto anomalo dell'endpoint e l'errore ha fornito a Bob la conferma che desiderava.
-
Riscrivere il filtro
Ora che Bob sa che il termine diventa parte della query, smette di romperlo e inizia a guidarlo. Crea un termine che chiude la stringa, aggiunge una condizione che è sempre vera e commenta il resto della query originale.
-
L'intero tavolo
Il filtro che limitava la ricerca ai prodotti pubblicati è sparito, e il responso lo dimostra.
-
Raggiungi un altro tavolo
Leggere ogni prodotto è negativo; leggere tabelle che la ricerca non avrebbe mai dovuto toccare è peggio. Bob utilizza UNION per aggiungere righe da una tabella diversa ai risultati, selezionando lo stesso numero di colonne restituite dalla query sul prodotto.
-
L'archivio credenziali, in un risultato di ricerca
Le righe restituite non sono affatto prodotti.
Copertura dei framework di sicurezza
OWASP API Top 10
- API8:2019 Injection
CWE
- CWE-74 Improper Neutralization of Special Elements in Output ('Injection')
CIS Controls
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security