Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

Door , , 79 reacties
Bron: Berend-Jan Wever, submitter: cybermans

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.

Moderatie-faq Wijzig weergave

Reacties (79)

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..
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?
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...
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:/
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
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.
Echt nieuw is dit overigens niet. Ik probeerde de code in een txt bestand te plaatsen. Zodra het bestand was opgeslagen kwam Kaspersky omhoog zetten met de melding:
Object is geinfecteerd met een virus Exploit.HTML.CrashBrowser.a
Was dus al langer bekend.
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..."
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.
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)
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
Alles standaard, volledig geupdate dat wel. Me primaire browser is namelijk Firefox :Y)

zie ook reactie van roland73
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...
Leuk, moeten we weer allemaal IE gaan gebruiken. Spread IE!
joepie.... een student die denkt dat hij het wiel heeft uitgevonden.

om te beginnen een stack overflow is geen bufferoverflow.

En het feit dat windows keurig de melding geeft stack overflow betekend dat het programma keurig gestopt is met draaien voordat geheugen buiten de stack werd overschreven. Niets aan de hand dus. drukte om niets, en als deze student volgend jaar op school uitleg krijgt over hoe de stack werkt gaat hij er mischien ook wat van snappen.

Hier nog een lek in IE. Geeft ook een foutmelding omdat hij de uitkomst niet aankan.

<SCRIPT> a = 1 / 0 ; </SCRIPT>
We hebben het hier niet over een foutmelding of lek maar over een crash. Software hoort sowieso natuurlijk niet te crashen, maar het opvallende aan dit bericht is juist dat engines van twee commerciŽle bedrijven ťn twee open-source-projecten dezelfde check niet uitvoeren :).
Ze voeren de check dus wel uit.

een stack is niets anders als een stapel waar je getalletjes op kan gooien om ze er later weer af te halen. Wordt het stapeltje te hoog krijg je een stack overflow en wordt het programma afgesloten.

Het programma wat nu wordt afgesloten is het java proggie? Slecht geprogrammeerde java code dus. Maar elke programeur ziet dat aan bovenstaande code in 1 oogopslag.

Internet explorer zelf blijft zonder problemen draaien
zo zie ik in 1 oogopslag dat het hier een javaSCRIPT proggie betreft :+
Of het nu javascript, vbscript, java, c, c++, c#, lisp, prolog is, maakt geen scheet uit.
Enkel dat de laatste 6 uit lijstje hierboven over het algemeen niet door de browser uitgevoerd worden, maar vangt je OS of in geval van java je VM de stackoverflow op. In het geval van vbscript of javascript moet de browser dit opvangen...
[flamebait mode]
Tjongejonge, is dit nou het soort nieuws dat "wij" als Tweakers tegenwoordig voorgeschoteld krijgen?

Ik bedoel: een of andere nitwitterige wannabee programmeur, die blijkbaar niet opgelet heeft in de klas, produceert per ongeluk een oneindige loop (meest voorkomende fout bij beginnende programmeurs), die dan vervolgens niet wordt afgevangen door de software (wat toch al een luxe is) en dan wordt die knaap ook nog eens bestempeld als geniaal :r

Dit is gewoon lame en onnodig paniek zaaien, zitten we al in Alarmfase 1? |:(

@MrD
"HTML and DHTML Reference Guide"
The FLAMEBAIT MODE element does not require a closing tag.
:P
[funflame]
Hee, goeie programmeur, waar is de afsluiting van je flamebatemode? }>
[/funflaim]
(oops, foutje :+)
Jezus, wat een bak nonsens! Met een endless loop breng ik zelfs een Cray op zijn knieŽn... Als meneer de student hier naam mee denkt te maken. Mijn cursisten konden dit al bij de 2de lesdag. Ok, meestal bedoelden ze het niet zo... |:(

Ergo: is het het waard om hier een enorme discussie over te voeren?
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>
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.
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?
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.

Op dit item kan niet meer gereageerd worden.



Apple iOS 10 Google Pixel Apple iPhone 7 Sony PlayStation VR AMD Radeon RX 480 4GB Battlefield 1 Google Android Nougat Watch Dogs 2

© 1998 - 2016 de Persgroep Online Services B.V. Tweakers vormt samen met o.a. Autotrack en Carsom.nl de Persgroep Online Services B.V. Hosting door True