E' un sacco di tempo che ho sentito parlare di sql injection, ovvero la possibilità di far eseguire codice SQL (più o meno maligno, dipende dalle nostre intenzioni) su database, alterando la struttura o i dati contenuti nel database stesso. Internet è piena di tutorial su come evitare che un malintenzionato possa sfruttare questa tecnica per eseguire DROP TABLE, DROP DATABASE, farsi elencare gli utenti, cambiare la password di sa, etc. etc.
Oggi pomeriggio io ed un mio collega siamo rimasti basiti quando abbiamo notato che all'interno di uno dei più importanti applicativi per la gestione di database SQL Server 2000/2005. Tale applicativo, che risponde al nome di Apex SQL Edit, dispone di una funzione di Object Search: dato un server SQL Server, un nome di database ed una stringa, la funzione vi elenca tutti gli oggetti del database che contengono - in un modo o nell'altro - la stringa specificata. Comoda in un sacco di occasioni, in primis capire in quali stored-procedure viene utilizzata una determinata tabella o vista. Guardate questo screenshot:
Ho cancellato i dati sensibili. Vi basti sapere che avevo specificato un nome di server ed un nome di database. Notare la casella di testo Search Text: invece di scrivere una banale stringa, ho chiuso un apice ed ho buttato giù una INSERT INTO sulla tabella ENGINES. Quando ho cliccato su Find Now, il resultset di dati è privo di ogni senso (mi ha tirato fuori tabelle di sistema e tabelle utente), ma la cosa più bella è che è stata eseguita la INSERT sulla tabella.
Vi immaginate se avessi fatto DROP DATABASE ??? :-)))
Due osservazioni: secondo me una funzione di ricerca come quella sopra dovrebbe aprire una connessione al database in sola lettura. E poi, che cavolo, un caso di sql injection in un prodotto così prestigioso non me lo sarei aspettato. Domani mattina, con calma, vado sul sito e controllo il loro forum di supporto tecnico per vedere se qualcuno ha già segnalato la cosa. Credo e spero proprio di sì...