Firefox URI handler demistificato
UPDATED
Avevo letto giorni fa della diatriba sul baco che affligge Firefox ma sfruttabile via Internet Explorer. Cercherò di spiegare come funziona la cosa facendo spero un po' di chiarezza: siccome il baco chiama in causa i due browser, si sono create due fazioni partigiane diverse che danno la colpa rispettivamente a Firefox e ad IE.
Prima di tutto la fonte: il baco è stato scoperto da Thor Larholm e la descrizione in inglese può essere letta a questa pagina. Tutte le altre fonti, inclusa Secunia, citano la pagina di Thor.
Qual'è il problema? Questa chiave del registry che definisce come comportarsi con lo specifico URI handler:
[HKEY_CLASSES_ROOT\FirefoxURL\shell\open\command\@]
FIREFOX.EXE -url "%1" -requestPending
che indica come invocare firefox passando una URL (l'url prende il posto di %1). Se la URL ha la forma:
FirefoxURL://foo" –argument "qualcosa di losco
la chiave in questione porterà all'esecuzione di questa riga di comando:
FIREFOX.EXE -url "FirefoxURL://foo" –argument "qualcosa di losco" -requestPending
e cioé Firefox verrà eseguito con il parametro aggiuntivo "qualcosa di losco".
Dove sta il problema? Nella chiave del registry: IE si limita a leggerla, a sostituire %1 con il parametro passato e a invocare il processo risultante. La cosa tragica è che IE, come qualsiasi altro software inclusi i client di posta, non può davvero fare altro. Il problema si presenterebbe quasi identico se al posto dei doppi apici (") fosse usato un qualsiasi altro carattere di delimitazione (#). L'unica alternativa per chi vuole lanciare Firefox è di leggere la chiave del registry, cercare di interpretarla (il programma penserebbe «uhm vediamo, %1 è racchiuso tra doppi apici, quindi mi tocca fare qualcosa, ecc.») e manipolare i parametri per l'applicazione target di conseguenza: ce n'est pas possible! Il chiamante non può essere responsabile per la validazione dei parametri del chiamato, altrimenti occorrerebbero tonnellate infinite di codice che si limita solamente a controllare i parametri: evviva! Qual'è il modo più corretto per sistemare la falla? La soluzione più banale, sicura e funzionale è fare in modo che la URL sia sempre l'ultimo parametro dopo lo switch -url: tutto ciò che segue verrebbe interpretato come URL che a sua volta è posta immagino sotto ampio scrutinio, ma dubito che a questo punto possa essere implementabile per motivi di backward compatibility.
Con un meccanismo simile lo stesso Thor afferma è possibile lanciare con parametri altre applicazioni tra cui Acrobat, Outlook, ecc. A differenza di firefox però nessuna di queste applicazioni formatta l'HD[1] se vi si passa come parametro "/format C:". Qualcuno ha pure pensato che IE potrebbe semplicemente evitare di invocare tali applicazioni, ma se una applicazione registra un URI handler <sarcasmo>forse lo fa perché vuole essere invocata</sarcasmo>
Riassumendo:
- è possibile, via IE, invocare altre applicazioni passando parametri arbitrari (tutte le applicazioni che registrano un handler URI)
- nessuna applicazione ad eccezione di Firefox esegue ciecamente i parametri passati
- non c'è nessun motivo pratico per registrare uno URI handler specifico (FirefoxURL://)
- è possibile che altre applicazioni - oltre ad IE - possano invocare Firefox usando la tecnica descritta e incorrendo nella vulnerabilità illustrata
- Firefox infine, come mostra il buon Enrico, fa esattamente la stessa cosa di IE ( http://msinfluentials.com/blogs/jesper/archive/2007/07/20/hey-mozilla-quotes-are-not-legal-in-a-url.aspx )
Insomma la questione sembrerebbe abbastanza controversa, ma i punti giocano tutti a sfavore di Firefox, tant'è che Secunia ha assegnato il baco come vulnerabilità di Firefox (Thor invece parla di vulnerabilità di IE e a questo punto di tutte le applicazioni che invocano URI handler). Ora un baco, anche grave, è sempre un baco, un errore umano, una svista. Ma della questione, leggendo anche le interviste riportate nel post di pseudotecnico, mi hanno sorpreso due cose:
- l'atteggiamento di alcuni partigiani (non mi riferisco al post di cui sopra, ma altra roba che ho letto in giro nei forum per troll), che senza neanche capire di cosa si stesse parlando, hanno preso le parti dell'una o dell'altra fazione
- l'atteggiamento del team di Firefox, che dopo aver fatto capro-espiatorismo, ha fatto anche del gran-paraculismo tirando fuori la frase ad effetto «pensiamo che sia compito di Firefox garantire una navigazione sicura agli utenti che navigano usando Firefox.»
Ora secondo me - parere personale del tutto gratuito - Firefox ha diversi pregi, ma la paventata superiorità in sicurezza, soprattutto dopo il rilascio di IE7 per Vista, semplicemente non rientra tra questi. Infatti non mi spiegherei altrimenti questo brano dell'intervista fatta due settimane fa da ZDNet a Mike Schroepfer , VP dell'engineering in Mozilla:
[ZDNet] Is Protected Mode a priority for Firefox? After the animated cursor attack, Protected Mode became important in user’s minds. Microsoft claimed that IE was more secure than Firefox because of Protected Mode.
The animated cursor attack would still allow for reading of any files on the local system - so protected mode is no panacea. We believe pro-active and rapid patching of security vulnerabilities is still the best defense. Having said that we also believe in defense in depth and are investigating protected mode along with many other techniques to improve security for future releases.
Traduco sommariamente:
Domanda: ma il Protected Mode di Vista è una questione prioritaria per Firefox?
Risposta: il protected mode di Vista non è la panacea e la migliore difesa è tappare i buchi velocemente, per cui per ora ci stiamo pensando
Ritraduco con una metafora:
Domanda: avete pensato di rilasciare una porta con la nuova serratura disponibile?
Risposta: la serratura non risolve tutti i problemi in quanto c'è gente che potrebbe entrare dalla finestra (del terzo piano) per cui crediamo che mandare subito una volante dopo un furto rimanga la soluzione migliore. Per le serrature ci stiamo pensando...
Wow! Da una azienda che parla di sicurezza in questi termini io non «comprerei» neanche notepad. Figuriamoci se comprerei un browser[2] con cui poi andare a controllare il mio modesto conto in banca. Affidare le chiavi di casa a Firefox? Da oggi non se ne parla neanche.
Update
La questione comincia ad essere semplicemente ridicola se non fosse oltraggiosamente patetica: http://it.slashdot.org/article.pl?sid=07/07/20/1252215&from=rss
Non ci voglio e non ci posso credere: uno javascript può rubare le password in Firefox. Congratulations!
-quack
[1] sto volutamente esagerando per mostrare la gravità del baco
[2] il browser ironia della sorte è stato promosso dall'azienda come Safer, Faster and Better; considerando che anche Safari per Windows, con al suo attivo 8 bachi di sicurezza in meno di poche ore, è stato promosso come «designed with security in mind since day one», comincio a pensare che la sicurezza stia diventando davvero uno slogan vuoto. Bah!