Vulnerabilidad de ASP.NET CVE-2008-5100 (bypass de firma de ensamblaje): ¿hay alguna solución?

7

La versión corta de esta pregunta es: ¿Existe alguna solución o mitigación para la vulnerabilidad de ASP.NET CVE-2008-5100 , que permite a los atacantes omitir la verificación de la firma digital del ensamblaje.

Voy a dar algunos antecedentes. Me disculpo por adelantado por la longitud; esta Parece ser un tema complejo.

Ejecutamos un escáner de seguridad en nuestro sitio web Windows 2008R2 que ejecuta nuestro La aplicación ASP.NET y el escáner afirmaban que éramos vulnerables a CVE-2008-5100. Como se indica en mitre.org y muchos otros sitios web, esta falla, Primer informe en 2008, consiste en:

    

La implementación de nombre seguro (SN) en Microsoft .NET Framework 2.0.50727     se basa en la firma digital Token de clave pública incrustado en la ruta de acceso de     un archivo DLL en lugar de la firma digital de este archivo, lo que hace que     Es más fácil para los atacantes eludir el Caché de ensamblados global (GAC) y el Código     Mecanismos de protección de seguridad de acceso (CAS), también conocido como MSRC ticket MSRC8566gs.

Esto parece ser un defecto de diseño vergonzoso en la implementación del .NET Framework, que permite a un atacante que tiene acceso a los sistemas de destino. Sistema de archivos para sustituir una DLL maliciosa que será validada inapropiadamente como DLL original de la víctima.

Esta vulnerabilidad tiene una puntuación CVSS de 10.0, lo que la hace equivalente a la peor Vulnerabilidad jamás encontrada.

Se recomienda el software de exploración de seguridad: "Actualizar la versión de ASP.NET". Sin embargo, en mi extensa búsqueda en Google de este tema, no hay evidencia de que alguna Otra versión de ASP.NET es menos vulnerable. De hecho, dada la gravedad. este defecto se supone que es sorprendente que ninguno de los sitios web que lo rastrean El fallo se ha actualizado desde enero de 2009. La única mención relativamente reciente. De un defecto como este que pude encontrar está en El blog de Ian Picknell , en el que describe una falla no corregida muy similar en .NET Framework 3.5 SP1 (a partir de febrero de 2010). También algo alarmante es que hecho de que un proveedor de seguridad acaba de agregar esta falla a su escáner en enero de 2013.

En aras de la brevedad, evitaré una larga discusión sobre los significados de las versiones de ASP.NET. Sin embargo, parece que el escáner está desconexión del encabezado HTTP "X-AspNet-Version: 2.0.50727". Nuestra aplicacion emite este encabezado porque se compiló con indicadores de compilación dirigidos a .NET Marco 3.0. De hecho, la aplicación informa esta versión de ASP.NET. incluso cuando se ejecuta en Windows Server 2012. Si recompilamos la aplicación con un objetivo de .NET Framework 4, obtenemos el encabezado "X-AspNet-Version: 4.0.30319". Probablemente podríamos hacer que el escáner deje de quejarse usando este compilado pero realmente está cambiando la forma en que .NET verifica los ensamblajes en runtime Soy escéptico, pero no puedo encontrar ninguna evidencia de una manera o la otro.

No estoy tan preocupado por la aplicación realmente explotada, ya que requiere acceso de escritura a los directorios del sistema. Me preocupa, como es mi gestión, acerca de seguir las mejores prácticas.

Gracias.

    
pregunta Mark R 05.03.2013 - 23:47
fuente

2 respuestas

7

Por lo que yo entiendo, este CVE es un error. El nombre seguro es básicamente una firma en la DLL, y la clave pública se identifica con la " token de clave pública ", que es un hash SHA-1 de la clave truncada a 64 bits . La funcionalidad principal del "nombre fuerte" es evitar choques cuando varios desarrolladores, que no se conocen entre sí, publican diferentes DLL con el mismo nombre.

También se supone que los nombres fuertes son compatibles con un marco de integridad de código: una aplicación dada hará referencia a una DLL por nombre, versión y token de clave pública; El archivo DLL coincidente se encontrará en Caché de ensamblados global . Un atacante malvado podría intentar cargar en la GAC una DLL maliciosa con el mismo nombre que una DLL genuina, esperando que otra aplicación (iniciada por otro usuario) cargue his DLL en lugar de la correcta. Para hacerlo, ya que la aplicación contiene el "token de clave pública", el atacante tendrá que firmar su DLL malvado con una clave que coincida con el token de clave pública, y que el token de clave pública sea hash criptográfico , no puede.

El CVE-2008-5100 trata principalmente de que alguien se da cuenta de que las firmas en DLL se verifican cuando se instala la DLL en el GAC, no cuando se carga desde el GAC. Esto tiene sentido: el GAC está protegido de alteraciones arbitrarias por el sistema operativo. Por lo tanto, si la DLL era buena en la entrada, sigue siendo buena después. O, más precisamente, para modificar una DLL que se ha instalado en el GAC, necesita amplios derechos administrativos que hacen que todo esto sea discutible: si tiene ese poder, entonces ya posee la máquina de todas las formas posibles. Esto explica el silencio ensordecedor de la Web sobre este CVE: no es un problema . Es como afirmar que una cerradura que se puede abrir desde el interior de una casa es una vulnerabilidad de seguridad, porque un ladrón que ya está en la casa podría abrir la puerta y dejar que ... los ladrones Adelante ? Mira, cuando uso una analogía sin el velo de la jerga técnica, todo se vuelve ridículo.

Por lo tanto, el informe del escáner no es apropiado. Tu problema es encontrar la manera correcta de callarlo. Mi recomendación sería no usar un "escáner de seguridad" que hace esos informes estúpidos.

Ahora, si miramos los detalles, hay algo "subóptimo" en este negocio de "Nombre fuerte"; Es decir, el hash se trunca a 64 bits. Esto significa que la resistencia a preimágenes es 2 64 , que es alta pero todavía alcanzable tecnológicamente (un esfuerzo de esa magnitud se ha hecho públicamente al menos una vez (aparentemente, se ha iniciado un segundo esfuerzo de ese tipo en varias universidades para resolver el registro discreto en una curva elíptica de 128 bits, que se concluirá dentro de un estimado diez años). Un atacante podría intentar generar una clave pública que coincida con el token de clave pública utilizado para una DLL específica; si tiene éxito, entonces puede crear una DLL falsa que será aceptada por las aplicaciones, y para esto solo necesitaría un acceso "normal" al GAC (aún no es una preocupación si ningún atacante potencial puede abrir una sesión de usuario normal en sus máquinas) ).

La producción de 2 64 pares de claves RSA es costosa (no tanto como lo creerías porque el atacante puede generar claves no válidas, pero aún así caras) así que dudo que este ataque sea muy práctico, pero el margen de seguridad es bastante bajo.

    
respondido por el Tom Leek 06.03.2013 - 00:59
fuente
0

Sólo quería añadir:

  

Esta vulnerabilidad tiene una puntuación de CVSS de 10.0, lo que la hace equivalente a la peor vulnerabilidad posible jamás encontrada.

Definitivamente no siempre puedes asumir eso. No todas las vulnerabilidades de CVSS 10 son iguales ... algunas son mucho, mucho más graves que otras. Honestamente, es muy difícil asignar un valor numérico plano a una vulnerabilidad.

    
respondido por el Anorov 06.03.2013 - 04:21
fuente

Lea otras preguntas en las etiquetas