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!
Pubblicato il: 20 Luglio 2007 7:14AM
Tags: Security


- Page rendering time: 125.0032 millisecs
In definitiva, per gli utenti XP, non c'è speranza???
Permalink; lasciato il: 20 Luglio 2007 9:23AM
Attenzione: il protected mode non è un'alternativa al patching. È un'ottima misura in aggiunta al patching delle vulnerabilità che è risultata essere molto efficace nel caso dei cursori mannari.
Ora mi chiedo: visto che il protected mode aiuterebbe a «garantire una navigazione sicura agli utenti che navigano usando Firefox» e che Firefox ha avuto un anno (dalla prima beta) per implementarlo e forse non sarà neanche disponibile fra un anno nella versione 3.0, sono solo io a vedere un piccolo velo di ipocrisia nell'atteggiamento di questi giorni?
Permalink; lasciato il: 20 Luglio 2007 9:49AM
Sai qual è la cosa più tragica? Che sono certo che se il problema fosse stato il contrario, cioè un link malformato che da firefox lanciava ie e comandi arbitrari, nessuno avrebbe avuto il minimo dubbio nel dire che il bug era di ie...
Permalink; lasciato il: 20 Luglio 2007 6:25PM
Scusa, ma anche con il protect mode di IE la ms continua a rilasciare patch sulla sicurezza.
Ora personalmente penso che nn si può scegliere un browser o un SO solo in base ai bug scovati e più o meno risolti, sennò faremmo il gioco di Apple: se ci pensi le falle di sicurezza di macOs sono moooolte di meno di quelle di Vista o XP...tuttavia ritengo che in complessivo il mondo PC (in cui dentro ci sta abbondantemente Windows) sia meglio.
Così come Firefox e IE7: forse hai ragione tu e IE7 è più sicuro ma nel complesso (velocità, UserFriendly, possibilità di modding, Add-ons, leggerezza...) sia meglio Firefox.
E lo stesso, a mio modesto parere, appare tra Vista e XP. Nulla da fare, PER ORA, XP è di molto superiore, anche se decisamente meno sicuro. E ti dirò di più: invece di fare i calcoli su come "dovrebbe" essere meglio Vista rispetto a XP, prova a montare XP e Vista su due macchine identiche una accanto all'altra e ti renderai conto che XP è ancora molto più fluido di Vista.
Stesso discorso con IE7 e Firefox.
Ovviamente, poichè sei tu il tecnico della situazione, se mi dici che come sicurezza è meglio IE7 ti credo...magari userò quello per entrare nella mia Online Bank...ma solo per quello!
Permalink; lasciato il: 21 Luglio 2007 2:09AM
@Blackstorm ironia della sorte: il problema e' il contrario!!! LOL
msinfluentials.com/.../hey-mozilla-quotes-are-not-legal-in-a-url.aspx
@Kersal su che pianeta vivi? Da Gennaio ad oggi per OS X sono state rilasciate piu' di 100 patch di sicurezza.
Permalink; lasciato il: 21 Luglio 2007 4:49AM
Ciao Kersal,
penso che nella logica del tuo discorso ci sia un baco. Un browser insicuro apre la porta al tuo PC intero. Se con Firefox vai su un sito "losco" e il sito losco ti installa un keylogger, non c'è protected mode di IE che tenga: quando vai sul sito della banca su IE, la tua password verrà loggata. La sicurezza di un sistema è pari a quella dell'anello più debole e ripeto l'atteggiamento di Mozilla mi fa capire che per loro la sicurezza era solo una battuta buona per il marketing (ai tempi di XP pre-SP2 ci voleva pure poco)
Per quanto riguarda Apple: mi sembra che il rilascio di Safari per Windows faccia capire che il marketing di Apple condivide le idee con quelle di Mozilla. Il baco di Javascript indicato nella pagina di slashdot affligge anche Safari. Mi chiedo loro in che mondo vivano: stanno ancora cercando un mega esperto di sicurezza e anche loro si ritengono "sicuri since day one"; ma chi li certifica, Topo Gigio?
Infine le patch: come dicevo a ViK, il protected mode non è un giubbotto antiproiettili. C'è gente, bontà loro, che disabilita UAC e in quel caso "bye bye protected mode" (senza considerare il fatto che c'è gente che usa Firefox e rende completamente vano il protected mode, anche qualora UAC fosse abilitato
: che poi FF non è neanche più veloce di IE7 stando a 4 benchmark su 7; molto meglio Opera): il protected mode aiuta tantissimo, ma le patch vanno rilasciate comunque; senza considerare ad esempio che le patch di sicurezza per Ubuntu sono in numero considerevolmente superiori a quelle per XP pre-SP2.
Se ti piacciono i plugin, prova Maxthon un browser basato su IE7 e quindi come tale abbastanza sicuro: anche se ne troverai meno che per Firefox.
@Enrico: grazie per il link, mi era sfuggito. Comincio a pensare che Window Snyder abbia perso colpi; o magari più semplicemente chi va con lo zoppo impara a zoppicare.
----
La questione si fa ancora più ridicola.
Stando a questo commento, la colpa ora è della piattaforma (Windows) e non più di IE:
blog.mozilla.com/.../fix-for-windows-url-protocol-handling-problem-in-firefox-2.0.0.5
Mi ricorda la questione del virus nell'IPod che - secondo Apple - era colpa di Microsoft. Sono curioso di sapere cosa succederà se continuano a escalare ancora: daranno la colpa a Turing?
Permalink; lasciato il: 21 Luglio 2007 6:50AM
Window Snyder probabilmente ha cambiato lavoro per avere piu' tempo per la sua vita privata ed ora ha altre priorita'
Permalink; lasciato il: 21 Luglio 2007 10:27AM
Fantastico... Secondo me non daranno la colpa a Turing, ma a Shannon. E' evidente...
Io mi chiedo perchè mai un baco palesemente di firefox (tu applicazione devi essere in grado di gestire i tuoi handler) debba essere attirbuito a qlcn altro...
Permalink; lasciato il: 21 Luglio 2007 11:11AM
Scusate, io vedo un problema ben più grande che va oltre l'interpretazione dei parametri di Firefox. La mia impressione è che il problema principale risieda nel meccanismo di gestione degli helper che è fin troppo banale nella definizione dei comandi da richiamare è che può essere usato per passare parametri dal comportamento pericoloso. Questo è un problema non imputabile a IE ma a cioè che sta in mezzo tra IE, cioè il software chiamante, e l'handler, cioè qualsiasi altro software chiamato.
Proprio l'esempio che viene fatto mi pare chiarificatore:
FIREFOX.EXE -url "FirefoxURL://foo" –argument "qualcosa di losco" -requestPending
Io che leggo so bene che –argument sia "qualcosa di losco" e -url sia "FirefoxURL://foo". Se da prompt dei comandi scrivo -altro "altro parametro", so bene che il valore del parametro è tutto ciò che è racchiuso tra gli apici. Nel caso in cui voglia includere degli apici nel valore probabilmente farò uso di una sequenza di escape. Ora, Questo stesso meccanismo, cioè quello usato per interpretare i comandi che gli utenti usano per richiamare le applicazioni dal prompt o da script batch (e ci sarebbe da riflettere pure su questo) è usato per definire l'interazione tra due applicazioni. Mi aspetto che in questo modo si possano fare innumerevoli porcate che prescindono da Firefox, IE e qualsiasi altro software. Un sistema che permette una banale concatenazione di stringhe per costruire i parametri così come dovranno essere forniti all'applicazione che li dovrà acquisire si dimostra alquanto debole. Insomma, ci fosse almeno un banale escaping! Mi aspetto altri tipi di exploit basati sullo stesso principio.
Per necessità di lavoro mi trovo proprio ad affrontare una problematica simile. C'è un interprete a cui devo passare stringhe costruite altrove. L'interprete agisce in un contesto che potrebbe essere "compromesso" dal suo comportamento. In pratica, la non validità stessa dei comandi che mette in crisi il software. Il costruttore dei comandi devo quindi costruire comandi validi. I comandi sono costruiti sulla base di parametri forniti dall'esterno (c'è un altro componente che li invia, che in questo contesto svolge il ruolo che ha IE nel caso degli handler). Guarda caso l'interprete si aspetta nei comandi che riceve certi parametri delimitati da doppi apici. Il costruttore di comandi non può quindi semplicemente prendere i parametri che riceve in ingresso e banalmente concatenarli ad altre stringhe per ottenere il comando da inviare all'interprete. Basta che uno di questi parametri contenga un doppio apice per far andare in errore l'interprete. Che fare? Io ho preso la mia decisione, che non è certamente quella di rendere l'interprete capace di comprendere se i parametri ricevuti siano una richiesta lecita o meno, se l'utente s'è sbagliato oppure se qualcuno sta tentando di bucare un sistema composto da più componenti software di cui l'interprete è una parte. Per me l'anello debole è il costruttore dei comandi. E questo ha l'obbligo di costruire comandi sensati per gli scopi per cui usa l'interprete. Quindi, il costruttore fa cose come un banale escaping del testo da usare come parametro dei comandi dell'interprete.
Permalink; lasciato il: 22 Luglio 2007 9:12AM
@FDG:
Interessante analisi. In generale sono convinto che il problema è nell'applicazione chiamata che ha registrato un certo handler per un certo URI. Gli apici come delimitatori portano sempre a qst tipo di conseguenze, in un modo o nell'altro... comequasi qualsiasi altro tipo di delimitatore...
Permalink; lasciato il: 22 Luglio 2007 9:49AM
FDG: analisi interessante, ma secondo me stai accomunando due pezzi di SW che non hanno riguardo alla questione niente in comune.
Un interprete è un interprete che è un interprete (espressione tipicamente americana): si limita a interpretare il "PROGRAMMA". Se il "programmatore" passa "FORMAT C:" ed ha i permessi per formattare, amen! L'interprete deve formattare, non c'è nessun modulo di lettura del pensiero che tenga come qualcuno velatamente sostiene (mi riferisco ad articoli sulla sicurezza commentati in passato). Sotto questo aspetto UAC fa il suo sporco lavoro.
FireFox non è un INTERPRETE (anche se interpreta JavaScript) ma un BROWSER. Questo in generale.
Nello specifico come ho già detto nessun meccanismo di escaping può funzionare e se teoricamente fosse possibile farlo, il peso si sposterebbe sul chiamante e la questione si fa ancora più complicata (tutti i chiamanti ora devono conoscere _bene_ le regole di escaping per dare la possibilità ai chiamati di rilassare i controlli sui _LORO_ paramentri di ingresso). Secondo me il vero baco che viene fuori dall'intera questione è cosa si può fare via command line con alcune applicazioni che registrano URI handlers (per ora Firefox e Trillian; le altre sono tutte innocue). Per confronto dai un'occhiata ai parametri che si possono passare via riga di comando ad IE7: blogs.msdn.com/.../internet-explorer-7-command-line-arguments.aspx
Non mi sembra che si possa manipolare la URL in alcun modo perché la URL è l'ultimo parametro; tutti gli altri parametri non hanno nessuna implicazione sulla sicurezza, anzi al massimo la aumentano (-extoff).
L'unica vera alternativa "safe" è disabilitare completamente gli URI handler: non mi sembra giusto però disabilitare gli URI handler completamente solo perché qualche prodotto (Firefox e Trillian) non è capace di validare i propri parametri (osservazione fatta dal commenDatore sul sito di Snyder). La risposta di Snyder (la colpa è di Windows, di Internet, di Turing, ma non di Firefox e Trillian) l'ho già commentata, mi sembra peggiore di quella di Mike Schroepfer.
Ma poi mi chiedo: perché mai registrare un altro handler???? Ma ce n'era davvero bisogno?
Capisci perché mi inc***o come una iena quando leggo che in questa situazione qualcuno di Mozilla vuol dare lezioni di sicurezza a quelli di IE?
-quack
Permalink; lasciato il: 22 Luglio 2007 10:04AM
Alla fine e' arrivato il mea culpa ufficiale di Mozilla: www.computerworld.com/.../article.do
Permalink; lasciato il: 24 Luglio 2007 11:48AM
@Enrico
Non sembra proprio un mea culpa, ammettono che anche firefox non controlla i parametri passati attraverso url ad altre applicazioni, cosa di cui accusavano IE. Ma non è che forse deve andare così? Mica un browser può sapere quali parametri può passare e quali no per ciascuna applicazione. Perciò a mio parere l'unico bug di sicurezza in questa storia è di Firefox, che, chiamato con opportuni parametri, permette di impadronirsi del PC.
Permalink; lasciato il: 24 Luglio 2007 12:41PM
La migliore risposta "so far" è quella di David LeBlanc, uno che ci capisce. Ironizza sul fatto che il testo di riferimento che si usa in MS per fare threat modeling era scritto da Window Snyder. Spiega che una delle regole fondamentali è quella di considerare ogni API che si espone al pubblico come fonte di input non validato:
blogs.msdn.com/.../security-dependencies.aspx
Poi che loro si spingano oltre e tentino di pulire l'output mi sembra una buona intenzione (dettata dal marketing per dire "vedete quanto siamo bravi noi" ecc.) che rimarrà tale, cioé una buona intenzione. Prima o poi, qualcuno aggiungerà uno URI handler che non valida l'input e che fa qualche altro giochino di prestigio sulla URL e saremo punto da capo: nel frattempo la questione sarà dimenticata e la colpa sarà del nuovo arrivato o possibilmente di Shannon. Mi sembra una guerra tra marketing a tutti i costi vs. sicurezza (o per lo meno: dimostrare quanto capiscano di sicurezza). Le RFC sono chiare e pensare che IE spenga un meccanismo che ha funzionato bene dal 1995 penalizzando chi si è comportato correttamente (le decine di migliaia di applicazioni che installano URI) solo perché 2 applicazioni non hanno fatto i loro compiti a casa ed una delle quali ha ammesso le sue colpe 100%, è semplicemente stupido.
Poi ci sono i partigiani e quelli possono essere fenomenali:
blogs.msdn.com/.../enriching-the-web-safely-how-to-create-application-protocol-handlers.aspx
cito: blaming Mozilla for bad software/attitude is like blaming the Tooth Fairy for violent crime. Pointless and lame.
How funny!!
In Mozilla hanno un tool che rimuove automaticamente i bachi o la pessima attitudine nel risolverli. Finora le patch erano solo miglioramenti, insomma!
Permalink; lasciato il: 24 Luglio 2007 1:33PM