Eind vorige maand werd Tweakers.net-ontwikkelaar Tino Zijdel door een bezoeker op een bug in Internet Explorer 6 en 7 gewezen die het mogelijk maakt een cross site scripting-exploit uit te voeren. Het lek situeert zich in de mimetype-detectie van de browser.
Zijdel lichtte Microsoft op 29 april in, waarbij hij twee concepten van mogelijk misbruik demonstreerde aan de softwareontwikkelaar. Het eerste voorbeeld maakte gebruik van een geldig gif-bestand, maar dan geserveerd als 'image/jpeg'-mimetype. In voorkomend geval dat de extensie niet aansluit bij het geserveerde mimetype, probeert Internet Explorer dit type zelf te bepalen, maar daarbij negeert de browser de gif-signature van het bestand. In plaats van als afbeelding, wordt het bestand daardoor behandeld als html-code, met als gevolg dat de javascriptcode in het bestand uitgevoerd wordt. Doordat het hierbij wel om een geldige gif-afbeelding gaat, kunnen heel wat sites waar afbeeldingen geüpload kunnen worden, misbruikt worden als zij op basis van de extensie bepalen dat een 'image/jpeg'-mimetype meegestuurd moet worden.
In een tweede proof of concept, wordt een png-bestand met een text-extensieblok geserveerd. In dit blok wordt een stukje javascript-code als commentaar geplaatst. Het meegeleverde mimetype is correct en wanneer de afbeelding in een img-tag geplaatst wordt, is er dan ook niets aan de hand. Bij toegang via een rechtstreekse link, wordt de html en het script in het png-bestand echter uitgevoerd. Volgens Zijdel illustreren beide voorbeelden een schending van RFC2616 met betrekking tot HTTP/1.1. Daarin wordt namelijk bepaald dat een browser alleen mag proberen het mimetype te raden als er geen Content-Type-veld meegestuurd wordt door de server.
Opvallend genoeg verklaarde Microsoft tegenover Zijdel dat het gedrag van Internet Explorer als dusdanig bedoeld is en dat het bedrijf dan ook niet van plan is hier een patch voor te schrijven. Wel zal er bij een volgende IE-versie aandacht aan het probleem besteed worden. Volgens een medewerker van het Microsoft Security Response Center, is het niet aangewezen om het gedrag van Internet Explorer op dit moment te wijzigen, omdat siteontwikkelaars wellicht gebruikmaken van de functionaliteit die de browser met zijn mimetypedetectie biedt. Aan het xss-exploit-gedeelte wordt daarbij echter volledig voorbijgegaan. Ook tegenover de redactie van Tweakers.net verklaarde het Internet Explorer-team dat de handelingen van de browser 'by design' zijn.
Een eerste argument van de ontwikkelaars is dat het de bedoeling is dat Internet Explorer scripts hoort uit te voeren als het om een bestand gaat dat zowel een afbeelding als een script is. Daartegen kan ingebracht worden dat een bestand ofwel een afbeelding ofwel een script is, maar het tweede argument is nog gemakkelijker te weerleggen. Microsoft beargumenteert namelijk dat het zo gemakkelijker is om bestanden zonder, of met een incorrect mimetype, te behandelen. In het png-voorbeeld wordt echter een correct mimetype meegestuurd, en bij het foute mimetype van het gif-voorbeeld zijn er enkele redenen om de content toch niet als html te behandelen:
- Het opgegeven mimetype impliceert binaire data
- Het bestand is een geldige gif-afbeelding, inclusief de bijhorende signature
- Het bestand bevat, naast wat als html gezien kan worden, ook binaire data. Daaruit kan door het content-sniffing-mechanisme afgeleid worden dat de content niet fatsoenlijk als tekst of html getoond kan worden.

Tot slot schuift Microsoft de verantwoordelijkheid af op site-uitbaters, door hen aan te raden gegevens te filteren op basis van de inhoud van bestanden. Concreet betekent dit echter dat websites binaire data moeten gaan weren omdat de gegevens mogelijk pas 'kwaadaardig' worden op het moment dat de browser op een foute manier met de mimetypes omgaat. Het is overigens wel mogelijk de mimetype-sniffing-engine uit te zetten, maar aangezien deze op zowel Windows XP als Windows 2003 en op systemen met Internet Explorer 7 standaard aan staat, lijkt het veilig te veronderstellen dat de meerderheid van de systemen kwetsbaar is.
