2018-03-27

Mars 2018 - OWASP 2017 - A4 - XML External Entities (XXE)

OWASP står för The Open Web Application Security Project och är en öppen global organisation som arbetar för säkerhet i mjukvaruapplikationer, främst webbapplikationer.


Den första nya på OWASP Top Ten 2017 är A4 - XML External Entities (XXE)

Tjänster som hanterar XML kan vara sårbara för den här attacken. Typiskt webbservices.
Attacken utförs genom att manipulerad XML skickas till tjänsten. Det som manipulerats eller lagts till är i taggen <!ENTITY> och de referenser som får skrivas där. Tjänsten läser in XML-dokumentet, ersätter referensen med innehållet för referensen och returnerar svaret.
Det finns även en del andra attacker som kommer av samma sårbarhet. Bland annat Billion Laughs Attack som är en överbelastningsattack där minnet tar slut.

Ett exempel från den här sidan där de förklarar väldigt bra:
https://www.acunetix.com/blog/articles/xml-external-entity-xxe-vulnerabilities/
Request:
POST http://example.com/xml HTTP/1.1

<!DOCTYPE foo [
  <!ELEMENT foo ANY>
  <!ENTITY bar SYSTEM
  "http://192.168.0.1/secret.txt">
]>
<foo>
  &bar;
</foo>

Response:
HTTP/1.0 200 OK

Hello, I'm a file on the local network (behind the firewall)

Det som händer är att referensen http://192.168.0.1/secret.txt kopplas till variablen bar. När XML:en parsas så hämtats innehållet i filen secret.txt som ligger på servern och ersätter variabeln bar i XML:en och returneras till användaren.

För att förhindra det här så byt om möjligt till tjänster som använder JSON istället för XML. Fler och fler tjänster använder det så vi är redan på väg. Om det inte går att byta till JSON så se till att använda SOAP 1.2 eller högre. Slå av External Entity processing (se Cheat sheet nedan). Validera innehållet.

OWASP har tagit fram ett Cheat Sheet för hur man åtgärdar sårbarheten. Det är här:
XML External Entity (XXE) Prevention Cheat Sheet


System och tjänster som uppdaterats sedan förra uppdateringen:
  • s02
  • s03
    • Alla konton är flyttade till s04.
    • Server avstängd och raderad.
  • s04
    • Uppsättningen är klar och allt fungerar perfekt! Det mest intressanta är att den kör PHP7 och alla konton, mail, ftp etc. har TLS-kryptering (https).
    • Alla konton från s03 är flyttade hit.
    • Testperiod innan externa kunder flyttas.
    • Webmin 1.880