Vulnerabilità ASP.NET CVE-2008-5100 (bypass firma assembly): esiste una correzione?

7

La versione breve di questa domanda è: Esiste una correzione o una soluzione per la vulnerabilità di ASP.NET CVE-2008-5100 , che consente agli aggressori di aggirare il controllo della firma digitale dell'assemblaggio?

Darò un po 'di background. Mi scuso in anticipo per la lunghezza; Questo sembra essere un argomento complesso.

Abbiamo eseguito uno scanner di sicurezza contro il nostro sito Web Windows 2008R2 che eseguiva il nostro Applicazione ASP.NET e lo scanner ha affermato che eravamo vulnerabili CVE-2008-5100. Come affermato su mitre.org e molti altri siti web, questo difetto, per la prima volta nel 2008, è composto da:

The strong name (SN) implementation in Microsoft .NET Framework 2.0.50727 relies on the digital signature Public Key Token embedded in the pathname of a DLL file instead of the digital signature of this file itself, which makes it easier for attackers to bypass Global Assembly Cache (GAC) and Code Access Security (CAS) protection mechanisms, aka MSRC ticket MSRC8566gs.

Questo sembra essere un difetto di progettazione imbarazzante nell'implementazione del .NET Framework, che consente a un utente malintenzionato che ha accesso al sistema di destinazione filesystem per sostituire una DLL dannosa che verrà validata in modo inappropriato come la DLL originale della vittima.

Questa vulnerabilità ha un punteggio CVSS di 10.0, che lo rende l'equivalente del peggiore possibile vulnerabilità mai incontrata.

Il software di scansione di sicurezza consigliato: "Aggiorna la versione di ASP.NET". Tuttavia, nella mia ampia ricerca su Google di questo argomento, non ci sono prove di alcuno l'altra versione di ASP.NET è meno vulnerabile. In effetti, visto quanto sia serio questo difetto è presumibilmente, è sorprendente che nessuno dei siti web che monitorano questo difetto è stato aggiornato dal gennaio 2009. L'unica citazione relativamente recente di un difetto come questo che ho potuto trovare è in Il blog di Ian Picknell , in cui descrive un difetto non risolto molto simile .NET Framework 3.5 SP1 (a partire da febbraio 2010). Anche un po 'allarmante è quello Infatti, un venditore di sicurezza ha appena aggiunto questo difetto allo scanner nel gennaio 2013.

Nell'interesse della brevità, eviterò una lunga discussione sui significati delle versioni di ASP.NET. Tuttavia, sembra che lo scanner sia cancellazione dell'intestazione HTTP "X-AspNet-Version: 2.0.50727". La nostra applicazione emette questa intestazione perché è stata compilata con flag di compilazione destinati a .NET Framework 3.0. Infatti, l'applicazione riporta questa versione di ASP.NET anche quando è eseguito su Windows Server 2012. Se ricompiliamo l'app con obiettivo di .NET Framework 4, otteniamo l'intestazione "X-AspNet-Version: 4.0.30319". Probabilmente potremmo ottenere lo scanner per smettere di lamentarci usando questo compilato versione, ma sta davvero cambiando il modo in cui .NET controlla gli assembly in tempo di esecuzione? Sono scettico, ma non riesco a trovare alcuna prova in un modo o nel altro.

Non sono così preoccupato per l'applicazione effettivamente sfruttata, da allora richiede l'accesso in scrittura alle directory di sistema. Sono preoccupato, come il mio gestione, sulle seguenti best practice.

Grazie.

    
posta Mark R 05.03.2013 - 23:47
fonte

2 risposte

7

Per quanto ho capito, questo CVE è un vero disastro. Il nome sicuro è fondamentalmente una firma sulla DLL e la chiave pubblica è identificata dal " token di chiave pubblica ", che è un hash SHA-1 della chiave troncata a 64 bit . La funzionalità principale del "nome sicuro" è evitare le collisioni quando diversi sviluppatori, che non si conoscono, pubblicano DLL diverse con lo stesso nome.

Si suppone che i nomi forti supportino un framework di integrità del codice: una determinata applicazione farà riferimento a una DLL per nome, versione e token di chiave pubblica; la DLL corrispondente si trova nella Cache degli assembly globali . Un malintenzionato potrebbe tentare di caricare nella GAC una DLL dannosa con lo stesso nome di una vera DLL, sperando in un'altra applicazione (lanciata da un altro utente) per caricare la sua DLL invece di quella corretta. Per fare ciò, poiché l'applicazione contiene il "token della chiave pubblica", l'utente malintenzionato dovrà firmare la sua Evil DLL con una chiave che corrisponde al token della chiave pubblica - e il token della chiave pubblica è un hash crittografico , non può.

Il CVE-2008-5100 si riferisce principalmente a qualcuno che nota che le firme su DLL vengono effettivamente verificate quando la DLL è installata nel GAC, non quando viene caricata dal GAC. Questo ha senso: il GAC è protetto da alterazioni arbitrarie da parte del sistema operativo. Pertanto, se la DLL era valida all'entrata, è comunque valida in seguito. O, più accuratamente, per modificare una DLL che è stata installata nel GAC, hai bisogno di ampi diritti amministrativi che rendono tutto questo moot: se hai quel potere, allora possiedi già la macchina in tutti i modi possibili. Questo spiega il silenzio assordante del Web su questo CVE: è un non-problema . È come affermare che un lucchetto che può essere aperto dal interno di una casa è una vulnerabilità di sicurezza, perché un ladro che è già in casa potrebbe quindi aprire la porta e lasciare che ... ladri entra ? Vedi, quando uso un'analogia senza il velo del gergo tecnico, tutto diventa ridicolo.

Quindi il report dallo scanner non è appropriato. Il tuo problema è trovare il modo giusto per spegnerlo. La mia raccomandazione sarebbe quella di non utilizzare uno "scanner di sicurezza" che rende tali rapporti stupidi.

Ora, se guardiamo ai dettagli, c'è qualcosa di "subottimale" in questo business "Strong Name"; vale a dire, l'hash è troncato a 64 bit. Ciò significa che la resistenza a preimmagini è 2 64 , che è alta ma ancora tecnologicamente raggiungibile (uno sforzo di tale portata è stato fatto pubblicamente almeno una volta ) (a quanto pare, un secondo tentativo di questo tipo è iniziato in diverse università, per risolvere il registro discreto in una curva ellittica a 128 bit - da concludersi all'interno di un stimato dieci anni). Un utente malintenzionato potrebbe provare a generare una chiave pubblica che corrisponda al token della chiave pubblica utilizzato per una DLL specifica; se riesce, allora può fare una falsa DLL che sarà accettata dalle applicazioni, e per questo avrebbe solo bisogno di un accesso "normale" al GAC (non preoccuparti se nessun potenziale aggressore può aprire una normale sessione utente sulle tue macchine ).

La produzione di 2 64 coppie di chiavi RSA è costosa (non tanto quanto si potrebbe credere perché l'attaccante può rendere le chiavi un po 'invalide, ma comunque costose) quindi dubito che questo attacco sarebbe molto pratico, ma il margine di sicurezza è piuttosto basso.

    
risposta data 06.03.2013 - 00:59
fonte
0

Volevo solo aggiungere:

This vulnerability has a CVSS score of 10.0, making it the equivalent of the worst possible vulnerability ever encountered.

Sicuramente non lo puoi sempre supporre. Non tutti i CVSS 10 sono uguali ... alcuni sono molto, molto più severi di altri. Onestamente, è davvero difficile assegnare un valore numerico piatto a una vulnerabilità.

    
risposta data 06.03.2013 - 04:21
fonte

Leggi altre domande sui tag