
Prova de conceito de exploit para CVE-2022-23046, uma injeção SQL autenticada no PhpIPAM v1.4.4. Extrai informações do servidor, configurações SMTP, hashes de usuário e credenciais de banco de dados através do endpoint edit-bgp-mapping-search.php.
A descoberta original e o PoC manual são da Fluidattacks:
O PhpIPAM v1.4.4 permite que um usuário admin autenticado injete sentenças SQL no parâmetro "subnet" ao pesquisar uma sub-rede via app/admin/routing/edit-bgp-mapping-search.php.
Este PoC executa alguns SQLi fáceis para obter informações como:
Alguns deles são acessíveis através do backend, mas adicionei aqui apenas como uma forma fácil de obter todas as informações em uma única consulta. Sinta-se à vontade para adicionar/remover seus próprios payloads.
Para coisas mais avançadas, crie seus próprios payloads (em res.payloads), use 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
___ _ _ ____ ___ ___ ___ ___ ___ ___ ___ __ _
/ __)( \/ )( ___)___(__ \ / _ \(__ \ (__ \ ___(__ \ (__ ) / _ \ /. | / )
( (__ \ / )__)(___)/ _/( (_) )/ _/ / _/(___)/ _/ (_ \( (_) )(_ _)/ _ \
\___) \/ (____) (____)\___/(____)(____) (____)(___/ \___/ (_) \___/
Vulnerabilidade descoberta por Oscar Uribe
Autor do PoC: @javicarabantes
usage: CVE-2022-23046.py [-h] [-d] [-q] --url URL --user USER
optional arguments:
-h, --help mostra esta mensagem de ajuda e sai
-d Saída de debug
-q Não imprime o banner
--url URL URL do phpipam: https://ipamserver:8081/
--user USER Usuário admin
python CVE-2022-23046.py --url http://localhost:8888/ --user admin

Testei este PoC em diferentes versões do phpipam 1.4.3, 1.4.4 e 1.5, que funcionaram bem (não apenas < 1.4.5). Ao verificar o projeto phpipam no GitHub, vi que o commit 4b764b9cb236d1a4a06fc8ad9a93b306b3f5c04d também afetou a versão 1.5
Verifique se o CHANGELOG está acessível e contém o comentário sobre esta correção; caso contrário, o servidor phpipam pode estar vulnerável
curl -sk https://phpipamserver/misc/CHANGELOG | grep "edit-bgp-mapping-search.php"