El pasado 5 de agosto se publicó en la lista de correo BugTraq un
mensaje acerca el descubrimiento de un problema en la forma en que
Internet Explorer trata los certificados digitales utilizados en las
comunicaciones SSL (Secure Socket Layer). Esta vulnerabilidad podría
permitir la interceptación, de forma totalmente indetectable para el
usuario, de las comunicaciones supuestamente seguras.
Para entender el alcance de la vulnerabilidad, en primer lugar es
necesario explicar superficialmente como funciona la emisión de los
certificados digitales. Como es de sobra conocido, el protocolo HTTP
utilizado para la transmisión de la información contenida en las páginas
web (documentos HTML, gráficos y un largo etcétera), es un protocolo en
claro. Es decir, todo aquello que se envía circula a través de Internet
exactamente igual a como es enviado y recibido.
Gracias al hecho que el protocolo se transmite en claro, es posible que
un sistema situado entre el emisor y el receptor (el servidor web y el
navegador del usuario, respectivamente) pueda capturar todo el tráfico.
Esto puede hacerse sin que ninguna de las dos partes de la comunicación,
el emisor y el receptor, aprecien ningún problema o indicio de esta
captura.
Evidentemente esta situación impide garantizar el nivel mínimo de
seguridad para poder realizar transacciones que requieran el envío de
datos sensibles, como tarjetas de crédito, direcciones, contraseñas,
números de teléfono, información personal…
Para permitir este tipo de transacciones, se utiliza un protocolo
alternativo denominado HTTPS que utiliza un sistema de encriptación de
clave pública. En vistas a garantizar la identidad del servidor al que
nos conectamos, y prevenir el tipo de ataque descrito anteriormente,
cada servidor al que conectamos mediante HTTPS debe disponer de un
certificado digital que autentique su identidad.
Este certificado debe estar firmado por una autoridad de certificación
(CA, Certificate Authority). El navegador viene con una serie de
certificados de diversas CA, que teóricamente aplican unos criterios muy
estrictos de identificación del titular de un certificado antes de su
emisión. De esta forma, se considera que cualquier certificado firmado
por una CA cumple con los requisitos necesarios para garantizar el buen
fin de la información que circule en la sesión HTTPS.
El escenario habitual para disponer de un certificado digital es el
siguiente: el administrador de A.COM genera una solicitud de certificado
y la envía a la CA para que la firme. Dentro de la solicitud de
certificado se encuentra el nombre de máquina que deberá utilizarse en
la comunicación HTTPS (por ejemplo, WWW.A.COM).
Antes de realizar la firma del certificado, la CA debe comprobar que
A.COM realmente pertenece a la empresa que solicita el certificado. Si
todas las comprobaciones son satisfactorias, firma el certificado y lo
devuelve al administrador que ha realizado la solicitud.
Un certificado firmado de esta forma es absolutamente seguro, ya que no
hay forma de suplantarlo: no se puede modificar el nombre de máquina ni
la firma que ha realizado la CA.
No obstante, existe un posible escenario ligeramente más complicado. En
ocasiones las CA que firman un certificado no están incluidas dentro de
los certificados incluidos dentro del navegador.
Cuando se utiliza un certificado firmado por una CA cuyo certificado no
forma parte de los certificados reconocidos por el navegador sucede que,
al acceder a la máquina, el navegador muestra un aviso informando de
este hecho y que, por tanto, no existe garantía de quien ha firmado el
certificado ni de los procesos de autenticación que se han realizado.
Una alternativa para que esto no suceda es que el certificado de la CA
no directamente reconocida (CA secundaria) por el navegador haya sido
firmado por una CA que si se encuentra dentro de las reconocidas por el
navegador (CA primaria). Cuando se hace esto, automáticamente todos los
certificados emitidos por esta CA secundaria son reconocidos por el
navegador como firmados por la CA primaria.
No obstante, para prevenir posibles certificados ilegítimos, el
navegador tiene la responsabilidad de verificar toda la cadena: que el
certificado digital está firmado por la CA secundaria y que, a su vez,
la CA secundaria ha sido firmada por la CA primaria. También debe
verificar que todos los certificados intermedios son igualmente válidos
y corresponden a los dominios para los que se están utilizando.
Aquí es donde radica la vulnerabilidad descubierta. Internet Explorer
realiza la primera comprobación así como la comprobación de que la CA
secundaria ha sido firmada por la CA primaria. No obstante, no verifica
la integridad de los certificados para verificar que, realmente,
corresponden a los dominios en los que se están utilizando.
Como realizar la suplantación
Un atacante ha obtenido un certificado que haya sido firmado por una CA
y utiliza este certificado para emitir un nuevo certificado, pero que
corresponde a un dominio diferente.
El esquema sería el siguiente:
[ Certificado – Emitido por CA / A nombre de CA ]
-> [ Certificado – Emitido por CA / A nombre de {A.COM} ]
-> [ Certificado – Emitido por {A.COM} / A nombre de {B.COM} ]
Cuando se realiza una conexión a B.COM, Internet Explorer verifica que
el certificado ha sido firmado por A.COM y que éste, a su vez, ha sido
firmado por una CA. Si esta CA se encuentra dentro de las reconocidas
por el navegador, se asume que el certificado es legitimo y se realiza
la conexión sin mostrar ningún aviso al usuario.
El impacto más importante de esta vulnerabilidad es que puede ser
utilizados en ataques de interceptación de tráfico («man-in-the-middle»)
en el que un atacante redirecciona el tráfico dirigido a una sede web de
comercio electrónico hacia su sistema, donde hay un certificado emitido
por él a nombre de la sede de comercio electrónico. Esto le permite
obtener datos confidenciales, como son números de tarjetas de crédito.
Soluciones
En el momento de redactar este boletín, Microsoft no ha publicado
todavía ninguna actualización de Internet Explorer para evitar este
problema. Según recogen algunas publicaciones (ver las URL indicadas más
abajo), parece que el problema radica en el soporte criptográfico del
sistema operativo (Windows) y no propiamente en Internet Explorer.
xavi@hispasec.com
Deja una respuesta