Este último fin de semana, mientras hacía una lectura de los sitios a los que estoy suscrito, encontré una interesantísima entrada en el que describe un bug que hace que Internet Explorer facilite los ataques XSS.
Para los que no siguieron el enlace, intentaré resumir de que trata el bug que se comenta ahí:
En teoría, cualquier documento que es servido por un (valga la redundancia) servidor web, está acompañado por una cabecera Content-type
, que indica al navegador el tipo de archivo que es, en base a esto el navegador normalmente asocia una acción (interpretar el documento, pasar el control a otra aplicación o finalmente preguntar al usuario que desea hacer con ese archivo).
El caso es que Microsoft implementó algo que se denomina MIME Type Detection, donde básicamente se usan los primeros bytes de un archivo para intentar determinar el tipo o contenido del mismo, esta característica incluso está mencionado en el RFC 2616 (sección 7.2.1 Type).
Any HTTP/1.1 message containing an entity-body SHOULD include a
Content-Type header field defining the media type of that body. If
and only if the media type is not given by a Content-Type field, the
recipient MAY attempt to guess the media type via inspection of its
content and/or the name extension(s) of the URI used to identify the
resource. If the media type remains unknown, the recipient SHOULD
treat it as type "application/octet-stream".
De la cita, se puede ver que sólo se debe usar esta característica si el servidor web NO envía el Content-type correspondiente para el documento que está enviando al cliente.
Como casi todo en la historia de Internet Explorer, Microsoft tiene su propia forma de interpretar los estándares, y es que gracias a la característica antes mencionada, un archivo de texto plano, imagen u otro tipo de documento puede ser interpretado como HTML siempre y cuando éstos incluyan contenido HTML.
Si alguien tiene Internet Explorer a la mano, puede ver que si entra a http://test.buayacorp.com/xss.txt, se mostrará el mensaje "Esto es un archivo de texto" para un archivo de texto plano que contiene lo siguiente:
code:
<script>alert("Esto es un archivo de texto")</script>
Gracias a este bug, múltiples aplicaciones o sitios que permiten subir contenidos a sus usuarios son vulnerables, entre los que se me vienen a la mente:
- Fresqui: vulnerable
- Menéame: al parecer no es vulnerable porque hace una conversión de formato al subir un avatar
ANWMP o cualquier sitio que tenga instalado Drupal y permita subir archivos: vulnerable
- etc, etc.
No recomiendo un navegador en especial (usen Firefox! 😀 ), puesto que fácilmente podría hacer el ridículo con los últimos bugs reportados en varios navegadores.