Analisi tecnica approfondita e proof-of-concept per CVE-2017-9822, una vulnerabilità di deserializzazione non sicura in DotNetNuke che porta all'esecuzione remota di codice tramite cookie appositamente predisposti.
DNN (noto anche come DotNetNuke), prima della versione 9.1.1, presenta una vulnerabilità di esecuzione remota di codice tramite cookie, nota anche come "2017-08 (Importante) Possibile esecuzione remota di codice sui siti web DNN".

Cos'è DotNetNuke?
DotNetNuke è un CMS (sistema di gestione dei contenuti) web gratuito e open source scritto in C# e basato sulla piattaforma .NET. DotNetNuke è molto popolare e ampiamente utilizzato su Internet perché è possibile distribuire una versione web di DNN in pochi minuti senza richiedere molte conoscenze tecniche. Un'altra importante funzionalità di DotNetNuke è la capacità di creare o importare moduli personalizzati di terze parti costruiti con VB.NET o C#
È possibile installare DNN su uno stack comprendente Windows Server, IIS, ASP.NET e SQL Server per Windows. DNN supporta anche la registrazione con verifica dei nuovi utenti tramite email, ma è necessario configurare un server SMTP valido affinché questa funzionalità di sicurezza funzioni.
Caratteristiche principali di DNN
• Architettura modulare: DNN consente un'estensione facile installando ulteriori moduli (moduli funzionali) sviluppati dalla community. Gli amministratori possono caricare nuovi moduli tramite l'interfaccia di amministrazione (upload dei pacchetti .zip) o decomprimerli direttamente in una cartella sul server.
• Gestione utenti: Il sistema fornisce funzionalità di sicurezza e di autorizzazione dettagliata (ruoli/autorizzazioni) per portali e moduli. Account utente, ruoli e permessi sono gestiti centralmente in DNN.
• Gestione dei contenuti: Supporta l'editor WYSIWYG, la gestione di articoli, immagini, documenti... Dispone di un sistema di workflow/pubblicazione (pubblicazione con flusso di approvazione) e versionamento dei contenuti. I contenuti vengono archiviati nel database (SQL Server) condiviso.
• API e integrazione estensibile: DNN fornisce API .NET per lo sviluppo di moduli personalizzati (WebForms, MVC, Razor) e l'integrazione di servizi esterni. Molte librerie di terze parti sono disponibili (temi, moduli e-commerce, forum, ecc.) per estendere le funzionalità.
• Interfaccia e temi: Il sistema di skin (temi) separa contenuti e interfaccia, consentendo una progettazione web flessibile. I siti web creati con DNN possono cambiare aspetto cambiando skin.
• Meccanismo di installazione dei moduli: I moduli DNN sono impacchettati in file ZIP e possono essere installati tramite l'interfaccia di amministrazione o tramite estrazione manuale. DNN supporta sia moduli compilati (.NET DLL) sia moduli Razor dinamici; ogni modulo può concedere o revocare l'accesso tramite le impostazioni di autorizzazione su ogni pagina.
Sistemi operativi: Windows 10
.NET Framework: 4.5.1+
Server web: Microsoft IIS 10
Server di database: Microsoft® SQL Server® 2019 Express, SQL Server Management Studio
Versione Dotnetnuke 9.1.0
È possibile utilizzare i seguenti Google dorks per trovare le versioni di Dotnetnuke distribuite disponibili su Internet e verificarle in base al sito web:
inurl:dnn.js
inurl:dnn.modalpopup.js
inurl:dnn.servicesframework.js
inurl:dnn.xml.js
inurl:dnncore.js
inurl:/Portals/0/
inurl:/DesktopModules/
inurl:/DNNCorp/
inurl:/DotNetNuke
inurl:/tabid//Default.aspx
inurl:/tabid//language/*/Default.aspx
intext:"by DNN Corp "
Puoi seguire questo articolo per costruire l'ambiente
Modifica gli attributi dell'assembly in attributi "debuggabili": questo è molto necessario perché in fase di runtime vengono applicate alcune ottimizzazioni che possono ostacolare il debug, alcuni breakpoint potrebbero non essere raggiunti o alcune variabili potrebbero non esistere.
Carica DotNetNuke.dll in dnSpy (32 bit), quindi seleziona Edit Assembly Attributes (C#)

Cambia la riga da
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
a
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]

Quindi seleziona Compile e salva nuovamente il modulo nella posizione originale.
Successivamente, avvia dnSpy come amministratore e seleziona Debug -> Attach to Process

Seleziona il processo w3wp.exe

Il motivo per cui dobbiamo agganciare questo processo per il debug è che le applicazioni web su IIS utilizzano solitamente i worker process. Essi hanno il compito di gestire le richieste web inviate al server web IIS per ogni application pool; i worker process possono essere molteplici su una stessa macchina e condividono tutti lo stesso nome, w3wp.exe. Una piccola nota: può capitare che non ci sia alcun processo w3wp in esecuzione; IIS non avvia i worker process finché non riceve la prima richiesta web.

Tornando al debug, dopo aver agganciato il processo, scegli: Debug -> Windows -> Modules

Fai clic su un modulo e seleziona Open All Modules

A questo punto, nella finestra Assembly si possono vedere tutti i moduli correlati
