
Detaillierte CVE-2024-55187-Beratung mit Proof-of-Concept für eine Remote-Code-Ausführung-Sicherheitslücke in phpIpam, die Pfadvergiftung und PHAR-Datei-Upload ausnutzt, um eine Serverübernahme zu erreichen.
Sensible administrative Parameter werden nicht ausreichend bereinigt, sodass ein Angreifer Pfade zu Systembinärdateien manipulieren kann.
Der Angreifer kann dann gefährliche CSV-Dateien hochladen, die als PHAR-Archive behandelt werden können, die Shell-Metazeichen enthalten. Diese werden dann durch den exec()-Aufruf von PHP ausgewertet, was zu einer Remote Code Execution führt.
Kritisch - 9,1 - CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H
In der Datei functions/classes/class.Scan.php sehen wir die folgende Codestruktur:

Der erste Parameter des exec()-Aufrufs hängt direkt vom Parameter $ping_path ab, der im Admin-Einstellungs-Panel frei geändert werden kann:

Die einzige Bedingung, die der Angreifer erfüllen muss, ist, dass die Funktion ping_verify_path nicht false zurückgibt. Die Definition dieser Methode lautet wie folgt:

Diese Methode verlässt sich ausschließlich auf die PHP-native Funktion file_exists(). Diese Funktion kann ZIP-Dateien unterstützen (die Erweiterung .zip ist nicht notwendig) und in die Struktur des ZIP-Archivs eintauchen. Zum Beispiel:

Wenn ein Angreifer also ein gültiges ZIP/PHAR-Archiv auf dem Server hochladen kann, das eine Datei enthält, deren Name Shell-Metazeichen enthält, umgeht er die file_exists()-Prüfung und diese Metazeichen werden durch den exec()-Aufruf ausgewertet.
Ein authentifizierter Angreifer kann Dateien über die Funktion „XLS / CSV-Subnetzimport“ hochladen:

Die genannte Datei muss keine gültige CSV-Datei sein. Wenn der Import fehlschlägt, wird die Datei nicht vom Server gelöscht. Wir wissen auch, wo sie gespeichert wird, aus dem Skript import-verify.php:

Der Angreifer kennt nun alle Voraussetzungen, um einen Remote Code Execution-Angriff durchzuführen:
Das bösartige Archiv kann wie folgt erstellt werden:
