
Avis détaillé sur CVE-2024-55187 avec preuve de concept pour une vulnérabilité d'exécution de code à distance dans phpIpam, exploitant l'empoisonnement de chemin et le téléchargement de fichier PHAR pour parvenir à une prise de contrôle du serveur.
Les paramètres administratifs sensibles ne sont pas suffisamment nettoyés, ce qui permet à un attaquant d'empoisonner les chemins vers les binaires système.
L'attaquant peut ensuite télécharger des fichiers CSV dangereux qui peuvent être traités comme des archives PHAR contenant des métacaractères de shell qui seront évalués par l'appel exec() de PHP, entraînant une exécution de code à distance.
Critique – 9.1 – CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H
Dans le fichier functions/classes/class.Scan.php, on peut voir la structure de code suivante :

Le premier paramètre de l'appel exec() dépend directement du paramètre $ping_path, qui peut être librement modifié depuis le panneau des paramètres d'administration :

La seule condition que l'attaquant doit remplir est de faire en sorte que la fonction ping_verify_path ne retourne pas false. La définition de cette méthode est la suivante :

Cette méthode repose uniquement sur la fonction native PHP file_exists(). Cette fonction particulière peut supporter le passage de fichiers ZIP (l'extension .zip n'est pas nécessaire) et plonger dans la structure de l'archive ZIP. Par exemple :

Par conséquent, si un attaquant peut télécharger une archive ZIP/PHAR valide sur le serveur, qui contient un fichier dont le nom contient des métacaractères de shell, cela contournera la vérification file_exists() et ces métacaractères seront évalués par l'appel exec().
Un attaquant authentifié peut télécharger des fichiers via la fonctionnalité « Import de sous-réseau XLS / CSV » :

Ce fichier n'a pas besoin d'être un fichier CSV valide. Si l'import échoue, le fichier ne sera pas supprimé du serveur. Nous savons également où il sera stocké grâce au script import-verify.php :

L'attaquant connaît désormais tous les prérequis pour exécuter une attaque d'exécution de code à distance :
L'archive malveillante peut être créée comme suit :
