Hoofdcategorieën

Populaire browsers crashen door simpel scriptje

Door Harold van der Wal, dinsdag 30 november 2004 22:05
Bron: Berend-Jan Wever, submitter: cybermans, views: 29.827

BugjeDe Delftse student Berend-Jan Wever heeft een kort stukje Javascript gepubliceerd, waarop browsers als Internet Explorer en Firefox zullen crashen. De code bestaat uit een oneindige while-loop waarin een geneste array wordt gesorteerd met een aanroep van de methode sort. Voor een succesvolle crash is het noodzakelijk het script tweemaal in de HTML-code van een webpagina te plaatsen. Opmerkelijk aan de vondst is dat een groot aantal browsers, inclusief Opera en Safari, voor zowel Windows-, Mac- als Linux-systemen gevoelig is voor de stack overflow die ontstaat. Of de overflow in een van de browsers gebruikt kan worden om schadelijke code uit te voeren aan de kant van de gebruiker, is niet bekend. Tot nu toe is er door de browserfabrikanten ook nog geen oplossing voor of informatie over de overflow aangedragen. Eerder deze maand kwam Wever in het nieuws met de ontdekking van een bug in sommige versies van Internet Explorer die leidde tot een buffer overflow en gebruikt kon worden voor het uitvoeren van code.

Volgende 22:18
Vorige 21:38

Reacties

«  1  2  3  4  »

Eh leuk, zou ik zeggen, maar waarom al die ophef over deze onderwerpen... Op deze manier komen 'kwaadwillenden' alleen op ideen }> |:(
ps: het gaat om de volgende code: <HTML>
<SCRIPT> a = new Array(); while (1) { (a = new Array(a)).sort(); } </SCRIPT>
<SCRIPT> a = new Array(); while (1) { (a = new Array(a)).sort(); } </SCRIPT>
</HTML>

Maar ook de programmeurs van deze programma's... :)

En de eer natuurlijk :)

Ik vraag me trouwens af hoe je daar in hemelsnaam op komt of dat even allemaal uit te gaan proberen.

Wat zouden kwaatwillende voor kwade dingen hiermee kunnen doen :P? Je zou het op je site kunnen plaatsen, maar dan krijg je ten eerste minder bezoekers, en ten tweede gebeurt er nix bijzonders behalve een browsercrash :)

Nooit gehoord van (het in het artikel al genoemde) buffer overflow? Daardoor kan je 'malicious code' laten draaien, waardoor je de gehele HD kan wissen, of de startpagina veranderen, of de gehele zoekhistory door kan sturen naar weet ik het wie, of elek ander programma...doe dus eens lezen of doe eens denken.

Of de overflow in een van de browsers gebruikt kan worden om schadelijke code uit te voeren aan de kant van de gebruiker, is niet bekend

Lezen zei je?

Een dingen valt me op.
- Je stoort je aan de publicatie omdat dit mensen op ideeën brengt, maar je plaatst vervolgens zelf de code maar eens.

In Security by obscurity geloof ik zelf niet. Veiligheid komt niet door zwakke punten niet vertellen, maar door het effectief te implementeren. Wat helpt nou beter? Niemand vertellen dat de achterdeur altijd op staat of een goed slot nemen . . .

Hij geeft gewoon antwoord op zijn eigen vraag. Hij probeert de eerste te zijn die iets ontdekt. Gewoon macho gedrag dus.

Het vervelende aan dit probleem is dus recursiviteit, je kan van tevoren niet bepalen of het fout gaat. Maar ik had verwacht dat ze een heap/stack overflow wel zouden opvangen. Kortom je kan het probleem volgens mij niet voorkomen, maar je zou het wel netjes moeten kunnen opvangen.

Het doet me denken aan de recursieve dirbom batch file dat zichzelf 3x aanroept en x aantal dirs maakt en de batch files daar weer in zet.. etc..

of de befaamde fork() bom onder unix... kun je in no time een schoolserver mee plat leggen als ze het max aantal processen per gebruiker niet limiteren...

Je kan dit soort zaken best afvangen. Je draait immers in een VM. Als je een beperking op het maximale aantal recursieve stappen zet en zeker op het maximale geheugen gebruik dan hoeft er niets fout te gaan.

Als je ziet dat dezelfde functie al 30000 keer op je callstack staat dan weet je dat er toch iets niet helemaal goed gaat in de meeste gevallen.
Ook als je ziet dat je 512MB in je VM aan geheugen aan het gebruiken bent dan zou je ook wel kunnen concluderen dat er mogelijk iets toch niet goed gaat.

Je draait immers in een VM.
Niet eens. Het is een script, en die draait dus in een interpreter.

Recursie: zie recursie

Leuk, maar waar is je stopconditie?

Iets soortgelijks treed op als een pagina zichzelf 2x opent in nieuwe vensters. Erg oud geintje..

http://www.raus.de (voor de oude browsers erg leuk)

Ook een leuke is:

Maak in Photoshop een Verschrikkelijk groot plaatje met alleen de 'kleur' wit.

Sla dit bestand (van enkele honderden, zoniet duizenden MB's) op als BMP

Pak het in met een Zip programma.
Het bestandje zal ini-mini worden.

Mail het zip bestandje naar een collega en laat hem/haar het uitpakken...

Of...
Type een hoop tekst (een boekwerkje vol) in Notepad en verander de fontsize naar 99999 nogwat PX... ;-)

Ach het is maar wat je als "Bug" wilt bestempelen... een oneindige loop maken noem ik al zeker geen 'lek' zoals webwereld doet.

Het kan uiteraard wel beter! Ik heb het script getest op Firefox en Opera in linux en laten testen op IE. De IE-bakken hingen gewoon en moesten soms gereset worden. Firefox moest gekilled worden op mijn machine, maar in Opera voldeed het om gewoon het tabje te sluiten (Firefox weigerde dit).

Konqueror daarentegen, dat is de manier waarop het moet. Die waarschuwd je er voor dat er een script gaat draaien dat geen zuivere koffie is en geeft je de kans dit te stoppen (Konqueror 3.3.0 op het werk). Wel vreemd dat Safari dit dan niet doet, want het is beiden de KHTML engine (en die gaf de warning ook).

Maja, ik heb ook een nieuw lek ontdekt!
<script>
while(1)alert('hoi!')
</script>

:Z

Opera 7.60 preview 3 geeft bij mij geen problemen, ik heb het scriptje ongeveer een half uur laten draaien... het enige wat ik zag was dat het geheugengebruik met 400-500 kb/s steeg... en dat de cpu usage 60-100% was
maar ik kon nog wel gewoon verder browsen in alle tabs, het enige storende was dat de mouse gestures een seconde lag hadden :P
verder kon ik ook gewoon het tabje weer afsluiten en toen gebruikte Opera gelijk 140 mb minder geheugen.

Ik weet niet wanneer ie moet crashen maar een half uur zonder enorme problemen lijkt mij geen probleem

zo'n simpele while loop detecteerd elke browser:/

Firefox crasht hier inderdaad
Internet Explorer 6 (SP2 !!) geeft een waarschuwingsbalk met geblokkeerde inhoud !

Probleem doet zich niet voor bij SP2 gebruikers :*)

edit: infobalkje van IE:
"Om de beveiliging van uw computer te verbeteren, heeft Internet Explorer dit bestand beperkt in het weergeven van actieve inhoud, die mogelijk toegang verschaft tot uw computer. Klik hier voor opties..."

dat zou ik niet te hard roepen.. mijn collega met SP2 op zn flaptop had wel degelijk een dusdanig probleem dat hij z'n machine moest resetten.

Zal ook vast wel aan de instellingen van security liggen gok ik, die jij dan misschien wat hoger hebt? (draai geen windows, heb dus geen idee eigenlijk :P)

Alles standaard, volledig geupdate dat wel. Me primaire browser is namelijk Firefox :Y)

zie ook reactie van roland73

Nou, ik zie het probleem niet. Ik heb een volledig gepatcht systeem met Windows XP Pro NL SP2 met IE6.

Ik voer de code uit, ondanks de waarschuwing van IE (in de vorm van een infobalk), en kijk wat er gebeurt.

Ik krijg 2 errors:
- Stack overflow at line: 2
- Stack overflow at line: 3
en verder gebeurt er helemaal niks, geen errors, geen crashende browsers, geen crashende windows.

Als ik jou was zou ik die collega (als die zn laptop beheert tenminste) eens heel hard uitlachen ;)

dat zou ik niet te hard roepen.. mijn collega met SP2 op zn flaptop had wel degelijk een dusdanig probleem dat hij z'n machine moest resetten.
Dit geeft toch de noodzaak aan om de browser een integraal onderdeel van het OS te maken 8-)

je hoeft je pc nooit te resetten voor zulke bugs
gewoon proccess afsluiten en klaar

ik heb van alles getest en nog nooit me pc hoeven resetten voor gaten in msie

wat je ook kan doen alle msie raampjes in een appart process openen nog minder problemen

tsja, een instelling, je kan ook zeggen dat hij altijd scripst moet uitvoeren. En ook in FF zal je best javascrips alleen kunnen uitvoeren met een prompt.

Dit zijn instellingen die default(of toevallig) op een andere waarde staan.

Mja, maar hij zegt hier ook netjes 'stack overflow at line...".
Firefox crasht direct als ik het script open. Toch verschilletje dus.
Daarnaast moet je hem bij iexplorer eerst expliciet toestaan met de standaardinstellingen, en dat is voor de meeste gebruikers dus wel goed dat het zo ingesteld staat.

Internet Explorer 6 (SP2 !!) geeft een waarschuwingsbalk met geblokkeerde inhoud !
Doet IE6 SP2 dat niet bij alle bestanden met JavaScript code die je op je lokale HDD uitvoert?

Yup :( een erg irritante eigenschap..
maar schijnt dat je dat kan uitschakelen...

weet je zeker dat zich dat niet voordeed toen je de code vanuit een lokaal bestand probeerde uit te voeren? standaard blokkeert IE6sp2 inderdaad javascript die uit een lokaal html bestand wordt uitgevoerd. voor remote html bestanden geldt dit echter niet.

Leuk, moeten we weer allemaal IE gaan gebruiken. Spread IE!

Voor mensen die zin hebben gekregen om hun favoriete browser te laten crashen. Hier staan ook nog een paar manieren:
http://www.quirksmode.org/bugreports/
En bugzilla staat vol met manieren om Mozilla te laten crashen.


Ik denk niet dat iemand dit expliciet gaat lopen uitzoeken. Waarschijnlijk gewoon een programmeur die per ongeluk code schreef waarin een oneindige loop voorkwam (gebeurt heel vaak bij programmeren als je niet je hoofd er bij houdt, en zelfs als je dat doet gebeurt het nog wel eens).

Toen deze persoon zag dat het zijn browser crashte, en de volgende browser, en vervolgens zo'n beetje alle browsers was het natuurlijk een koud kunstje om zijn eigen loop conditie die onbedoeld oneindig was even door while(true) te vervangen.

Een tijd terug ben ik hier ook een topic over gestart. Ik denk dat dit al veel langer mogelijk is. Maak maar eens een BMP van 30 MB en zet er de volgende code in een html-bestand:

<img src="groot.bmp" width="30000px" height="30000px" />

Er zijn niet veel browsers die hier soepel mee om kunnen gaan; resultaat: de computer van de gebruiker is min of meer onbruikbaar. Ik denk zelfs dat Windows 98 spontaan er de beu aan geeft in dit geval, nfi overigens.

Ongeveer net zo obvious als een riotgun leegschieten op je PC en dan zeggen dat ie het niet meer doet ja.

Een beetje onzinnige opmerking, software hoort robuust te zijn. Als de browser iets niet ondersteund of aankan dan hoort deze dat op een correct manier af te handelen. Bijvoorbeeld door een melding te geven dat het bmp bestand te groot is. Of desnoods door een rood kruisje of iets dergelijks weer te geven, maar niet vastlopen of crashen.

Natuurlijk is het zo dat je niet van te voren alles kan bedenken wat er fout kan gaan, maar als zoiets wordt ontdekt hoort het wel gerepareed te worden. Zo heeft niemand rekening gehouden met het 'probleem' dat een recursieve sort functie kan veroorzaken.

30000 px * 30000 px * 24 bits is 2,5 gigabyte... inderdaad dat dat niet gaat lukken...

Wat dacht je ervan om een A4 op 300 dpi als BMP in te scannen en dan in Paint te openen onder Windows 95 met 64 MB geheugen! :+

Je kunt natuurlijk wel allerlei vreemde code bedenken om daardoor je browser te laten crahsen. Maar wat heeft dit eigenlijk voor nut. Zolang er geen andere code uitgevoerd kan worden is er niets aan de hand. Waarom zou je browser alles moet gaan afvangen ?

Als heel je systeem hangt voel je je best genaaid als je ook iets anders aan het doen was en je niet gesaved had :)

Bij een operating system met een goede CPU en I/O scheduler en een goed memory management zou een op hol geslagen proces zoals deze niet voor problemen moeten kunnen zorgen. Helaas kan ik het hier in Windows niet testen, want ik heb blijkbaar een IE en Firefox die niet crashen ...

Dan hangt hooguit je browser... :Z

Ja, inderdaad, laat ze eerst maar eens met bewijzen komen dat er tijdens zo'n crash andere code uitgevoerd kan worden.

Zoniet..... is het geen bug, maar een fout in de html code van diegene de de pagina geschreven heeft. :P

Ik krijg in ie (XPsp2) eerst de meldig of ik deze actieve in houd wil toestaan, als ik dit goed vind krijg ik daarna een keer de melding:
Stack overflow at line:1 en daarna
Stack overflow at line:2

Maar vastlopen doet IE niet. Misschien alleen oudere versies?

Firefox crasht inderdaad wel (ben ik blij dat ik ie gebruik.... :-) sorry, kon het grapje niet laten )

Edit...

Bedenk me net, kun je met deze code forums laten vastlopen? Althans de browser die een pagina opvraagd. Er zijn toch forums die HTML toestaan (niet slim idd). Ik zal het niet proberen...
«  1  2  3  4  »

Op dit item kan niet meer gereageerd worden.

Volgende 22:18
Vorige 21:38
VNU Media logo Powered by True

© 1998 - 2008 Tweakers.net - Alle rechten voorbehouden

Uitgever van: