Kirby CMS Exploit – CSRF – Fix‘ es selbst.

Geschrieben von kingalca am 23. September 2015
Dieser Post ist über ein Jahr alt. Eventuell haben sich die Details mittlerweile geändert, oder Links sind nicht mehr verfügbar.

Kirby CMS Exploit – CSRF – Fix‘ es selbst.

Moin,

ich werd jetzt hier gar nicht groß beschreiben um was es geht, sondern mich recht kurz halten. Kirby CMS ist ein text-basiertes CMS, welches ne coole und einfache Schnittstelle beinhaltet und auch ansonsten echt cool ist, weil es eben schnell und klein ist.

Heute habe ich auf Exploit-DB einen Exploit für eben jenes CMS gesehen. Die Credits hierfür gehen an http://legalhackers.com/.

Jetzt möchte ich aber ein bisschen auf die verwundbare Datei eingehen und ein wenig über White- statt Blacklistings sprechen.

 

Jetzt sieht man hier, dass folgendes passiert: Wenn $dateiname auf $extension (txt, php oder html) endet, dann throwe einen Error und sag: „Nein, das geht nicht“. Das Problem hier ist aber, dass alle Webserver dieser Welt auch auf die gängigen Dateieindungen php4 und php5 horchen, d.h. ich lade meinen PayLoad einfach als *.php5-Datei hoch und geniesse meinen Exploit am fremden Server. Nun ist es ja so, dass der Angreifer noch eine Lücke braucht um das auszunutzen, da gehe ich aber nicht weiter drauf ein. Fakt ist: Kirby gestattet es PHP5-Files hochzuladen obwohl PHP eigentlich verboten ist.

 

Mein ehemaliger Arbeitskollege hatte mir damals schon immer gesagt: wenn du was insertest oder hochlädst, mach Whitelisting, kein Blacklisting. Beim Blacklisten machst du Fehler. Beim Whitelisten ist die Fehleroption ausgeschlossen. Und Recht hat er. Die Funktion sollte daher eigentlich prüfen, ob die Fileextension zu einem Array mit akzeptierten Dateinamen passt und falls nicht, throwen. Hier passiert das nicht. Hier wird geprüft ob die Dateiendung auf A, B, oder C endet, ohne Wildcards. Während B verboten ist, ist B2 akzeptabel. Das ist ein Problem.

 

Es gibt seit August ein entsprechendes Update für das Exploit. Einfach Updaten und die Lücke ist geschlossen. 🙂