RyotaK hat kürzlich eine Sicherheitslücke bei cdnjs von Cloudflare entdeckt. Damit hätte er auf vielen Seiten Schadcode einschleusen können.
Der japanische Hacker RyotaK hat kürzlich eine Remote Code Execution, kurz RCE, bei cdnjs von Cloudflare entdeckt. Ein Angreifer hätte damit beliebiges JavaScript in bis zu 12,7 % der Webseiten im Internet einschleusen können.
Was ist cdnjs beziehungsweise ein CDN?
Bei cdnjs handelt es sich um ein sogenanntes Content Delivery Network (CDN) für JavaScript und CSS, welches von Cloudflare bereitgestellt wird. Ein CDN erlaubt es Dateien, anstatt auf der eigenen Webseite, zentral beim CDN-Anbieter zu hinterlegen. Nutzen nun mehrere Webseiten die gleichen Ressourcen, müssen diese vom Browser nicht mehr auf jeder einzelnen Webseite heruntergeladen werden.
Auswirkungen und Gegenmaßnahmen
Dies bedeutet, dass ein Angreifer, der die Dateien auf dem CDN austauschen könnte, sehr einfach Schadsoftware auf Webseiten weltweit unterbringen kann. Um das zu verhindern, kann man mithilfe von Subresource Integrity (SRI) einen Hash beim Einbinden in die eigene Webseite mitgeben. Das erlaubt dem Browser zu verifizieren, dass die Ressource nicht von einem Dritten verändert wurde.
Es wird daher immer empfohlen die SRI beim Einbinden von CDNs zu verwenden. Am besten gleicht man den Hash der CDN-Ressourcen mit dem der Originale ab, um sicherzustellen, dass es sich um ein unverändertes Original handelt.
Die oben genannte Lücke wäre also nur bei den Webseiten ausnutzbar gewesen, die auf SRI verzichtet hatten oder nach Manipulation eine CDN-Ressource ohne Abgleich des Hashs verwenden.
Path Traversal Lücke in Autoupdate-Modul von cdnjs
Path Traversal oder auch genannt Directory Traversal erlaubt es auf Dateien zuzugreifen, die eigentlich nicht von der betroffenen Anwendung zugreifbar sein sollten. Filtert die Anwendung beispielsweise die Eingabe „../“ nicht, kann ein Angreifer auf beliebige übergeordnete Verzeichnisse zugreifen.
Genau eine solche Lücke hat RyotaK im Autoupdate-Modul von cdnjs auf GitHub gefunden. Dies hätte ihm erlaubt, ein beliebiges Script hochzuladen und im Kontext von cdnjs auszuführen.
Weitere Lücke mit Git-Symlinks entdeckt
Als RyotaK sich Gedanken machte, wie er die Path Traversal Lücke aufbereiten sollte, um sie bei HackerOne einzureichen, kam er auf eine andere Idee. Cdnjs erlaubt auch automatische Updates für CDN-Ressourcen, die man über Git einspielt.
Dort konnte er beim Durchstöbern des Quellcodes erkennen, dass das Script nicht auf die in Git erlaubten Symlinks prüft. Dies erlaubt es eine Datei nur transparent zu verlinken. Das ermöglicht den Zugriff auf eine Datei unter /home/user/text.txt, die eigentlich unter /mnt/hdd1/geheim.txt liegt. Damit ist wiederum ein Directory Traversal möglich.
Aus Versehen API-Schlüssel veröffentlicht
RyotaK wollte eigentlich einen Symlink auf /proc/self/maps setzen. Aus Versehen verlinkte er aber auf /proc/self/environ und veröffentlichte so unabsichtlich die API-Keys GITHUB_REPO_API_KEY und WORKERS_KV_API_TOKEN. Damit hätte ein Angreifer vollen Zugriff auf die GitHub Repositorys von cdnjs.
Um den möglichen Schaden zu begrenzen, wollte er das Problem umgehend bei GitHub melden, damit die API-Schlüssel schnell gesperrt werden können. Doch scheinbar wurde das IT-Security-Team von GitHub schon vorher darauf aufmerksam. Man meldete den Vorfall umgehend an Cloudflare, die die API-Keys scheinbar auch umgehend gesperrt hatten.
Bug Bountys sind lohnenswert
Da Cloudflare über HackerOne ein Bug Bounty Programm anbietet, wollte RyotaK die Sicherheitslücke den Regeln entsprechend aufbereiten. Durch den oben beschrieben Vorfall wurde das IT-Security-Team von GitHub auf die Lücke aufmerksam. Ob er am Ende ein Dankeschön von Cloudflare erhalten hat, ist unbekannt.
Es ist trotzdem immer lohnenswert bei entdeckten Sicherheitslücken einmal zu prüfen, ob das „Opfer“ ein solches Programm offeriert, wie es viele große Firmen wie Samsung, Facebook, Microsoft oder Sony auch tun.
Tarnkappe.info