För några månader sedan så upptäckte jag en sårbarhet i Episerver. Sårbarheten återfinnes i Episervers bloggmodul och är en så kallad blind (XXE) XML External Entity-sårbarhet. Jag rapporterade givetvis sårbarheten till företaget Episerver, och den finns åtgärdad från och med Episerver 7-patch 5.
Episerver används av mängder av företag och myndigheter såsom:
- Försvarets materielverk (FMV)
- Swedavia
- Interflora
- Vinnova
- Smittskyddsinstitutet
- Domstolsverket
- Trafikverket
- Myndigheten för samhällsskydd och beredskap, MSB
Buggen heter internt hos Episerver #128556 och jag har fått CVE registrerad som CVE-2017-17762.
Jag har även utvecklat en proof-of-concept kod i Python vid namn episploit.py som finns att hämta hem på Github Gist. Förutom att hämta hem en extern XML DTD som PoC:en jag har länkat, så går det även att detektera om en installation är sårbar genom att titta på DNS-förfrågningar ungefär som Burp Suite Collaborator gör. Att göra externa DNS-förfrågningar är effektivt eftersom många blockerar utgående TCP-anslutningar från sina webbservrar.
Det kan även vara möjligt att köra kod (Remote Code Execution, RCE) via en XXE. Se exempelvis följande blogginlägg där man använder sig av C#.
Och skärmdump som påvisar när en fil exfiltreras från en webbserver med hjälp av episploit:
Det är även möjligt att kontrollera huruvida en installation av Episerver är sårbar genom fingerprinting. Besök en sökväg som ser ut enligt följande:
- https://www.domännamn.se/util/xmlrpc/Handler.ashx
Och där finner du längst ner på sidan vilken version som används. Jag är inte helt hundra på hur versionsummer ska utläsas men tror att alla som har version EPiServer.Blog 7.0.586 EPiServer.XmlRpc 7.0.586 samt lägre versioner är sårbara.
Åtgärder
Som en snabb åtgärd kan man blockera samtliga anrop till allt som börjar med en sökväg som är /util/xmlrpc. Även bör man blockera utgående trafik från webbservern och även DNS-förfrågningar.
Uppgradera till en senare version av Episerver och tyvärr så verkar det inte hjälpa att slå av bloggmodulen för denna bugg.
Tyvärr så listar inte Episerver säkerhetsuppdateringar på sin hemsida.
Tidslinje för offentliggörande (disclosure timeline)
- 2017-12-12 Jag kontaktar CERT-SE som hänvisar till Episervers säkerhetschef
- 2017-12-13 Får kontakt med Episervers säkerhetschef som hänvisar vidare inom organisationen
- 2017-12-19 CVE-nummer reserveras
- 2017-12-21 Episervers VP R&D bekräftar sårbarheten samt meddelar att buggen heter internt #128556 och åtgärdad från och med Episerver 7-patch 5
- 2018-08-28 Info går ut till Kryptera.se-mailling-listan
- 2018-08-29 Detta inlägg publiceras