De glemte sårbarheder i websites

En analyse af mere end 100.000 websites viser, at udviklere ofte glemmer at opdatere JavaScript-biblioteker. Problemet bliver ikke mindre af, at tracking- og reklamekode også anvender JavaScript-biblioteker, som udviklerne er uvidende om.

I dag anvender stort set alle websites JavaScript-kode, som ikke er skrevet af website-udviklerne selv. Populære frameworks og biblioteker som eksempelvis Angular og JQuery gør det nemmere for udviklerne at bygge moderne websites relativt smertefrit. Desværre glemmer udviklere og/eller administratorer ofte at opdatere JavaScript-bibliotekerne, når der kommer nye versioner.


Undersøgte 133.000 websites
Det er forskere fra Northeastern University, som har gennemgået mere end 133.000 websites for at finde ud af, om de anvendte tredjeparts-biblioteker er opdateret til nyeste og – forhåbentlig - mindst sårbare version. Det er ofte ikke tilfældet.
37 procent af de gennemgåede websites anvendte mindst ét bibliotek med en kendt sårbarhed. Det er ikke mindst JavaScript-verdenens måde at registrere og håndtere sårbarheder på, som er et problem:
”Måske er det mest opsigtsvækkende ved vores undersøgelse, at den understreger, hvor kompleks, uorganiseret og ad hoc JavaScript biblioteks-økosystemet er, når det gælder sikkerhed,” skriver forskerne i ”Thou Shalt Not Depend on Me: Analysing the Use of Outdated JavaScript Libraries on the Web”.
De peger konkret på, at der ikke findes nogen pålidelig database med oversigt over alle sårbarheder i JavaScript-bibliotekerne, udviklerne af programbibliotekerne anvender sjældent mailinglister til at kommunikere om sårbarheder, og det er ligeledes sjældent, at sårbarheder nævnes i release notes.

Inden forskerne gik i gang, var de derfor nødt til at sammenstykke deres egen oversigt over sårbarheder i JavaScript-biblioteker. De udarbejdede et katalog over de forskellige versioner af de 72 mest populære biblioteker og gik i gang med at indsamle information om sårbarheder.
Det var svært:
”Uheldigvis er der ingen central database over sårbarheder i JavaScript-bibliotekerne. I stedet gik vi i gang med manuelt at indsamle sårbarhedsinformation fra Open Source Vulnerability Database (OSVDB), National Vulnerability Database (NVD), public bug trackers, GitHub-kommentarer, blogs og sårbarheder registreret af Retire.js,” lyder det i forskningsnotatet.
Det lykkedes forskerne at foretage en systematisk dokumentation af sårbarheder for 11 af de 72  JavaScript-biblioteker. Det betyder ikke, at de resterende 61 ikke indeholder sårbarheder; det var blot umuligt for forskerne at finde informationen.

Store kodeændringer nødvendige
Forskernes analyse viste, at der ofte kan være år til forskel på den nyeste version af et JavaScript-bibliotek og versionen, som anvendes på et website. Det gør opgradering besværlig:

”Vores data tegner et dystert billede, når det gælder afhjælpning af problemet. Det er kun en meget lille del af potentielt sårbare sites … som kan få fjernet sårbarheder via patch-level updates, altså en opdatering via mindst betydende versionsnummer, eksempelvis fra 1.2.3 til 1.2.4, hvilket normalt vil være bagudkompatibelt. Størstedelen af sites kræver installering af mindst et bibliotek med større versionsspring, så kodeændringer kan være nødvendige grundet inkompatibilitet,” lyder det fra forskerne.

Selvom udviklere af og administratorer for et website gør sig store anstrengelser for at opdatere alle biblioteker, som anvendes af websitets kode, vil det ofte ikke være nok. Rapportens forfattere peger på, at annoncemoduler, diverse trackers og forskellige widgets tit anvender biblioteker, uden at sitets vedligeholder er klar over det.

”Selvom webudviklerne sørger for at opdatere biblioteker, som de anvender i deres egen kode, så kan uddaterede versioner stadig blive inkluderet i koden via dårligt vedligeholdt tredjeparts-kode.”

Prosabladet fik fat på en af rapportens forfattere, Tobias Lauinger, for at høre, hvordan deres rapport var blevet modtaget af it-verdenen. Forskernes resultater var jo ikke just betryggende, så rapporten måtte have skabt en del røre.
Men nej.

– Ud over lidt nyhedsdækning har der ikke været den store respons fra it-industrien, lyder det fra Tobias Lauinger i en mail til Prosabladet.
Han beretter dog, at forskerne har bidraget med kode til open source-projektet HTTP Archive, så HTTP Archives web-crawlere nu også indsamler information om JavaScript-biblioteker, der anvendes på websites. Derudover arbejdes der på at inkludere koden i Googles Lighthouse, der aftester websites for performance og best practice. Lauinger kan ikke sige, hvornår Lighthouse er klar til at identificere sårbare biblioteker.

Problemet er værre
Der er dog også andre, som har reageret på forskernes rapport. Folkene bag Snyk, der specialiserer sig i at finde, fikse og monitorere sårbarheder i blandt andet JavaScript-relaterede teknologier, valgte at lave deres egen undersøgelse. Snyk undersøgte kun 5.000 websites, men det var 5.000 websites, som webanalyse-firmaet Alexa betegner som de mest besøgte i verden. Hele 76,6 procent af dem anvendte mindst et sårbart JavaScript-bibliotek. Snyk fremhæver ligesom forskerne, at der ikke er en mirakelkur.  
”Der er ikke en enkelt ting, som vil fikse problemet. Vi har brug for en kombination af øget bevidsthed om problemet, bedre værktøjer og en simplere måde at vedligeholde JavaScript-afhængigheder på front-end'en,” lyder det fra Snyk om deres undersøgelse.
Vel, nu er du og Prosabladets øvrige læsere blevet gjort opmærksomme på problemet, hvis det ikke allerede var tilfældet.

Faktaboks – Sårbare og usupporterede libraries

Det mest udbredte JavaScript-bibliotek er JQuery, der gør det nemt at tilgå og manipulere en webside ved hjælp af DOM (Document Object Model), ligesom JQuery tilbyder faciliteter til at håndtere events som callbacks.
36.7 procent af inkluderede JQuery-biblioteker var versioner med sårbarheder.
40,1 procent af inkluderede versioner af et andet populært bibliotek, Angular, havde sårbarheder.
I den tunge ende finder vi Handlebars-biblioteket, hvor hele 86.6 procent af inkluderede versioner havde sårbarheder, hvilket overgås af YUI-biblioteket med 87,3 procent.

Forskerne betegner det som ”alarmerende”, at mange websites stadig anvender biblioteker som YUI  og SWFObject, selvom de ikke længere vedligeholdes.

Faktaboks – Oplysninger om sårbarheder

Der er ingen silver bullit til at løse problemet med sårbare JavaScript-biblioteker på websites, men værktøjer som Retire.js scanner websites og afslører nogle JavaScript-biblioteker med sårbarheder:
http://retirejs.github.io/retire.js/
Snyk vedligeholder en sårbarhedsdatabase med oplysninger om sårbarheder i blandt andet JavaScript-biblioteker:https://snyk.io/vuln/