Door Anoniem: Door Anoniem: waarom zou Avast update requests van o.a. firefox herschrijven waardoor firefox geen updates meer krijgt? Wat voor belang dient dit?
Wel Duh, malware scanning/threat protection , "web shield" enzo , is natuurlijk het belang .
Je moet niet lezen "Avast rewrite
firefox updates" , maar "Avast monitort programma's die allerlei dingen willen downloaden en installeren" => dus ook auto updates van bijvoorbeeld firefox .
Feitelijk dus een vals alarm van de scanner .
Dat is het niet eens, het is veel knulliger. Het herschrijven van requests gaat niet over de huidige crashes. Als je de link naar Ben Hearsum volgt in het artikel zie je dat die weer naar een bugreport doorverwijst van 8 jaar geleden:
https://bugzilla.mozilla.org/show_bug.cgi?id=1141513Daar wordt gemeld dat een
backend-component van Mozilla URLs die door Avast waren aangepast niet aankon, het ging dus niet mis in Firefox maar op een server van Mozilla. Uit de gegeven voorbeelden blijkt dat ze requests als deze binnenkregen:
http://balrog.mozilla.dev:9000/update/3/Firefox/33.0a1/20120222174716/WINNT_x86-msvc/en-US/nightly/default/default/default/update.xml?force=1%3Favast=1
Het door Avast toegevoegde deel heb ik vet gemaakt. "%3F" is de URL-codering voor een vraagteken. Dus eigenlijk staat achter "update.xml" "?force=1?avast=1". Twee keer een vraagteken. Een vraagteken in een URL geeft aan waar het query-deel begint, met parameters waar de server iets mee doet. Avast heeft dus een eigen query-parameter toegevoegd, en het lijkt erop dat dat gedaan is door "?avast=1" achter de URL te plakken zonder te kijken of er al een vraagteken in staat. Dan had namelijk "&avast=1" moeten worden toegevoegd. Dat dat vraagteken door "%3F" is vervangen zal komen omdat de resulterende URL vervolgens door code is gehaald die zorgt dat URLs netjes gecodeerd zijn. Die code zal alleen het eerste vraagteken als het begin van de query-parameters hebben gezien en het tweede vraagteken als onderdeel van een query-parameter, en dan is de vervanging terecht.
Het resultaat was dat de door Mozilla zelf gebruikte query-parameter "force" niet meer de waarde "1" had maar de waarde "1?avast=1". Een kale "1" is een geldig getal, met de toevoeging is het dat niet, en daar liep de code op een server van Mozilla op stuk, met als gevolg dat de download van de upgrade ook niet meer door ging voor Avast-gebruikers. Merk op dat dit niet een crash van het hele serverproces zal zijn geweest maar alleen van zo'n request-afhandeling.
Maar waarom zit zoiets er überhaupt in? Aan wie of wat wil Avast meedelen dat Avast de URL-controle heeft uitgevoerd? Het is onzinnig om dat aan elke server op de hele wereld mee te delen, en ook ongewenst, want er zijn ongetwijfeld servers die onverwachte URL-parameters afhandelen als een signaal dat er geknoeid is met de request — dit kan al problemen geven als de toevoeging op de juiste manier wordt gecodeerd. Ik had de gedachte dat het misschien bedoeld is als signaal aan een netwerkcomponent die URLs controleert dat de controle al op het werkstation is uitgevoerd, maar dat zou ook al een bijzonder knullige opzet zijn, want dan kan malware simpelweg "avast=1" toevoegen om controles te omzeilen. Dat lijkt niet erg aannemelijk.
Het lijkt me veel waarschijnlijker dat dit code is die een ontwikkelaar heeft toegevoegd om mee te testen, met een testserver waarop dan gezien kan worden dat de URL op de client door de controle is gehaald. Als die testserver zelf verder geen URL-parameters gebruikte verklaart dat waarom "?avast=1" in die context probleemloos achter de URL kon worden geplakt. De fout die dan gemaakt is is dat deze testcode is uitgerold naar alle Avast-gebruikers. Zoiets mag natuurlijk nooit gebeuren.
Het antwoord op de vraag welk belang dit dient is dus mogelijk het belang van een ontwikkelaar die iets toe heeft gevoegd om een bepaalde test te kunnen doen — en vervolgens verzuimd heeft om dat weer te verwijderen of om het zo te coderen dat het nooit in release-versies actief kan zijn (veel compilers ondersteunen conditionele compilatie: debug-builds kunnen toevoegingen bevatten die in release-builds ontbreken).