Acabo de leer en la red sobre una vulnerabilidad de seguridad recientemente descubierta en ASP.NET. Puede leer los detalles aquí.
El problema radica en la forma en que ASP.NET implementa el algoritmo de cifrado AES para proteger la integridad de las cookies que generan estas aplicaciones para almacenar información durante las sesiones de los usuarios.
Esto es un poco vago, pero aquí hay una parte más aterradora:
La primera etapa del ataque requiere unos pocos miles de solicitudes, pero una vez que tiene éxito y el atacante obtiene las claves secretas, es totalmente sigiloso. El conocimiento criptográfico requerido es muy básico.
En general, no estoy lo suficientemente familiarizado con el tema de seguridad / criptografía para saber si esto es realmente tan grave.
Entonces, ¿deberían todos los desarrolladores de ASP.NET temer esta técnica que puede poseer cualquier sitio web de ASP.NET en segundos o qué?
¿Cómo afecta este problema al desarrollador ASP.NET promedio? ¿Nos afecta en absoluto? En la vida real, ¿cuáles son las consecuencias de esta vulnerabilidad? Y, finalmente: ¿hay alguna solución que evite esta vulnerabilidad?
¡Gracias por tus respuestas!
EDITAR: Déjame resumir las respuestas que recibí
Entonces, esto es básicamente un tipo de ataque de "oráculo de relleno". @Sri proporcionó una gran explicación sobre lo que significa este tipo de ataque. ¡Aquí hay un video impactante sobre el tema!
Sobre la gravedad de esta vulnerabilidad: Sí, de hecho es grave. Permite al atacante conocer la clave de máquina de una aplicación. Por lo tanto, puede hacer algunas cosas muy no deseadas.
- En posesión de la clave de máquina de la aplicación, el atacante puede descifrar las cookies de autenticación.
- Incluso peor que eso, puede generar cookies de autenticación con el nombre de cualquier usuario. Por lo tanto, puede aparecer como cualquiera en el sitio. La aplicación no puede diferenciar entre usted o el hacker que generó una cookie de autenticación con su nombre.
- También le permite descifrar (y también generar) cookies de sesión , aunque esto no es tan peligroso como el anterior.
- No es tan grave: puede descifrar el ViewState cifrado de páginas. (Si usa ViewState para almacenar datos confidenciales, ¡no debe hacer esto de todos modos!)
- Muy inesperado : con el conocimiento de la clave de la máquina, el atacante puede descargar cualquier archivo arbitrario de su aplicación web, ¡incluso aquellos que normalmente no se pueden descargar! (Incluyendo Web.Config , etc.)
Aquí hay un montón de buenas prácticas que obtuve que no resuelven el problema pero ayudan a mejorar la seguridad general de una aplicación web.
- Puede cifrar datos confidenciales con la configuración protegida
- Usar cookies solo de HTTP
- Prevenir ataques DoS
Ahora, centrémonos en este tema.
- Scott Guthrie publicó una entrada al respecto en su blog
- Publicación de blog de preguntas frecuentes de ScottGu sobre la vulnerabilidad
- La actualización de ScottGu sobre la vulnerabilidad
- Microsoft tiene un aviso de seguridad al respecto
- Comprender la vulnerabilidad
- Información adicional sobre la vulnerabilidad.
La solución
- Habilite customErrors y cree una página de error única a la que se redirigen todos los errores . Sí, incluso 404 . (ScottGu dijo que diferenciar entre 404 y 500 es esencial para este ataque). Además, ingrese
Application_Error
oError.aspx
coloque algún código que haga un retraso aleatorio. (Genere un número aleatorio y use Thread.Sleep para dormir durante tanto tiempo). Esto hará que sea imposible para el atacante decidir qué sucedió exactamente en su servidor. - Algunas personas recomendaron volver a 3DES. En teoría, si no usa AES, no encontrará la debilidad de seguridad en la implementación de AES. Como resultado, esto no se recomienda en absoluto .
Algunos otros pensamientos
Gracias a todos los que respondieron mi pregunta. Aprendí mucho no solo sobre este problema, sino también sobre la seguridad web en general. Marqué la respuesta de @ Mikael como aceptada, pero las otras respuestas también son muy útiles.