Undetectable Remote Arbitrary Code Execution Attacks through JavaScript and HTTP headers trickery

No @ale purtroppo questa è una risposta frequente di fronte ad un problema architetturale di sicurezza, ma è semplicemente sbagliata.

Il fatto che un software implementi perfettamente delle specifiche, non garantisce la sicurezza degli utenti se tali specifiche sono fallate. Questo è tanto più vero per i browser WHATWG, che determinano i cosiddetti Living Standards attraverso l’implementazione: lo so che è paradossale, ma le specifiche del Web seguono l’implementazione più influente politicamente all’interno del WHATWG, e non solo di fatto, ma proprio by design,

Oggi le implementazioni più influenti sono Firefox e Chrome, ma Firefox perde terreno ogni giorno che passa, perché la sua influenza dipende dalla sua credibilità, e da qualche anno sta facendo un errore strategico dopo l’altro, tanto che iniziano a diventare evidenti persino ai suoi sostenitori.

Come ho fatto notare ai vertici di Mozilla, affrontare apertamente e tempestivamente questa classe di vulnerabilità avrebbe potuto cambiare rapidamente lo status quo, rivelando al mondo la profonda insicurezza (personale, aziendale e geopolitica) degli strumenti cui si affida al di là dell’ipocrisia e della retorica del Web.

Ma ti prego, non definire un bug architetturale di queste dimensioni “feature”.

Una backdoor installata e razionalizzata da miliardi di persone nel mondo è una feature solo se sei una potenza militare che distribuisce la stragrande maggioranza dei contenuti web.

Il problema non è JavaScript. (e questo, detto da me che lo conosco più di quanto lo odio, dovrebbe seminare il panico nei cuori! :joy:)

Il problema è la combinazione di alcune caratteristiche fondamentali del web odierno:

  • l’esecuzione automatica di programmi personalizzabili sotto il controllo di terze parti (sia JS o WASM è irrilevante)
  • la distribuzione geografica di queste terze parti (hosting, cloud, cdn etc…): chi controlla il JS / WASM in esecuzione sulla tua macchina risponde a sistemi giuridici diversi dal tuo, che sia la Russia, l’Iran (in un recente attacco basato su lets encrypt), gli USA, la Cina (ricorderai certamente il DDoS a github di qualche anno fa) o chiunque altro.
  • la profilazione capillare degli individui, dei gruppi e delle loro relazioni
  • la pervasività della sorveglianza che permette di correlare una identità ottenuta legittimamente su un sito con le informazioni non autenticate (@calamarim giustamente osservava che i dati non aggregati non sono mai anonimi)
  • l’adozione indiscriminata di HTTPS che impedisce il caching intermedio dei contenuti (a meno di MitM istituzionalizzati e razionalizzati come Cloudflare) che costringe il browser a ricontattare sempre e comunque il server autoritativo di ogni singolo contenuto
  • il cache control HTTP che, sebbene abbia perso gran parte della sua utilità con la diffusione del HTTPS (l’unica cache che controlla è quella del browser in esecuzione, se visiti la stessa pagina HTTPS con due browser diversi sulla stessa macchina verrà scaricata comunque due volte dal server in autoritativo per essa e nessuno dei proxy intermedi potrà cacharla per ridurre il traffico o proteggere la tua privacy), permette di nascondere e rimuovere le prove di un avvenuto attacco

Oggi è ancora possibile detectare (con qualche difficoltà e con strumenti e competenze specialistiche) questi attacchi, ma la diffusione di DoH, HTTP/3 e soprattutto WebAssembly renderà anche questo proibitivo anche per gli esperti.

E comunque non puoi provare di aver subito un attacco del genere nemmeno se lo individui, perché trattandosi di dati, potresti averli fabbricati tu stesso. E per contro uno strozzino potrebbe salvare la contabilità illegale nella cache del browser e fingersi vittima di un attacco, con buona pace dell’informatica forense.

Tutto questo non è una feature checché ne divano gli standard (che i browser vendor hanno scritto dopo averli implementati).

Peraltro, anche formalmente, nessun passaggio degli standard WHATWG stabilisce che JavaScript debba essere abilitato di default. Dunque richiedere l’autorizzazione all’utente per l’esecuzione non violerebbe alcuno standard (tant’è che Chrome può essere facilmente configurato in questo modo). E visto che i Living Standard seguono le implementazioni, implementare queste mitigazioni in un browser maggiore è il primo passo per ridurre la vulnerabilità architetturale che il WHATWG ha creato.

Per questo ho aperto un bug report a Mozilla (per altro su suggerimento di Marco Ciurcina che in una mail aveva osservato che affinché la mia scoperta avesse rilevanza legale, i vendor dovevano essere informati pubblicamente della questione).

Perché fixare Firefiox fosse il primo passo per migliorare il Web. Un onere ed un onore che Mozilla ha buttato al vento. Lo farà anche il Partito Pirata? Non lo so…

Ma per me la questione è e rimane semplice. Se le persone che usano correttamente un mio programma possono essere attaccate attraverso di esso, non c’è specifica o strategia di marketing che tenga: si molla tutto e si chiude la falla nel modo più rapido possibile informando tutti del problema.

1 Mi Piace

Non credo sia un problema architetturale.

E’ vero, é un classico di molti standard industriale, anzi, credo che la Netscape fu la prima a imporre i propri standard, tralaltro se la memoria non m’inganna furono loro a inventare JavaScript.

Non é propriamente una feature, é proprio una caratteristica insita nel linguaggio. Se un linguaggio prevede delle primitive per utilizzare le reti ti ritroverai per forza di cosa a poter aprire connessioni di rete.

Concordo, si puó scrivere lo stesso codice con qualunque helper.

Non puoi contestare l’architettura del web attraverso il bug tracking, se vuoi contestare le scelte architetturali ti devi rivolgere direttamente a chi scrive gli standard. Ammesso che la tua voce abbia peso, perché come hai detto ci sono ben altri calibri in gioco.

E’ configurabile nel browser, se vuoi puoi contestare le impostazioni di default, ma sono impostazioni di sicurezza modificabili.

Non commento i punti che hai messo, perché nessuno di questi é un elemento tecnico che va a favore o a sfavore del bug. Esecuzione automatica, distribuzione geografica, profilazione, https, sono tutti elementi dei quali possiamo parlare, ma non hanno niente a che vedere con la capacitá di un software di creare delle connessioni in una rete locale.

Il mio punto non sono gli standard. La questione, secondo me, é che javascript é un linguaggio di programmazione completo, anche molto potente aggiungerei, quindi é normale che se scrivo del software con questo linguaggio gli posso far fare tutte le cose che voglio, per esempio si potrebbe scrivere un clone di nmap. Quindi il primo punto é che mi sembra giusto che javascript sia in grado di fare questa cosa.

Ora i browser creano un ambiente, nel quale si possono lanciare programmi (dico programmi per sottolineare che possono raggiungere rispettabilissimi livelli di complessitá), e in questo ambiente abbiamo il primo livello di sicurezza. Se il software é scritto bene, la sicurezza é una questione di impostazioni, per esempio, potrei creare una blacklist dove vieto al browser di accedere a tutti gli indirizzi di rete locale.

Il fatto se farlo o meno come default é una scelta (criticabile o meno) del produttore. Ma se fossi cosí restrittivo, non potrei piú vedere siti internet sulla rete locale.

Quindi quello che si potrebbe chiedere a Mozilla é di rendere piú dettagliata (non so se esiste, magari esiste) la possibilitá di filtrare gli accessi eseguiti da un software all’interno del browser. Ovviamente finché ragioniamo a livello applicazione.

Cmq, la scommessa secondo me non dovrebbe essere disabilitare javascript, ma farlo girare in modo sicuro, dove per sicuro intendo nel modo che ci si aspetterebbe.

@ale la maggioranza delle persone che frequentano questo forum non dispongono delle conoscenze necessarie a valutare la nostra rispettiva competenza in materia di sviluppo Web ed architettura dei sistemi distribuiti.

Io sono felicissimo di rispondere alle tue domande ma ti pregherei, per rispetto e tutela dei pirati meno esperti, di non fare affermazioni che, basate su una lettura approssimativa di questo thread e su una conoscenza superficiale della materia, potrebbero confonderli.

Lo dico anche nel tuo interesse professionale, perché scrivi su un forum pubblico affermazioni che rimarranno visibili a lungo. Per il momento sia Frederik Braun (Mozilla Security) sia Asa Dotzler (Mozilla… di tutto un po?) si sono ben guardati dal contraddirmi nel merito o anche solo di rispondere alle mie semplici domande, nonostante io abbia fornito a Mozilla (e ad altri) molte occasioni su diversi canali. Alla fine solo gli hacker rispondono alle domande (link a Twitter).

Ti suggerisco dunque di rileggere il tutto attentamente, provare gli exploit, comprendere la questione da una prospettiva tecnica, legale e geopolitica prima di minimizzarla in pubblico.

No, è (anche) un sistema per bypassare firewall e proxy attraverso il browser di un utente che visiti una qualsiasi pagina web anche di terze parti ignare (se controlli una CDN ad esempio). Una volta entrato nella rete della vittima è solo questione di fantasia: il network scanning è solo la quarta o quinta cosa che mi è venuta in mente.

ROTFL ! ! ! :joy:

Puoi provare a spiegarlo al Governo Russo? Magari li convinci a smettere di usarlo! :wink:

Programmo in JavaScript professionalmente da 20 anni, credo di sapere cos’è.

Il problema non è il linguaggio di programmazione in sé (che ti assicuro ha dei problemi devastanti! da sbattere forte la testa contro il muro gridando disperatamente “perché? perché?”) né l’ecosistema (da dove comincio?). Tutto ciò che ho descritto è applicabile esattamente nello stesso modo a WebAssembly.

Il problema è l’esecuzione automatica di programmi personalizzabili sotto il controllo di terze parti… bla bla bla… le cose che ho già scritto.

Ecco appunto, forse è meglio che le rileggi con calma ed attenzione.

Se poi qualcosa non è chiaro, sarò veramente felice di rispondere alle tue domande.

Sul tuo passaggio riguardo l’uso del browser come piattaforma di sviluppo di applicazioni distribuite potremmo discutere a lungo. Sarebbe una chiacchierata piacevole: potremmo per esempio confrontarlo con architetture distribuite differenti, come .NET nella visione originale di Bill Gates, oppure con Java, oppure ancora con Plan 9 from Bell Labs oppure ancora con CORBA etc…

Tuttavia ci porterebbe fuori tema ed annoierebbe tutti gli altri.

Su questa scommessa Microsoft, Apple, Google e Mozilla e molti altri stanno spendendo miliardi da anni. E perdono sempre.

O forse no? :wink:

1 Mi Piace

Non é un problema, ho le spalle abbastanza grosse. Ho scritto che non sono esperto di browser, ma so leggere un semplice codice in avascript e ho esperienza di programmazione in diversi linguaggi.

Ti dovresti chiedere perché…

Non é un buco, il software ha i permessi per fare quelle cose. Molti software che girano nei browser utilizzano quelle caratteristiche per fare chiamate REST e forniscono i loro servizi basandosi proprio su quelle caratteristiche. E’ una cosa, che nel campo della programmazione é risaputa e documentata.

Ho l’impressione che tu l’abbia giá fatto. Ma i tuoi argomenti sono politici, non tecnici.

Mi sembra di capire che suggerisci che esistono modi migliori di fare la stessa cosa. Se é questo che stai cercando di dire concordo perfettamente.

Be, mi sono capitati davanti frontend basati su nodejs che interrogavano api su backend python che non erano niente male.

Mi sono interrogato sulla questione a lungo, in effetti.

Considera che quando tutti usavano IE6 io installavo personalmente Firefox 0.8 a colleghi, amici e parenti. E ho continuato a farlo a lungo, anche quando ormai il vento era cambiato e Chrome stava diventando il nuovo IE6. Non perché avessi compreso la strategia di Google (mi vergogno ad ammetterlo ma 10/15 anni fa credevo anche io alla favoletta del Google benefattore dell’umanità): semplicemente ritenevo Mozilla più bisognosa di supporto (nonché Firefox tecnicamente superiore grazie a XUL).

Nel tempo la mia fiducia in Mozilla è scesa, ma quella nei confronti di Google è crollata. Tuttavia, anche solo per mere ragioni di marketing e brand, ero ancora abbastanza fiducioso che Mozilla avrebbe affrontato il problema di petto. Dal loro punto di vista poteva essere l’occasione ideale per sbaragliare i concorrenti sui loro cavalli di battaglia, privacy e sicurezza, mostrando di essere disposti a rischiare tutto per proteggere i propri utenti.

Non l’hanno fatto. Hanno condannato s’è stessi.

Sono mesi che mi chiedo il perché. Qual’è la tua ipotesi?

Spiegami, per favore: gli header di cache control che permettono di rimuovere le prove non sono un argomento tecnico? La connessione TLS che impedisce il caching intermedio di qualsiasi risorsa servita via HTTPS, non è un argomento tecnico? La diffusione di CDN che servono script JavaScript per una infinità di siti internet ricevendo una varietà di informazioni attraverso cui identificare le potenziali vittime, non è un argomento tecnico? Tutti i vari MitM nel tragitto fra l’utente e la sorgente autoritativa del contenuto (di nuovo, CDN ma anche hosting provider e cloud) e che potrebbero modificarlo in transito, non sono un argomento tecnico? L’intera infrastruttura centralizzata del Web (dal DNS all’HTTP) che favorisce economie di scala centralizzanti (e dunque tracciatura e profilazione), non è un argomento tecnico? Il riuso di connessioni TCP, l’assenza di content addressing, la non obbligatorietà di SRI… sono argomenti tecnici o no?

La Tecnologia è Politica, @ale.

Sì beh è come dire che ci sono modi migliori di sturare un lavandino rispetto alle bombe a mano. :smile:

Certo che ci sono metodi migliori. Uno lo sto cercando personalmente.

Ma qui c’è una falla architetturale enorme in un’infrastruttura fondamentale del nostro tempo. Per quanto vogliamo nascondere la testa sotto la sabbia?

1 Mi Piace

Non sono sicuro di avere capito la domanda. Non hanno fatto cosa? Correggere il bug che hai notificato nei loro browser? Perché dal loro punto di vista non é un bug… E’ una caratteristica insita nel software. Infatti quella che tu chiami mitigazione, corrisponde in realtá a tornare a Internet 1.0, che dal loro punto di vista é inaccettabile. Inoltre esistono giá dei plugin che permettono di bloccare i javascript remoti, e di default i browser sono impostati per bloccare javascript maligni. Gli strumenti per bloccare attacchi di questo tipo esistono anche senza rivedere l’architettura di Internet.

Peró voglio far notare un problema piú subdolo: Supponiamo che Firefox e Google, che sono in teoria le piú sensibili al problema, decidessero di disattivare di default tutti i javascript, o di rivedere i permessi di javascript all’interno del browser creando una “camicia di forza” che permette al javascript solamente di accedere al proprio sito internet. Cosa succederebbe? Che molti javascript benigni smetterebbero di funzionare. Nell’immaginario dell’utente comune significherebbe che questi browser sono difficili da usare e browser rivali potrebbero farsi strada togliendo quote di mercato a firefox e google. Ne consegue, che anche loro sono prigionieri della situazione, l’unico modo sarebbe un accordo tra tutti i produttori e comunque la soluzione non dovrebbe diminuire le funzionalitá odierne, altrimenti si potrebbe sempre fare avanti qualche rivale che ruba quote di mercato.

Paradossalmente questo scenario renderebbe Internet meno sicura.

Lo sono, ma in questo caso non c’entrano niente.

Lo é, ma in questo caso non c’entra niente. A parte il fatto che le connessioni criptate hanno reso internet piú sicura.

Lo é, ma ancora una volta, non c’entra niente con l’argomento di cui stiamo parlando.

A meno di bug, questo tipo di attacco (Man in the Middle) credo che ormai sia abbastanza raro, in caso di connessione criptata é molto difficile da mettere in piedi. Ma comunque anche quest’argomentazione é OT, perché non c’entra niente col bug che proponi.

E’ il progetto originario, il web é sempre stato centralizzato. E’ vero che a cavallo tra gli anni 90 e 2000 c’é stato un movimento che favoriva le connessioni p2p, ma il progetto principale di Internet é questo. Che questo convenga alle grosse multinazionali e che le cose siano andate diversamente da come ci si aspettava é vero, ma questo é ancora un altro argomento.

Si lo sono, immagino che prima o poi arriveremo all’obbligatorietá delle SRI (Subresource Integrity), come si é fatto per l’HTTPS, ma per arrivarci credo ci debba essere uno storico di exploit che si risolvono in questo modo. Again, siamo fuori tema.

In generale, l’informatica non procede secondo il modello “a cascata”, dove si prevede tutto a monte e poi tutto procede correttamente, ma é un continuo work-in-progress dove si parte da un progetto e questo viene corretto e rimodulato strada facendo.

Non avrai mai un’Internet perfetta, ci saranno sempre problemi che vengono risolti e ogni soluzione genererá nuovi problemi e nuovi attacchi. Che ci siano grandi interessi in gioco é vero, ma credo che presumere che ci sia malizia in ogni cosa sia un approccio sbagliato che puó dare soddisfazione nel corto raggio, ma che alla lunga porta fuori strada.

[quote=“Shamar, post:18, topic:2899”] Spiegami, per favore: gli header di cache control che permettono di rimuovere le prove non sono un argomento tecnico?[/quote]

@ale cosa sai dell’interpretazione del protocollo HTTP da parte dei browser? Sai con quale facilità questi header possono essere usati per nascondere un’attacco?

Sei proprio sicuro che non centrino?

@ale sai come funziona una CDN come Cloudflare?

Se sì, ci vuoi illuminare su come distribuisca contenuti su domini di terze parti via HTTPS?

Sei proprio sicuro che sia Off-Topic?

@ale hai capito che sto parlando della centralizzazione prodotta da cloud e CDN?

Hai chiaro come funziona? Sono MitM applicati su scala planetaria con il consenso dei siti Web ma all’insaputa dei visitatori.

Se ti autentichi su un sito proxato da Cloudflare, lui può associare la tua identità a tutti i contenuti che serve per tutti gli altri siti internet. E ti può attaccare attraverso un sito internet del tutto ignaro, modificando le comunicazioni in transito.

Sei proprio sicuro sicuro sicuro che sia un’altro argomento?

Hai mai visto un sistema perfetto? Hai letto What is Informatics?: sai benissimo che non credo nella perfezione. Cos’è questo, benaltrismo InfoSec?

Qui abbiamo una falla di sicurezza colossale installata sui PC di miliardi di persone. Perché pensi che il Governo Russo stia usando gli attacchi di cui tu neghi l’esistenza?

Prendo atto che a te va bene così.

Per curiosità, che software sviluppi? Posso leggere le loro EULA e/o SLA? Perché per me, se la libertà e la sicurezza degli utenti del mio software è messa in pericolo dal software stesso, io li informo immediatamente, poi mollo tutto e correggo il problema. Tu no.

1 Mi Piace

Problema fondamentale di tutta la giurisprudenza digitale e del GDPR… perciò applico l’evidenziatore.

E considerando che è compito della NSA creare sotterfugi di questo tipo e grazie a Snowden sappiamo che questo compito lo ha sempre adempito, non è adeguato pensare che tutto ciò sia solo un caso — che sia solo paranoia. Sarebbe illogico ed incoerente pensare che non sia in corso una cyber warfare.

Questo implicherebbe che in ambito tecnologico siamo altrettanto fritti come in ambiti politici quali la globalizzazione, l’ineguaglianza, il surriscaldamento climatico. Tutte cose alle quali non basta più un bug report ma per le quali i poteri in gioco fanno in genere come gli pare… Non so se avete mai partecipato ad un IETF meeting. Io si. Inutile contare sull’IETF. Mentre la W3C è molto peggio.

Non è quello lo scopo degli elenchi di interfacce di rete. Servono a realizzare servizi P2P sul web come le videochiamate WebRTC. Cosa del resto scema dato che WebRTC non è riuscita a democratizzare Skype come ci fu promesso, ma ha semplicemente piazzato le ditte predominanti del web al centro del universo anche per la telefonia (dato che solo loro hanno il necessario grafo sociale).

Eccetto se i contenuti sono banali ed il vero scopo è il tracciamento. O nel caso esposto da Shamar, l’oscuramento di attacchi individuali e/o di massa che grazie a Snowden sappiamo avvengono quotidianamente ed ovunque. Non citavo a caso appunto FOXACID e HACIENDA.

Eddai, non dire così che mi viene freddo ai piedi.

Certo se non credi a Snowden, allora puoi pensare così. Se non vuoi credere al eccellente lavoro di investigazione di Nafeez Ahmed che ci spiega come il pentagono nel 1995 decise di assicurarsi il controllo totale sulle tecnologie. Tutte. Specialmente l’Internet. L’esistenza della cyber warfare è indiscussa ed è iniziata nel 1995, e certamente include da sempre anche i browser web.

Giusto per capirci, io amo la precisione e non mi piace quando si salta di palo in frasca. Gli header cache control sono degli header tramite i quali si possono settare le impostazioni della cache del browser quando si carica una pagina. Per esempio é possibile impostare che la tal pagina non deve andare in cache, ma anche altro. Ora, quando io scrivo che non c’entra niente, vuol dire che non c’entra niente con un javascript che viene eseguito nel browser e tenta di eseguire uno scan della rete locale, perché l’argomento qui é il fatto che si ritiene che l’esecuzione di uno script capace di eseguire primitive di rete all’interno del browser sia un bug. Io non credo. Ma ció non toglie, che gli header cache control non c’entrano niente.

Lo ripeto: in questo caso non c’entrano niente.

CDN sta per content delivery network. Di solito le CDN sono configurate come reverse proxy e servono per alleggerire il peso degli accessi su di un sito internet. Servono per fornire servizi di HA (High Availability), ovviamente quando dico reverse proxy, faccio solo un esempio, perché il punto di una CDN é fornire un servizio, mentre il reverse proxy é una probabile soluzione tecnica. Se vuoi possiamo entrare nel dettaglio di cosa succede quando un edge server riceve una richiesta HTTPS, ma questo cosa c’entra con il nostro scriptino in javascript? Assolutamente niente.

Lo giuro sullo stack TCP/IP

Vabbé, quest’affermazione falla leggere ad un esperto di sicurezza di rete, ma di quelli veri. Quelli che sanno distinguere un load balancing o un reverse proxy da un attacco Man in the Middle.

Non lo conosco, ma in generale io non credo che esista un “Master of Puppets”, credo che ci siano in piedi continue competizioni su diversi piani, quello militare tra le nazioni, quello economico tra le multinazionali. Questi piani spesso si confondono e si mischiano e voilá abbiamo che su internet a volte succedono cose buone e a volte cose cattive. Non nego che esistano i servizi segreti, i segreti industriali, gente in buona fede, progetti che puntano a liberare il mondo e progetti che puntano a renderlo prigioniero. Quello che abbiamo di fronte é la somma di tutto questo bordello, e poi ci si mette anche la legge sull’entropia.

Il W3C non conta più nulla da almeno dieci anni.

Dal 2004 il working mode del WHATWG prevede che i Living Standard recepiscano le implementazioni prevalenti.

Dunque l’unico modo per fixare una falla di sicurezza in uno standard WHATWG è correggerlo in una implementazione e standardizzare l’implementazione.

Mozilla ha fondato il WHATWG. Dunque il fatto che Firefox implementi gli standard non è una giustificazione, perché partecipa alla scrittura di quegli standard.

Allora non hai proprio capito l’argomento del thread.

Quello è solo un esempio di una vastissima classe di attacchi.

Perdonami se non ripeto qui ciò che ho scritto nei post precedenti. Rileggili tutti con calma e maggiore attenzione perché non è rispettoso nei confronti dei tuoi interlocutori insistere su qualcosa che evidentemente non hai letto o non hai capito. Solo dopo che hai un quadro d’insieme segui i link, e prova gli exploit di esempio.

Se non riesci comunque a capire il problema posso provare a spiegartelo con altri esempi.

Sulle varie cose che secondo te non centrano (segno evidente che non hai capito il bug report e tutto quello che ho scritto qui, probabilmente a causa di una lettura frettolosa e superficiale), se trovo il tempo ti scrivo più tardi o domani.

Ma vedrai che se rileggi tutto dall’inizio con calma (e hai un minimo di esperienza in materia) capirai da solo (e nel caso ti prego di informarmi così risparmio il tempo).


@lynX ti dispiacerebbe rinominare il thread con il titolo del bug report?

Forse quello avrebbe facilitato @ale ad interpretare il suo contenuto. Possiamo anche tradurre il titolo in italiano in modo che sia più accessibile a tutti.

Se preferisci posso farlo io. Se sei contrario, non insisto… era solo un’idea.

@Shamar, lascia stare, va bene cosí. E’ evidente che non hai una comprensione vasta della problematica. Il sottoscritto ha una vasta esperienza in linguaggi di programmazione, sistemi operativi unix, network engineering, e backend. Ho quasi 30 anni di esperienza lavorativa documentata nel settore e le mie competenze spaziano dalla programmazione, ai sistemi operativi, ai cloud, alla sicurezza informatica e sulla progettazione di cluster, quindi se permetti qualcosina la so. Ovviamente non posso essere aggiornato su tutto, ma di qui a non avere comprensione della materia di strada ce n’é.

Il finto exploit di esempio, l’ho provato giorni fa, esegue una serie di azioni che sono documentate in qualunque libro di programmazione. Giusto per essere chiari: se prendo un libro di HTML 5 e mi vado a vedere come aprire un socket posso fare la stessa identica cosa. E’ documentato.

Ora alla luce di questo vediamo di riassumere cosa é successo:

  1. hai scritto del codice di esempio che fa delle cose che sono documentate negli standard ed é possibile trovare in qualunque libro di programmazione.
  2. hai presentato questa cosa come un bug ai programmatori di Chrome e di Firefox, che ti hanno chiuso il bug e ti hanno detto che era una cosa normale, infatti qualunque programmatore abbia studiato la materia sa come fare.
  3. Hai scritto su twitter a due responsabili di firefox che non ti hanno risposto, indovina il motivo.
  4. Quando ti ho chiesto in cosa consisteva il bug hai tirato dentro cose che non c’entrano niente. E ti ho spiegato il motivo per il quale non c’entrano niente. Perché a differenza tua, io le mie motivazioni le spiego, non mi trincero dietro un “siccome sono esperto non ho bisogno di spiegare”, anche se ho tutte le carte in regola per dire una frase del genere, in effetti tu non hai spiegato proprio niente, ho spiegato tutto io.

Ora, nel tuo ultimo post abbiamo anche capito che non sai cos’é un attacco Man in the Middle, o meglio che non ne hai comprensione, quindi é evidente che non sei un esperto di sicurezza e non hai comprensione dei meccanismi di rete che si trovano in gioco.

Quindi, ti ringrazio, ma credo di avere in mente modi migliori di perdere tempo.

A proposito, per l’inglese, non ti preoccupare, vivo all’estero e lo parlo tutti i giorni con i miei colleghi e scrivo anche documentazione tecnica in inglese.

E pensare che volevo solo fare una piacevole discussione tecnica. E anche in questo thread mi fermo qua, perché col prossimo post mi potrei apparecchiare un ban. :grinning:

@lynX scusa ho aggiornato il titolo del thread senza aspettare la tua approvazione, ma mi sembra evidente che @ale possa essere stato confuso anche dal titolo di questo argomento…

@ale mi dispiace ho cercato di avvisarti che la tua immagine professionale avrebbe potuto risentire di affermazioni affrettate su questo argomento.

Mi metti in una posizione difficile perché non mi piace umiliare colleghi più anziani, ma stai mettendo in dubbio la mia competenza in pubblico, e mentre tu non hai associato al tuo profilo un cognome od un sito internet che permettano di identificarti precisamente, tutti qui sanno che io sono Giacomo Tesio.

Provo a spiegarti con parole più semplici di cosa stiamo parlando.

Il titolo del bug report che scrissi per Mozilla (e che evidentemente non hai letto) è preciso ed esplicativo: Undetectable Remote Arbitrary Code Execution Attacks through JavaScript and HTTP headers trickery.

In altri termini, qualsiasi server web che visiti può eseguire da remoto una vasta varietà di attacchi non identificabili eseguendo programmi personalizzati sulla tua macchina a tua insaputa, impersonandoti presso servizi locali, rimuovendo ogni prova dell’attacco alla fine; il tutto mantenendo perfetta plausible deniability.

Si tratta di un problema architetturale perché questa vasta classe di attacchi sfrutta comportamenti previsti da diversi standard del Web (HTTP, TLS, HTML, JavaScript etc…) che però, combinati opportunamente, costituiscono una backdoor efficientissima capace di veicolare una enorme varietà di attacchi a computer e smartphone.

Attraverso questa backdoor è possibile attaccare in modo sicuro qualsiasi vittima ma, anche potendo rimuovere le tracce, il rischio di essere beccato per l’attaccante non è irrilevante (pur non essendo molto alto) se attacca tutti i visitatori indiscriminatamente. Dunque è buona norma per chi usa questa classe di attacchi servire script innocui alla stragrande maggioranza degli utenti, per poter far passare da paranoiche le poche vittime prescelte qualora dovessero rilevare l’attacco subito.

E chi può attaccare un utente senza che nemmeno questo si autentichi su un proprio servizio? Chi serve o effettua il reverse proxy/MitM di milioni di siti Web (cloud o CDN) e può dunque correlare IP, UserAgent etc nei log di siti diversi in anche solo uno dei quali l’utente si è autenticato. Ad esempio Amazon, Google, Cloudflare… Oppure chi distribuisce piccoli cavalli di troia gratuiti agli sviluppatori Web, come pulsanti Like (Facebook), anteprime video (YouTube/Google), strumenti statistici (Google Analytics) etc… Costoro possono identificare poche vittime, attaccarle in vario modo, rimuovere le prove, e se per caso questi se ne accorgono (cosa piuttosto improbabile) passeranno per paranoici perché milioni di altri utenti non sono stati attaccati.

In questo post ho elencato le risorse di cui l’attaccante può prendere il controllo durante un attacco. Ivi sono anche indicate le mitigazioni più semplici.

In questo post ho provato a fornirti una visione di insieme, ma assumevo che avessi almeno letto il bug report e provato l’exploit.

Ti consiglio di rileggerli alla luce di quanto detto.

Non so cosa tu abbia provato, ma l’exploit che io ho scritto lo sta usando il Governo Russo in questo momento. Dunque definendolo “finto” non fai una gran bella figura.

Dal che è evidente che non hai neanche provato a leggerlo.

La versione di rain1 è più generale e leggibile ma la tecnica è quella che ho ideato io.

No @ale, non puoi aprire socket TCP in HTML5. Sarebbe una follia dal punto di vista di sicurezza! Chiunque abbia un minimo di esperienza in materia lo capirebbe.

Ti stai confondendo con i WebSocket. E come fai in altri passaggi, direi che confondi i browser Web con NodeJS. Entrambi eseguono JS, ma le API disponibili, il sandboxing e le problematiche di sicurezza sono completamente diverse.

Ti basti pensare che un utente che voglia eseguire una applicazione NodeJS, la deve prima scaricare, poi installare (checché questo voglia dire) ed infine lanciare. Invece un utente che visita una pagina Web per leggersi un articolo di giornale, non sceglie di eseguire una applicazione JavaScript, questa viene eseguita automaticamente, a discrezione di chi controlla il sito web (o la CDN).

Da qui derivano le differenze di cui sopra.

Se tu avessi provato a leggere lo script, avresti notato che per individuare le porte aperte prova a caricare un immagine da ciascuna porta e cronometra il tempo prima di fallire. E’ una specie di timing attack: se la porta è aperta, l’errore si propaga in pochi millisecondi, se la porta e chiusa ci mette diversi secondi perché il browser aspetta il timeout.

Se tu hai un libro su HTML5 che spiega come fare queste cose non esitare a condividerlo! :wink:

No, purtroppo non avendo capito proprio nulla della questione le tue deduzioni sono completamente sbagliate.

Il port scanner è solo uno degli attacchi possibili. Ad essere precisi, i russi l’hanno trasformato in uno scanner di applicazioni di sicurezza: non scansiona tutte le porte, cerca dei file specifici, tipici di alcune applicazioni di sicurezza nella propria configurazione di default, per identificare chi le usa e creare un db di queste persone sospette.

E per altro, la cosa più divertente che ti è sfuggita è che se io lancio un port scanning al tuo IP dall’esterno, posso solo vedere aperte le porte aperte del tuo firewall! Il port scanning che il mio attacco effettua è in grado di conoscere le porte aperte su ogni singola macchina della tua rete privata e comunicarle fuori! Il mio PoC crea un tunnel nella tua rete. E poi fa un port scan da dentro. E potrebbe fare di peggio.

Forse dopo 30 anni, sarebbe utile un ripasso, non credi? :wink:

Comunque se vuoi una cronologia iniziale dei fatti la trovi qui Non include l’adozione dell’exploit da parte dei russi… ma non so la data precisa. A me è stato comunicato a dicembre 2018.

Quanto a quelli che vedi nel thread Twitter che ho linkato in precedenza, solo uno è un (credo ex) sviluppatore Mozilla: Asa Dotzler, che in realtà ora Senior Product Manager in Mozilla. Gli altri partecipanti erano Simon Phipps (presidente dell’Open Source Initiative) e Bruce Perens (quello che ha inventato la definizione di Open Source).

O forse ne ho una comprensione maggiore di te. :wink:

La differenza fra un attacco Man in the Middle e quello che fa una CDN come Cloudflare non è tecnica, ma contrattuale: nel caso di Cloudflare, il proprietario del sito web cede consensualmente alcuni certificati TLS a Cloudflare (per la precisione, li autorizza a chiederne il rilascio a proprio nome) in modo che Cloudflare si possa collocare in mezzo fra i visitatori del sito ed il sito stesso, cachando i contenuti HTTPS.

In altri termini, dal punto di vista del visitatore che pensa di star comunicando direttamente con il sito Web in modo riservato, Cloudflare è un Man in the Middle. E la questione è rilevante perché Cloudflare è Man in the Middle per milioni di siti Web. Ed è vincolata contrattualmente solo con i proprietari dei siti. E risponde al governo USA. Dunque può correlare connessioni TCP (tipicamente riusate dal browser), richieste HTTPS ed informazioni di autenticazione fra siti diversi.

Se ancora non ti è chiaro come questo sia rilevante, ricorda che la precondizione per ottenere la plausible deniability è di poter identificare le vittime e poter far veicolare l’attacco a siti di terze parti ignare.

Beh, spero che sia stata quanto meno interessante! :smile:

Buon ripasso! :wink:

1 Mi Piace

Però quanta pazienza che hai. @ale ti dovrebbe invitare a fare security training :slight_smile:

Hai ragione, non avrei dovuto insinuare che ti mancano alcune competenze, perché effettivamente non so niente della tua professione e forse ti sto mettendo a disagio. Ho agito in questo modo, dopo che per diverse volte hai insinuato che non capivo o mi ero confuso mentre mi trovavo purtroppo a constatare che la tua terminologia é fumosa e imprecisa.

Vedi, negli ambienti ai quali sono abituato io la cosiddetta “blaming culture” non é una virtú e quando si parla di cose tecniche non si insinua mai che l’altro non sia competente, ma si sta semplicemente sul pezzo e si parla dell’argomento in sé. Mi dispiace che tu non sia capace di farlo. Ti auguro di crescere un pó dal punto di vista umano.

Una cosa che mi stupisce di questa comunitá forse é proprio questa mania di controllo e onnipotenza che ho rilevato in diversi thread, non mi sarei mai aspettato di trovarla in un ambiente che la aborrisce all’esterno peró poi alcune persone ne fanno metodo all’interno.

Non so se é ancora il caso di entrare nel dettaglio, visto che se ti vai a leggere il bug report che hai creato su Mozilla vedrai che ci sono tutte le risposte delle quali hai bisogno. Ti faccio solo notare delle cose sul significato delle parole. Perché vedi, se stessimo parlando tra junior, ci sta che si é imprecisi, ma quando si ha la presunzione di contestare l’architettura di internet allora si deve utilizzare la terminologia in modo corretto, altrimenti é logico che si venga scambiati per persone che conoscono male la materia.

Io direi che possiamo partire dal significato di bug, visto che quello che hai presentato é un bug report. Non importa a quale definizione ti rifai, ad un certo punto arriverai sempre alla conclusione che il bug é un errore di progettazione o di scrittura di un software dove ad un certo punto si ottiene un malfunzionamento o un funzionamento inaspettato, indesiderato. In questo caso immagino, siamo nel caso di un funzionamento inaspettato, il mio punto é che quel funzionamento, non solo non é inaspettato, ma é voluto, tu dici che lo script maligno “prende possesso delle risorse del computer” e ne fai l’elenco, ma quelle risorse non sono “prese”, sono concesse by design ed esistono livelli dove si puó cancellare questa concessione. Quindi per onestá intellettuale, dobbiamo dire che non é un bug, a meno che non vogliamo cambiare il significato di bug.

Ció non toglie che il comportamento é strano, ma in questo caso dovremmo parlare di progettazione scadente dei dispositivi di sicurezza o di configurazione scadente degli apparati che possono essere scansionati con tale semplicitá.

La soluzione che hai proposto é di disabilitare javascript, che corrisponde a tornare a internet 1.0. Francamente un pó tanto.

Sorvolo sull’atteggiamento da Spectre di James Bond e rimango sulla questione di vocabolario. Quindi vediamo cos’é un attacco Man in the Middle: Secondo wikipedia: indica un attacco informatico in cui qualcuno segretamente ritrasmette o altera la comunicazione tra due parti che credono di comunicare direttamente tra di loro. Quindi, in primo luogo: é un attacco, cioé per poterlo chiamare MITM deve esserci un attacco, ho forti dubbi che i web content provider non siano consapevoli di quello che succede. Per quanto riguarda gli utenti, le informazioni sono disponibili e il lavoro che fanno i content delivery network non é secretato. Infatti, se io mi collego sul sito tal dei tali, proxato da un CDN, parlo a tutti gli effetti (anche legali) con quel sito. Se cosí non fosse non si potrebbero affittare neanche i data center, perché se io mi servo di un computer che non é nella mia disponibilitá fisica potrebbe succedere che il data center mi cambia i dati nel mio hard disk. Forse che dovremmo buttare giú tutti i data center del pianeta? Quindi la cessione di certificati TLS non solo é legittima, ma é anche normale, é quello che avviene quando si configura una batteria di server dietro un load balancer, il CDN puó essere interno o esternalizzato, ma la tecnologia esiste e non é un MITM.

Intendevo finto, in quanto non é relativo ad un bug. Ma ad una progettazione/configurazione scadente degli apparati che vengono attaccati.

Il mio punto é che lo standard prevede che si possa fare. Quindi non é una scoperta, non é una cosa segreta é documentato.

Credo di avere giá scritto sopra che l’ho letto giorni fa. Tenta di aprire una connessione http su delle macchine, non é niente che non possa essere gestito a livello di routing.

Non ho letto lo script. Stai dicendo che questo script é capace di essere lanciato all’interno di un browser e quindi: a) connettersi ad un’altra macchina in rete locale, scansionare il loro hard drive e trovare file specifici oppure b) connettersi ad un’altra macchina in rete locale e cercare se c’é qualche file tipo il welcome di nginx?

E successivamente questo script salva questi dati sul server remoto?

Diciamo che se non chiudi la porta di casa chiunque puó entrare e scansionare, comunque concordo che anche la sola possibilitá di leggere informazioni é un security concern. Ma non é un problema di struttura.

Infatti non mi é sfuggita, anzi, é un’ovvietá, lo scan avviene dall’interno del browser, cioé nella macchina locale. Ma é possibile isolare questi tipi di scan a diversi livelli.

Effettivamente ho sbagliato il conto. Sono 25. E credimi, se sono ancora qui é proprio perché studio ogni giorno.

E tutti quanti ti hanno detto in vari modi che non é un bug dei browser.

Anche a te e compra un vocabolario

Sono certo che Giacomo ha delle ottime qualitá tecniche, e paradossalmente se un giorno avessimo la fortuna di lavorare insieme forse andremmo anche d’accordo, ma migliorerebbe molto se fosse capace di porsi in modo migliore. Io conosco l’argomento, e posso spiegarmi, ma trattare con sufficienza gente che sta cercando di imparare non sarebbe una buona qualitá in un trainer.

Cmq, al di la della discussione, quello che secondo me potevi o potresti fare é una richiesta di aggiungere una feature. Questa feature dovrebbe essere relativa a tenere gli script remoti un una jail o container dove si possono definire con precisione i permessi, il ruolo e le autorizzazioni che ha lo script remoto.

@ale io non tratto MAI con sufficienza chi sta cercando di imparare.

Tu non stai cercando di imparare.

Tu hai cercato (e stai cercando) di attaccarmi professionalmente e (cosa per me MOLTO più grave) di minimizzare un bug ARCHITETTURALE enorme del Web.

Fai pure, ma ricorda, il tempo è galantuomo. :wink: Se ti senti così sicuro delle tue affermazioni perché non condividi il tuo CV con nome e cognome?

No, @ale non è quello che ho proposto.

Ti prego, rileggi con maggiore attenzione. Ho proposto di rendere l’esecuzione di JS, WASM e la gestione di alcuni meta opzionale disabilitata all’inizio e da abilitare sito per sito. E nemmeno basta! Servono anche tutte le altre modifiche che ho elencato.

Non sarebbe affatto un ritorno al Web 1.0, perché potresti riabilitare JS su un sito che lo necessita con un click, come puoi fare su Chrome (ma non su Firefox) se modifichi la configurazione. E le altre mitigazioni suggerite, renderebbero l’esecuzione più sicura.

Pochi giorni fa David Kayne ha spiegato che questo tipo di strumenti di sorveglianza permette detenzioni arbitrarie o ingiuste, torture ed uccisioni extra giudiziali. Non ha detto, perché non essendo un informatico competente non sa, che fra questi strumenti di sorveglianza capaci di creare prove fittizie sul PC o lo smartphone di un nemico politico vanno elencati anche tutti i maggiori browser Web (inclusi appunto Chrome e Firefox).

Se per te la vita umana vale meno di queste mitigazioni, credo che non abbiamo molto da dirci.

E tutti quanti stanno sbagliando. :wink:

Il re è nudo @ale. Io sono solo il bambino che lo ha detto per prima. Ma prima o poi tutti inizieranno a ridere (o piangere). E non sarà contro di me che se la prenderanno.

Si chiama sandboxing è i browser lo fanno già. Non basta.

Quanto ai MitM ho già scritto tutto, se per te il fatto che una parte sia consenziente non lo rende un attacco per l’altra non so cosa dirti. Sì sì come funziona è pubblico e documentato (ho mai scritto i contrario? Secondo te perché parlo di bug architetturale?) ma dire che chi non sa cosa sono le CDN non merita libertà e sicurezza è victim blaming. Molto libertario, complimenti!

Così come sostenere che se una rete privata viene compromessa attraverso un browser la colpa non è di chi ha scritto il browser ma di chi ha scritto o configurato i servizi di rete confidando che i firewall servano a qualcosa.

Guarda, io NON sono un esperto di sicurezza.

Sono solo un hacker con 20 anni di esperienza pratica su queste materie. Sono una persona curiosa che pensa con la propria testa ed ha l’onestà intellettuale di affrontare i problemi. E la cosa terribile è che se un programmatore come me è il primo ad evidenziare vulnerabilità architetturale di questo livello, tutti gli esperti di sicurezza del pianeta dovrebbero farsi un serio esame di coscienza. E chi li paga dimezzarne gli stipendi.

La vulnerabilità più grave che ho scoperta non è quella tecnica, ma quella politica.

Miliardi di persone si fidano per il proprio IT di incompetenti e/o persone in mala fede. E non hanno gli strumenti culturali per distinguere chi li vuole aiutare e chi li manipola.

Ti chiedo scusa, ma ti devo far notare che ho cominciato ad avanzare dubbi sulle tue competenze solamente quando hai insistentemente affermato che non capivo ed ero confuso e praticamente tu insinuavi che fossi io a non averle. A quel punto mi sono visto costretto a farti notare che facevi confusione sui termini. Peró credo che si noti chiaramente dal dibattito che anche se con le dovute imprecisioni e alcuni deliri di onnipotenza sei comunque una persona molto preparata. Non mi sognerei mai di affermare che non sei professionalmente preparato per il lavoro che fai. Anzi, se devo essere sincero ritengo che sei al di sopra della media.

Come ben saprai in molte culture, come ad esempio quella anglosassone é prassi tenere separata la vita personale da quella professionale. In questo contesto non trovo corretto fornire il mio profilo professionale. Tralaltro non ho alcuna intenzione di avere ragione in forza della mia professione, preferisco che ti bastino i miei argomenti. Se non sono sufficienti puoi avere ragione qualunque sia la mia professione.

Queste sono le tue parole nel bug report:

Well, given the severity of the issue, as a first step I would release an emergency fix that disable JavaScript (and Meta Refresh) without looking at the user settings.

Then I would deploy a mid term fix so that:

  • Meta Refresh and JavaScript are disabled by default
  • Both can be enabled on a per website basis,
    • SubResource Integrity is made mandatory (at least for JavaScript): page
    • For each URI record SHA256 of last downloaded content and warn the user if the page change their SRI
    • Warn the user about scripts served with suspect HTTP headers

Per tua comoditá ti ho messo in grassetto il punto dove affermi che si deve disabilitare JavaScript

Mi riferivo alla possibilitá di gestire i permessi dalle impostazioni di Firefox, di renderle piú granulari.

Sfortunatamente vale per qualunque cosa tecnica, anche per i meccanici delle automobili. Chissá, magari in futuro cambierá.

PS: per la blaming culture, mi riferivo al tuo maldestro tentativo di umiliarmi, non al victim blaming nei confronti degli utenti.

Comunque, mi hai fatto venire in mente una cosa che forse qui é OT, peró, potrebbe essere un argomento politico:

Gli script remoti che vengono lanciati nei browser, vengono lanciati senza esplicito permesso dell’utente.

Quando in questi termini si é parlato di dati, si é arrivati alla legge europea che obbliga i siti internet ad autorizzare esplicitamente l’utilizzo dei cookie.

Si potrebbe sostenere che si deve autorizzare esplicitamente e legalmente il lancio di un javascript nella propria macchina. In quanto, il server remoto sta usando risorse delle quali non detiene la proprietá.

Forse potremmo chiedere ai pirati europei se é possibile elaborare questa cosa