SeniorenNet > SeniorenNet Research Department > Techresearch > Javascript bug IE 6

WAARSCHUWING: Javascript bug IE 6

Error gemeld aan Microsoft op 7 en 8 juni 2005 en gemeld aan Opera op 8 juni 2005
De zoekmachines zijn geïnformeerd: Google, SN, Yahoo/AltaVista, Ilse, Lycos, Excite, Webcrawler op 8 juni 2005
Veiligheidsbedrijven Norton, McAfee op 8 juni 2005

ENGLISH VERSION, CLICK HERE

Overzicht:

  • Fout voor alle Microsoft Internet Explorer gebruikers
  • Kan worden misbruikt door hackers om kwaadwillige JavaScript code uit te voeren op de machine van het slachtofer en kan worden misbruikt voor het misleiden van bestaande bescherming tegen JavaScript code, zoals software van Norton, McAfee,...
  • Kan worden misbruikt voor het misleiden van zoekmachines als Google, MSN, Yahoo, AltaVista,...
  • Onaangenaam voor JavaScript programmeurs

De “JavaScript Ghost bug”

Ik, Pascal Vyncke, heb de fout gevonden in Internet Explorer 6, in het verwerken van JavaScript in Internet Explorer 6. Mogelijk zijn alle vorige versies van Internet Explorer 6 SP2 ook kwetsbaar voor deze fout.
De fout is gemeld aan Microsoft op 7 en 8 juni 2005 en ik publiceer deze fout ook op het Internet zodat iedereen de bug kent en Microsoft wordt gedwongen om een oplossing ervoor te vinden.

De bug in IE6, ik noem het de "JavaScript Ghost bug", maakt het mogelijk om JavaScript op de computer van de surfer te laten uitvoeren, maar de broncode van het JavaScript kan niet worden gezien door de surfer en is ook "vergeten" door IE6. Normaal gezien is de code van een HTML pagina en ook alle JavaScript code altijd zichtbaar naar de gebruiker toe en als deze gebruiker de broncode vraagt van de internetpagina (Beeld > Bron), dan kan deze de broncode zien. Ook alle andere HTML code zoals figuren worden onzichtbaar gemaakt door deze bug.
De exploit voor de bug is maar 133 bytes. Een exploit is een stukje programmacode om de fout te (mis)bruiken.

De JavaScript IE 6 exploit:

<script type="text/jscript">
function init() {
document.write("The time is: " + Date() );

}
window.onload = init;
</script>

Deze fout kan totaan onverwachte resultaten opleveren voor een (onervaren) JavaScript programmeur aangezien enkel de output wordt gegeven naar de gebruiker (enkel de output van het JavaScript), maar alle andere HTML van de webpagina verdwijnt, als een geest (ghost).
De nieuw gegenereerde code door JavaScript is bovendien ook enkel de broncode die IE6 zal zien. Het herladen van de pagina door het drukken van F5, de Vernieuwen-knop of Ctrl+F5 helpt niet. De JavaScript code is NIET opnieuw geladen en exact hetzelfde zal worden gegeven naar de gebruiker, alsof het een gewone statische HTML pagina is met enkel die output erop, en dat het lijkt dat er helemaal geen JavaScript code is op de pagina.
Dit is zeer eenvoudig te zien indien we de datum/uur uitprinten. We krijgen enkel de datum/uur uitgeprint, maar het herladen van de pagina geeft ons telkens hetzelfde uur, in plaats van het bijgewerkte uur. Enkel het sluiten van IE6 en het terug starten van IE6 en terug surfen naar de pagina zorgt ervoor dat het uur wordt bijgewerkt. Het opvragen van de broncode geeft opnieuw enkel maar het uur en het JavaScript wordt niet weergegeven, alsook andere mogelijke HTML code in de originele pagina.

Deze fout is niet enkel een fout die onaangenaam kan zijn voor websitemakers, het kan ook mogelijk worden misbruikt an kan dan worden gebruikt om willekeurige JavaScript code op de gebruiker te laten uitvoeren zonder dat de gebruiker kan checken wat de JavaScript code is of doet. Ook software die op de computer staat om de gebruiker te beschermen tegen kwaadaardige scripts (zoals Norton, McAfee,... hebben) kan de JavaScript code op deze manier niet checken aangezien het originele JavaScript niet meer zichtbaar is en zelfs IE6 het "vergeten" is. Het herladen van de pagina, het printen, het opslaan,... halen niets uit. Het JavaScript wordt eenmalig uitgevoerd en kan dan niet meer worden opgevraagd en dus ook niet worden gecontroleerd. Op deze manier is het mogelijk dat alle rees gekende IE veiligheidslekken opniéuw kunnen worden uitgebuid met deze fout.

Deze fout kan ook mogelijk worden misbruikt voor het verbergen van informatie voor de gebruiker. Op deze manier kan men zoekmachines misleiden. De website maker kan zoveel informatie toevoegen op de website als deze wil, extra sleutelwoorden,... Hij kan opmaak geven aan deze informatie zodat zoekmachines, zoals Google denken dat het belangrijke keywords zijn van de pagina, dit terwijl de gebruiker nooit de informatie zal zien, maar wel de output van het JavaScript programma.
Bijvoorbeeld: de website maker kan populaire sleutelwoorden toevoegen op zijn website, zoals "weer, kaarten, woordenboek, Amazon, hotels, Madonna, Pamela, Anderson, Brad Pitt,..." (om nog maar te zwijgen over iets zwaardere sleutelwoorden zoals erotiek, XXX, drugs, politieke slogans,...).
De zoekmachine zoals Google ziet wél alle informatie en HTML op de webpagina en gaat zo de website hoger plaatsen in de zoeklijsten. De gebruiker klikt op de website, maar ziet een totaal andere pagina dan de zoekmachine denkt dat op de pagina staat.
Deze fout kan ook worden misbruikt om informatie "per ongeluk" te verbergen: zoals contract informatie, de "kleine letterstjes",... voor de gebruiker.

Ik heb al de code van de exploit gezet op de pagina, maar zonder enige extra informatie of een echt voorbeeld.
Hier is de broncode van de pagina dat de demo is van de exploit:

<h1>Something <i>before</i></h1>
<br> the <b>JavaScript</b>... Blablalbla

<script type="text/jscript">
function init() {
document.write("The time is now: " + Date() );

}
window.onload = init;
</script>

And <u>something</u> after the <b>JavaScript</b>... Blablablablabla

Klik hier om de demo te zien van de exploit voor de JavaScript Ghost bug.
Opgelet: enkel Internet Explorer gebruikers hebben deze bug. Firefox, Opera, Netscape,... zijn niet kwetsbaar. Klik op de link op eigen risico.

Als uw browser kwetsbaar is voor deze IE fout, dan zal je op de pagina enkel zien "The time is now xxx", waarbij xxx de datum/tijd is van het moment. Je ziet niet "Something before the JavaScript" en ook niet de tekst "Something after the JavaScript".

Kijk naar de broncode (Beeld > Bron). Je ziet enkel "The time is now xxx", en je ziet géén JavaScript code, en ook niet de stukjes code die voor of achter het Javascript staan.
Druk de Vernieuwen-knop, druk op de F5-toets van uw toetsenbord of druk Ctrl+F5. De tijd zijn exact hetzelfde blijven en zal niet worden bijgewerkt. Dit is om te laten zien dat zelfs IE6 zelf is vergeten dat er een JavaScript op de pagina staat en dat enkel de gegenereerde HTML code van het JavaScript nog maar onthouden is op de computer.
Sluit Internet Explorer 6 en start deze terug op en surf terug naar dezelfde URL. De exploit zal opnieuw hetzelfde geven: dit keer wél de bijgewerkte tijd, maar opnieuw herladen zal ook niet meer gaan.

Als je echt wil zien dat de broncode van de pagina die hierboven gelinkt is echt dezelfde code is als op deze pagina, kan je de internetpagina openen met een browser die niet gevoelig is voor de veiligheidslek, zoals Netscap, Firefox,... of open het met een ander programma, zoals Kladblok, Macromedia Dreamweaver, Microsoft Frontpage,...

Ik geef deze eenvoudige JavaScript exploit zodat je kan verstaan wat deze exploit doet. Men kan deze echter gebruiken met nog andere JavaScript code die voor of zelfs erachter wordt geplaatst en zal uitgevoerd worden op de gebruiker zijn computer, en waarna ook al die andere JavaScript code als een "geest" zal verdwijnen.

Deze nieuwe fout in IE6 is slecht nieuws voor Microsoft dat al zwaar onder vuur ligt omwille van de slechte veiligheid. Maar het is ook slecht nieuws voor de zoekmachines en uiteraard ook voor alle gebruikers die Internet Explorer 6 momenteel gebruiken. Mogelijk is de fout ook aanwezig in alle vorige versies van Internet Explorer van Microsoft.

Wie is kwetsbaar?

De kwetsbare browser : Internet Explorer 6, SP2 (met Windows XP) en mogelijk alle vorige versies
UPDATE: de lek is ook aanwezig in Opera 7.54 op Windows XP SP2 en Opera 8.
NIET kwetsbare browsers voor deze fout: Firefox, Netscape

Oplossing?

Zet JavaScript af in Internet Explorer totdat Microsoft een veiligheidsupdate heeft gepubliceerd voor deze fout.

Opmerking

Deze veiligheidslek is gepubliceerd zodat iedereen de fout kent en Microsoft de fout zo snel als mogelijk kan oplossen. Een gekende veiligheidslek is minder gevaarlijk dan een totaal onbekende veiligheidslek die in het geheim wordt gebruikt door echte hackers, oplichters en bedriegers.
Gebruik deze veiligheidslek NIET tegen onschuldige gebruikers. Ik heb deze veiligheidslek NOOIT gebruikt voor eender welke reden om eender wie schade te berokkenen. Ik heb deze fout ontdekt, de exploit gemakt en gepubliceerd zodat het kan worden opgelost.

Met vriendelijke groeten,
Pascal Vyncke

Over de auteur
Pascal Vyncke, 20 jaar oud, webmaster, auteur, Informatica student aan de Universiteit van Antwerpen, wonende te Antwerpen, België.