Análisis técnico en profundidad y prueba de concepto para CVE-2017-9822, una vulnerabilidad de deserialización insegura en DotNetNuke que conduce a ejecución remota de código mediante cookies manipuladas.
DNN (también conocido como DotNetNuke) anterior a la versión 9.1.1 tiene capacidad de ejecución remota de código a través de cookies, también conocido como "2017-08 (Importante) Posible ejecución remota de código en sitios web DNN".

¿Qué es DotNetNuke?
DotNetNuke es un CMS (sistema de gestión de contenidos) web gratuito y de código abierto escrito en C# y basado en la plataforma .NET. DotNetNuke es muy popular y se usa ampliamente en Internet porque puede implementar una versión web de DNN en minutos sin necesidad de muchos conocimientos técnicos. Otra función importante de DotNetNuke es la capacidad de crear o importar módulos personalizados de terceros creados en VB.NET o C#.
Se puede instalar DNN en un stack que incluya Windows Server, IIS, ASP.NET y SQL Server para Windows. DNN también admite el registro de verificación de nuevos usuarios por correo electrónico, pero necesita configurar un servidor SMTP válido para que esta función de seguridad funcione.
Características principales de DNN:
• Arquitectura modular: DNN permite una fácil expansión instalando módulos adicionales (módulos funcionales) desarrollados por la comunidad. Los administradores pueden cargar nuevos módulos a través de la interfaz de administración (cargar un paquete .zip) o descomprimirlos directamente en el directorio del servidor.
• Administración de usuarios: El sistema proporciona funciones de seguridad y permisos detallados (roles/permisos) para portales y módulos. Las cuentas de usuario, roles y permisos se gestionan de forma centralizada en DNN.
• Gestión de contenido: Soporta edición WYSIWYG, gestión de artículos, imágenes, documentos, etc. Tiene un sistema de flujo de trabajo/publicación (publicación con proceso de revisión) y versionado de contenido. El contenido se almacena en una base de datos (SQL Server) común.
• API e integración extensible: DNN proporciona una API .NET para que los desarrolladores creen módulos personalizados (WebForms, MVC, Razor) e integren servicios externos. Hay disponibles muchas bibliotecas de terceros (temas de interfaz, módulos de comercio electrónico, foros, etc.) para ampliar la funcionalidad.
• Interfaz y temas: El sistema de skins (temas) separa el contenido de la interfaz, lo que permite un diseño web flexible. Los sitios web creados con DNN pueden cambiar su apariencia cambiando de skin.
• Mecanismo de instalación de módulos: Los módulos de DNN se empaquetan en archivos ZIP y se pueden instalar a través de la interfaz de administración o descomprimiéndolos manualmente. DNN admite tanto módulos compilados (DLL .NET) como módulos Razor dinámicos; todos los módulos pueden otorgar o revocar acceso mediante la configuración de permisos en cada página.
Sistemas operativos: Windows 10
.NET Framework: 4.5.1+
Servidor web: Microsoft IIS 10
Servidor de base de datos: Microsoft® SQL Server® 2019 Express, SQL Server Management Studio
Versión de DotNetNuke: 9.1.0
Se pueden usar los siguientes Google dorks para encontrar versiones de DotNetNuke implementadas disponibles en Internet y verificarlas según el sitio 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 "
Se puede seguir este artículo para construir el entorno:
Cambiar las propiedades del ensamblado a atributos "depurables", esto es muy necesario porque en tiempo de ejecución se aplican algunas optimizaciones que pueden obstaculizar la depuración; algunos puntos de interrupción podrían no alcanzarse o algunas variables podrían no existir.
Cargar DotNetNuke.dll en dnSpy (32 bits) y luego seleccionar Edit Assembly Attributes (C#).

Cambiar la línea de:
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
a:
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]

Luego seleccionar Compile y guardar este módulo en la ubicación original.
A continuación, iniciar dnSpy con permisos de administrador y seleccionar Debug -> Attach to Process.

Seleccionar el proceso w3wp.exe.

La razón por la que debemos adjuntar este proceso es que las aplicaciones web en IIS suelen usar procesos de trabajo (worker processes). Estos se encargan de procesar las solicitudes web que llegan al servidor web IIS para cada grupo de aplicaciones. Puede haber varios procesos de trabajo en una máquina y todos comparten el mismo nombre: w3wp.exe. Una nota: a veces no hay ningún proceso w3wp en ejecución; IIS no iniciará los procesos de trabajo hasta que reciba la primera solicitud web.

Volviendo a la depuración, después de adjuntar el proceso, seleccionar: Debug -> Windows -> Modules.

Hacer clic en un módulo y seleccionar Open All Modules.

En la ventana Assembly ahora podemos ver todos los módulos relacionados.
