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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
POC-CVE-2026-102282 — CVE-2026-102282: आर्काइव निष्कर्षण के दौरान SUID/SGID संरक्षण के माध्यम से adm-zip LPE (0.6.1 में ठीक किया गया) | Kitploit
उपकरण/GitHubGitHub/ahmed-elmahgob/poc-cve-2026-102282
रक्षात्मक उपकरणविशेषाधिकार वृद्धिस्थैतिक विश्लेषणभेद्यता स्कैनरभेद्यता विश्लेषणशोषणआपूर्ति श्रृंखला सुरक्षालर्निंग और शिक्षाघटना प्रतिक्रिया

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

सभी देखें →

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

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

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

सभी उपकरण देखें →
GitHubahmed-elmahgob/poc-cve-2026-102282

POC-CVE-2026-102282

CVE-2026-102282: आर्काइव निष्कर्षण के दौरान SUID/SGID संरक्षण के माध्यम से adm-zip LPE (0.6.1 में ठीक किया गया)

रिपॉजिटरी देखें
20घं 48मि पहलेअभी तक समीक्षित नहीं
साझा करें

CVE-2026-102282 — निष्कर्षण के दौरान adm-zip setuid/setgid संरक्षण

CVE GHSA CVSS 3.1

npm पैकेज adm-zip में गलत अनुमति असाइनमेंट। जब keepOriginalPermission सक्षम होता है, तो निष्कर्षण अविश्वसनीय zip से setuid, setgid, और sticky बिट्स को बनाए रख सकता है, जिससे हमलावर-आपूर्ति किए गए आर्काइव से डिस्क पर root-स्वामित्व वाला setuid निष्पादन योग्य फ़ाइल रखी जा सकती है: स्थानीय विशेषाधिकार वृद्धि।

पैकेजadm-zip (npm)
इकोसिस्टमNode.js
CVECVE-2026-102282
एडवाइज़रीGHSA-j5f4-cc29-5x44
CWECWE-732 महत्वपूर्ण संसाधन के लिए गलत अनुमति असाइनमेंट
CVSS v3.17.1 High — CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
प्रभावित< 0.6.1 (अंतिम ज्ञात प्रभावित: <= 0.6.0)
ठीक किया गया0.6.1 (11 सितंबर 2026)
प्रकाशितमेंटेनर एडवाइज़री 11 सितंबर 2026; GitHub Advisory Database 29 सितंबर 2026

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

प्रभावित संस्करण

0.6.1 से पहले का प्रत्येक रिलीज़ प्रभावित है, जिसमें 0.6.0 भी शामिल है।

रेंजस्थिति
>= 0 और < 0.6.1प्रभावित
<= 0.6.0अंतिम ज्ञात प्रभावित
>= 0.6.1ठीक किया गया

यह बग केवल तब पहुँच योग्य है जब ये सभी सत्य हों:

  • कॉलर extractAllTo(), extractAllToAsync(), या extractEntryTo() को keepOriginalPermission=true पास करता है।
  • आर्काइव को निकालने वाली प्रक्रिया root के रूप में चलती है, या किसी अन्य उपयोगकर्ता के रूप में जिसकी पहचान उस खाते से अधिक विशेषाधिकार प्राप्त है जो बाद में निकाली गई फ़ाइल चलाता है।
  • आर्काइव अविश्वसनीय है (अपलोड, फ़ेच किया गया आर्टिफैक्ट, बिल्ड इनपुट, डिपेंडेंसी आर्काइव)।

डिफ़ॉल्ट निष्कर्षण फ़्लैग को बंद छोड़ता है और प्रभावित नहीं है। गैर-विशेषाधिकार प्राप्त उपयोगकर्ता के रूप में निष्कर्षण अभी भी मोड बिट्स लागू कर सकता है, लेकिन परिणामी फ़ाइल उसी उपयोगकर्ता के स्वामित्व में होती है, इसलिए यह विशेषाधिकार सीमा को पार नहीं करती।

बग

Unix मोड बिट्स zip एंट्री के बाहरी फ़ाइल विशेषताओं के उच्च 16 बिट्स में रहते हैं। adm-zip उन बिट्स को निकाले गए पथ पर कॉपी करता है।

स्थानभूमिका
headers/entryHeader.js — fileAttrबाहरी विशेषताओं से Unix मोड पढ़ता है
adm-zip.js — extractAllTo, extractAllToAsync, extractEntryToजब keepOriginalPermission true होता है तो fileAttr का उपयोग करता है
util/utils.js — फ़ाइल राइट हेल्पर के अंदर chmodSyncउस मोड को अभी बनाए गए पथ पर लागू करता है
adm-zip.js डायरेक्टरी निष्कर्षणनिकाली गई डायरेक्टरियों पर वही मोड लागू करता है

0.6.0 और उससे पहले में, fileAttr शिफ्ट की गई विशेषता को 0xfff (0o7777) से मास्क करता है। वह मास्क सामान्य rwx बिट्स के साथ तीन विशेष बिट्स को बनाए रखता है, और राइट पथ में कुछ भी chmod से पहले 0o7000 को साफ़ नहीं करता:

// headers/entryHeader.js (<= 0.6.0)
get fileAttr() {
    return (_attr || 0) >> 16 & 0xfff;
}
  • setuid (0o4000)
  • setgid (0o2000)
  • sticky (0o1000)

ट्रिगर

निष्कर्षण आर्काइव-नियंत्रित मोड को सीधे फ़ाइलसिस्टम पर पास करता है:

// adm-zip.js
const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;
filetools.writeFileTo(entryName, content, overwrite, fileAttr);

// util/utils.js
self.fs.chmodSync(path, attr || 0o666);

0.6.x कॉल सिग्नेचर पर ध्यान दें: extractAllTo(targetPath, overwrite, keepOriginalPermission) अपने तीसरे आर्ग्युमेंट के रूप में एक शाब्दिक बूलियन लेता है। { keepOriginalPermission: true } जैसा ऑप्शन्स ऑब्जेक्ट पास करना चुपचाप false में कोर्स हो जाता है, जो परीक्षण में भेद्यता को छुपाता है बजाय इसे प्रदर्शित करने के। इस रेपो में दोनों PoC स्क्रिप्ट सीधे true पास करती हैं।

फिक्स

फिक्स कमिट 6a63c339 (v0.6.1) है। fileAttr अब केवल नौ rwx बिट्स रखता है:

get fileAttr() {
    return (_attr || 0) >> 16 & 0o777;
}

यह कैसे काम करता है

  1. एक zip एंट्री अपनी बाहरी विशेषताओं में एक Unix मोड संग्रहीत करती है (मानक स्थान, 16 बिट्स शिफ्ट किया गया)।
  2. keepOriginalPermission=true के साथ, निष्कर्षण उस मोड को fileAttr के माध्यम से पढ़ता है और इसे chmod को पास करता है।
  3. चूंकि मास्क 0o7777 है, setuid, setgid, और sticky बच जाते हैं।
  4. यदि वह chmod root के रूप में चलता है, तो नई फ़ाइल root-स्वामित्व वाली होती है और setuid ले जा सकती है। बाद में कम विशेषाधिकार प्राप्त उपयोगकर्ता द्वारा चलाना फ़ाइल स्वामी के कोड को root के रूप में निष्पादित करता है।
  5. वही पथ डायरेक्टरियों पर लागू होता है। एक setgid डायरेक्टरी उसके बाद उसके अंदर बनाई गई फ़ाइलों के लिए समूह विरासत बनाए रखती है।

फ़्लैग को उसके डिफ़ॉल्ट पर छोड़ने पर, निष्कर्षण आर्काइव मोड लागू नहीं करता, और विशेष बिट्स नहीं लिखे जाते।

प्रूफ ऑफ कॉन्सेप्ट

सब कुछ poc/ के अंतर्गत है। बंडल किया गया पेलोड verify.c है, एक हानिरहित प्रोग्राम जो अपना वास्तविक और प्रभावी uid/gid प्रिंट करता है और, अपने डिफ़ॉल्ट मोड में, प्रभावी पहचान के साथ एक शेल खोलता है। यह क्रेडेंशियल संदर्भ प्रदर्शित करने से अधिक कुछ भी बनाए नहीं रखता, छुपाता नहीं, या नहीं करता।

फ़ाइलउद्देश्य
poc/verify.cहानिरहित setuid-वेरिफायर पेलोड
poc/build-archive.jsएक फ़ाइल को zip में पैक करता है जिसकी एंट्री मोड 0o4755 ले जाती है
poc/extract.jsएक प्रभावित ऐप की तरह keepOriginalPermission=true के साथ आर्काइव निकालता है
poc/run-demo.shएंड-टू-एंड रन: बिल्ड, root के रूप में निकालें, इनवोकिंग उपयोगकर्ता के रूप में चलाएँ

इसे चलाएँ

git clone <this repo> && cd CVE-2026-102282
npm install [email protected]        # the version under test
sudo apt install gcc             # if needed

./poc/run-demo.sh                # uses /var/tmp/cve-2026-102282-demo
./poc/run-demo.sh /path/to/out   # or a custom output directory

0.6.0 के विरुद्ध अपेक्षित आउटपुट:

== 3. extract as root with keepOriginalPermission ==
adm-zip version: 0.6.0
extracted /var/tmp/cve-2026-102282-demo/exploit.zip into /var/tmp/cve-2026-102282-demo/extracted
== 4. result on disk ==
4755 -rwsr-xr-x root:root
== 5. run as the unprivileged user (user) ==
uid=1000(user) ... 
[*] real  uid=1000 gid=1000
[*] eff.  uid=0 gid=0
[+] SUID active: effective uid 0 differs from real uid 1000

0.6.1 के विरुद्ध अपेक्षित आउटपुट:

== 4. result on disk ==
755 -rwxr-xr-x root:root
== 5. run as the unprivileged user (user) ==
uid=1000(user) ...
[*] real  uid=1000 gid=1000
[*] eff.  uid=1000 gid=1000
[-] effective and real ids match: no SUID context

डेमो के लिए चेतावनियाँ:

टूल डाउनलोड करें