Intressant incident
Oskar Sjöberg delade en intressant write-up om en incident i Facebook-gruppen Kodapor. Jag frågade om lov och fick delge den här nedan:
—
En kort liten write-up om en incident i en av våra kunders miljöer som jag hoppas kan vecka diskussion och/eller eftertanke.
Det hela börjar med att en av våra utvecklare reagerar på ett Javaskriptfel i sin utvecklingsmiljö i en äldre webbläsare som vi väldigt sällan testar. Skriptfelet ser ut att ha att göra något med att hämta GPS-positionering att göra. WTF. Vi har väl inte någon sådan funktion i vår kodbas?
Efter lite letande kommer vi fram till att koden dessutom ligger i en <script>-tag, i en SVG fil och är inte i närheten av att likna något av koden vi skriver. Kryptiska identifierare, koden ser ut att försöka injicera sig själv in i andra dokument. Oj. Den koden ligger i produktion också. Gulp. Något är väldigt skumt.
Har vi blivit utsatta för en attack? Snabbt konstaterar vi att SVG filen i fråga har koden i sig incheckad i vårt repo sedan en tid tillbaka. Hur i h…? Någon minut senare kan vi konstatera att en utvecklare har checkat in filen med scriptet i. Snabbt söka igenom alla SVG filer med <script>-taggar. Skönt, det var bara den. Snabbt ut med ny version av systemet med fixad SVG-fil.
Hur fick vi in den koden i en av våra SVG-filer? Jag söker på nätet och hittar en issue på Github som klagar på att verktyget SVGOMG (online verktyg för optimering av SVG filer) smittar ner SVG med liknande kod som den vi har sett. SVGOMG används mycket riktigt av utvecklaren. Issuen är dock stängd med en kommentar om att problemet ligger i ExpressVPN.
Jag frågar utvecklaren om han har ExpressVPN installerat, det har han. Det verkar alltså som att VPN tjänsten ExpressVPNs Chrome-extension patchar DOMen med Javascriptkod som injicerar sig själv. Eftersom SVGOMG jobbar helt i browsern med att optimera SVG så injiceras även koden i det optimerade resultatet.
Jag kan inte enkelt avgöra om ExpressVPNs beteende är ondskefullt eller om det är en defekt i deras mjukvara. För mig är det här verkligen en ögonöppnare över hur relativt lätt det går att smyga in obetrodd kod i någon annans produktionsmiljö via något så oskyldigt som lite grafik.
Jag bifogar länken till koden som i mångt och mycket liknar koden som dök upp i vår produktionsmiljö.