Deutschland United States United Kingdom
ContentLion - Open Source CMS

Erste Sicherheitslücke

Erste Sicherheitslücke

Die Jungs aus Developertalk sind spitze! :thumbup:
Neben vielen produktiven Beiträgen wurde nun auch die 1. Sicherheitslücke gefunden. ^^

Zitat von asdf93:

Zitat

Ja naja, also mal abgesehen davon, dass meines Erachtens nach der Coding-Stil relativ dreckig ist, hat es nicht lange gedauert, bis die erste Sicherheitslücke gefunden war. Ich hab mal ein bisschen recherchiert und mir angeguckt, wie man die Lücke ausnutzen kann und werd hier auch mal erläutern, wie ich vorgegangen bin.

Ich hab mir zunächst mal das Contentlion-CMS geladen und bei mir installiert (Nebenbei: Der Ajax-Check für die Datenbankverbindung freezed kurzzeitig meinen ganzen Browser pro Request. Ich würde hier eher mit einem Timeout arbeiten, als nach jedem Keypress die Verbindung zu checken (Hat bei mir übrigens den Hintergrund, dass mein System zum Auflösen von localhost bis zu einer Sekunde braucht, daher dauert jeder Check auf localhost eben diese Zeit und blockiert dann die Eingabe)).

Die Sicherheitslücke entsteht aber eigentlich dadurch, dass ihr User-Input ungecheckt in include() lasst. Zwar wird der Pfad fest auf das Dateisystem und eine Dateiendung gebunden, ersteres bedeutet aber, ich kann mich frei auf dem Dateisystem bewegen und letzeres lässt sich umgehen (Zumindest für PHP-Versionen unter 5.3.4 (Es sei denn, sie haben 'nen Hotfix), die allerdings vermutlich noch verbreitet sind; Stichwort Poison-Null-Byte). Die Version ist aber im Grunde egal, prinzipiell gilt nämlich: Niemals User-Input unvalidiert ausführen. Ihr checkt zwar, ob die Datei existiert - das ist mir als Angreifer aber prinzipiell egal, weil ich ja genau hier ansetze (Eine Datei aus deinem Dateisystem einbinden).

Jetzt muss ich also nur noch eine Datei auf dein Dateisystem kriegen. Das kann schwer werden, muss aber nicht. Ich hab mir dafür einfach mal deine Seite my-world-forum.de genommen, auf dem ja auch das CMS läuft. Aha, hier läuft also auch ein Vbulletin nur eine Directory weiter. (An der Stelle hab ich mich dann nicht weiter bemüht, weil sichs ab hier nicht mehr lohnt; da ich euch ja nicht schaden will, muss ich mir nicht die Mühe machen und einen Account anlegen etc.). Aber: Ich könnte wetten, dass man über euer Vbulletin auch Dateien hochladen kann. Dazu einfach 'ne schnieke Grafik mit PHP in den Exif-Daten hochladen und schon geht die Party los. (Ich weiß nicht ganz genau, wo Vbulletin Attachments speichert. Garantiert liegen sie aber nicht weit entfernt und das lässt sich auch einfach herausfinden). Also nur noch cl/index.php?include=../community/blahblah/meinedatei%00 und damit kann ich direkt mal Datenbankinformationen auslesen (Inkl. User und Passwort), den global genutzten Salt aus den settings und alle User-Infos inkl. Passwörter (die zwar md5-gehasht sind, aber ich hab ja jetzt eh den Salt). Außerdem kann ich mir noch einen neuen User anlegen oder alle Passwörter auf ein beliebiges setzen oder im schlimmsten Fall sogar Shellzugriff kriegen, sofern shell_exec() gehen würde.

Selbiges wäre übrigens auch mit contentlion.de selbst möglich gewesen, allerdings steht ja der BurningBoard-Server woanders - ansonsten hier das selbe Spiel (Wobei Burning Board das sogar noch einfacher macht), die infizierte Grafik übers Forum aufs Dateisystem bringen und dann einbinden.

Mit gepatchten PHP-Versionen bzw. alles nach 5.3.4 wäre der Null-Byte-Exploit nicht mehr möglich. Das würde den Angriff zwar etwas schwerer machen, aber trotzdem nicht unmöglich; Ich muss meine Datei auf dem Dateisystem nur irgendwie auf die .htm-Endung bringen.


Ich hoffe, dass ich euch damit weiterhelfen konnte.

Quelle: http://www.developertalk.de/contentlion-…-f87/#post10247

In der Theorie hat er Recht.
"Ich muss meine Datei auf dem Dateisystem nur irgendwie auf die .htm-Endung bringen."
Das ist das Problem dabei ;-) Bei mir funktioniert das mit dem include so nicht (weil wir mit absoluten Pfad arbeiten).

Wir müssten am Anfang checken, ob er mit .. auslesen kann. Kann jemand von euch das nachstellen?

Aber gut, dass auch fremde auf die Sicherheit schauen. Das wollen wir ja mit der Beta erreichen.

Wie komme ich eigentlich an den Quell Code? Also mit aus checken^^

Den Quellcode hast du auch so.^^
1. Bei deiner Installation.
2. Bei SVN: http://code.contentlion.de/listing.php?r…703ca3be466fa8a
Hier hast du den kompletten Quellcode übersichtlich. ;)

Ich probiers mal. ;)
Ansonsten können wir ja solche Zeichen wie "." oder ".." rausfiltern.
Vllt. sogar "/", damit man sich nicht frei bewegen kann. ^^

oder wir nehmen das mit dem .htm einfach raus und schauen was passiert ^^

Nächste Sicherheitslücke

Mir ist gerade noch eine Sicherheitslücke aufgefallen:
Diesmal im SkinController.
Eine $_GET-Variable wird ohne Überprüfung übernommen.
Code:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  public static function getCurrentDesktopSkinName(){
    if(isset($_GET['blank']) && $_GET['blank'] == "true"){
      $res =  "blank";
    }
    else{
      if((isset($_GET['skin']) || isset($_GET['save_settings'])) && User::Current()->isAdmin()){
        if(isset($_GET['save_settings']) && User::Current()->isAdmin()){
          $res "backenddefault";
        }
        else{
          $res $_GET['skin'];//Das ist die betroffene Zeile
        }
      }
      else {
        $res self::getSkinName(SkinController::getCurrentSkinId());
      }
    }
    if($res){
      return $res;
    }
    else{
      return "default";
    }  
  }

Wenn du das mal ausgeführt hast, wirst du sehen, dass nichts schlimmes dabei passiert ;-)

http://www.contentlion.de/?skin=default

Ähnliche Themen