Injection

OWASP è un ente no profit è famose per avere ruolo nella trattazione di vulnerabilità nel mondo dei computer. Ha stilato una classifica per per le vulnerabilità più importanti:

  1. Injection
  2. Cross Site Scripting (XSS)

La classificazione tiene conto:

  • degli agenti che voglio sfruttare tale vulnerabilità
  • i vettori di attacco
  • le vulnerabilità
  • le conseguenze
    • di tipo tecnico (tech impact)
    • con valore di business (business impact)

Partiamo subito con un esempio per comprendere la vulnerabilità di injection.
Immaginiamo di avere :

  • una rete protetta da firewall e/o reverse proxy
  • applicazione per autenticare utente (con username e password)
  • un database in cui sono presenti credenziali di accesso di altri utenti e altri dati sensibili.

Database:
Pasted image 20230912170253.png

Cosa può accadere?

Gli input inviati tramite form non sono controllati, dunque è possibile inviare sotto forma di input del codice eseguibile.

Pasted image 20230912170357.png

In questo esempio la richiesta della query viene modificata e di conseguenza ciò che restituirà non c'entrerà niente con il controllo del corretto username e password.

Ecco come potrebbe essere la query prima:

$query = "SELECT * FROM db where nome=' ".$_GET['nome']." ' and cognome=' ".$_GET['cognome']." ' and codice=' ".$_GET['codice']" ' ;" ;
php

Inviando l'input mostrato nel box, diventa:

$query = "SELECT * FROM db where nome=' ".$_GET['nome']." ' and cognome=' ".$_GET['cognome']." ' and codice=' ' OR nome = 'francesco' ;" ;
// si noti bene che è stato aggiunto ' OR nome = 'franceco
// la query è stata manipolata per ottenere un risultato diverso
// che rende vera la query, consentendo l'accesso alla piattaforma
php

La contromisura più banale è la validazione dell'input.