Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/hunt-benito/the-token-was-a-row-number-cve-2026-67602-phpipam-rest-api-authentication-bypass
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingAuthenticationAPI Security
GitHubhunt-benito/the-token-was-a-row-number-cve-2026-67602-phpipam-rest-api-authentication-bypass

the-token-was-a-row-number-cve-2026-67602-phpipam-rest-api-authentication-bypass

CVE-2026-67602에 대한 익스플로잇 및 PoC로, 객체 캐시 키 충돌을 통한 phpIPAM REST API의 인증 우회를 다루며, 로직 수준 PoC와 원격 익스플로잇 스크립트를 포함합니다.

저장소 보기
0일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-67602 — phpIPAM < 1.8.2 REST API 인증 우회

phpIPAM REST API의 인증되지 않은 인증 우회로, 객체 캐시 키 충돌로 인해 발생합니다. API 앱의 app_id를 확인하는 동안 캐시된 데이터베이스 행이, 제공된 토큰이 행의 숫자 id와 일치할 때 후속 app_code(토큰) 검사를 충족시킵니다. 앱의 실제 비밀번호는 절대 비교되지 않습니다.

  • CVE: CVE-2026-67602
  • CVSS 4.0: 9.3 치명적 (AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N)
  • CWE: CWE-706 (잘못 해석된 이름 또는 참조 사용)
  • 영향 범위: phpIPAM 1.8.2 미만, app_security = ssl_code인 REST API 앱
  • 수정 버전: phpIPAM 1.8.2 (커밋 d29728f)
  • 권고: https://www.vulncheck.com/advisories/phpipam-authentication-bypass-via-rest-api-object-cache

목차

파일용도
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 헤더로 테스트할 수 있습니다.

1. 로직 수준 PoC (서버 불필요)

root@kitploit:~
$ 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 — 토큰 거부됨

2. Docker에서 라이브 재현

root@kitploit:~
$ docker compose up -d
  1. http://localhost:8080/로 이동하여 설치 프로그램(http://localhost:8080/install/)을 진행하고, 자동 데이터베이스 설치를 선택한 후 MySQL 사용자 root / 비밀번호 phpipamAdminRoot를 입력합니다.
  2. 로그인(admin / admin) 후, 프롬프트가 표시되면 새 관리자 비밀번호를 설정합니다.
  3. API 앱 생성: Administration → API Management → 새로 만들기:
    • 애플리케이션 이름(app_id): client
    • 보안: API code (ssl_code)
    • 권한: 읽기 / 쓰기 / 삭제
  4. phpIPAM이 무작위 32자 애플리케이션 코드를 생성합니다. 복사할 필요는 없습니다 — 이것이 바로 이 버그의 핵심입니다.

익스플로잇 실행(--xfp 플래그는 실습 환경이 신뢰하는 X-Forwarded-Proto를 통해 HTTPS 검사를 충족시킵니다):

root@kitploit:~
$ 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 데이터 덤프 중...

3. 탐지 및 조치

  • phpIPAM 1.8.2 이상으로 업그레이드하세요. 수정 사항은 객체 캐시를 값뿐만 아니라 검색 열로도 키 지정합니다(커밋 d29728f).
  • 업그레이드할 때까지 ssl_code API 앱을 비활성화하거나 재구성하세요(다른 보안 모드는 이 캐시 충돌의 영향을 받지 않습니다).
  • 웹 서버 / phpIPAM 로그에서 순수 숫자 phpipam-token 헤더를 포함한 /api/<app_id>/... 요청을 확인하세요 — 정상 토큰은 32자 무작위 문자열이므로 숫자 토큰은 신뢰도 높은 IOC입니다.
  • 노출이 의심되는 경우 API 애플리케이션 코드와 사용자 토큰을 교체하세요.

책임 있는 사용

이 저장소는 방어적 연구 및 승인된 침투 테스트 전용입니다. 소유하거나 테스트에 대한 서면 허가를 받은 시스템에 대해서만 실행하세요.

도구 다운로드