Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
POC-CVE-2026-102282 — CVE-2026-102282: adm-zip LPE durch SUID/SGID-Erhaltung bei der Archivextraktion (behoben in 0.6.1) | Kitploit
Tools/GitHubGitHub/ahmed-elmahgob/poc-cve-2026-102282
DefensivwerkzeugePrivilege EscalationStatische AnalyseSchwachstellenscannerSchwachstellenanalyseExploitationLieferkettensicherheitLernen & BildungIncident Response

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
GitHubahmed-elmahgob/poc-cve-2026-102282

POC-CVE-2026-102282

CVE-2026-102282: adm-zip LPE durch SUID/SGID-Erhaltung bei der Archivextraktion (behoben in 0.6.1)

Repository anzeigen
vor 20h 9mNoch nicht geprüft
Teilen

CVE-2026-102282 — adm-zip setuid/setgid-Erhaltung während der Extraktion

CVE GHSA CVSS 3.1

Fehlerhafte Rechtezuweisung im npm-Paket adm-zip. Die Extraktion kann setuid-, setgid- und sticky-Bits aus einem nicht vertrauenswürdigen Zip beibehalten, wenn keepOriginalPermission aktiviert ist, wodurch eine root-eigene setuid-ausführbare Datei aus einem vom Angreifer gelieferten Archiv auf der Festplatte platziert werden kann: lokale Rechteausweitung.

Paketadm-zip (npm)
ÖkosystemNode.js
CVECVE-2026-102282
AdvisoryGHSA-j5f4-cc29-5x44
CWECWE-732 Incorrect Permission Assignment for Critical Resource
CVSS v3.17.1 High — CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
Betroffen< 0.6.1 (letzte bekannte betroffene Version: <= 0.6.0)
Behoben0.6.1 (11. September 2026)
VeröffentlichtMaintainer-Advisory 11. September 2026; GitHub Advisory Database 29. September 2026

Dieses Repository enthält den Write-up, einen Dependency-Versionsprüfer, einen sicheren Verhaltenstest und einen eigenständigen Proof of Concept, der um eine harmlose Verifier-Binärdatei herum aufgebaut ist, die lediglich ihren Credential-Kontext ausgibt.

Betroffene Versionen

Jede Version vor 0.6.1 ist betroffen, einschließlich 0.6.0.

BereichStatus
>= 0 und < 0.6.1Betroffen
<= 0.6.0Letzte bekannte betroffene Version
>= 0.6.1Behoben

Der Fehler ist nur erreichbar, wenn alle folgenden Bedingungen zutreffen:

  • Der Aufrufer übergibt keepOriginalPermission=true an extractAllTo(), extractAllToAsync() oder extractEntryTo().
  • Der Prozess, der das Archiv extrahiert, läuft als root oder als ein anderer Benutzer, dessen Identität privilegierter ist als das Konto, das die extrahierte Datei später ausführt.
  • Das Archiv ist nicht vertrauenswürdig (Upload, abgerufenes Artefakt, Build-Eingabe, Dependency-Archiv).

Die Standardextraktion lässt das Flag deaktiviert und ist nicht betroffen. Die Extraktion als unprivilegierter Benutzer kann die Mode-Bits zwar weiterhin anwenden, aber die resultierende Datei gehört demselben Benutzer, sodass keine Privilegiengrenze überschritten wird.

Der Fehler

Unix-Mode-Bits befinden sich in den oberen 16 Bits der externen Dateiattribute eines Zip-Eintrags. adm-zip kopiert diese Bits auf den extrahierten Pfad.

OrtRolle
headers/entryHeader.js — fileAttrLiest den Unix-Mode aus den externen Attributen
adm-zip.js — extractAllTo, extractAllToAsync, extractEntryToVerwendet fileAttr, wenn keepOriginalPermission true ist
util/utils.js — chmodSync im Dateischreib-HelferWendet diesen Mode auf den gerade erstellten Pfad an
adm-zip.js VerzeichnisextraktionWendet denselben Mode auf extrahierte Verzeichnisse an

In 0.6.0 und früher maskiert fileAttr das verschobene Attribut mit 0xfff (0o7777). Diese Maske behält die drei speziellen Bits zusammen mit den üblichen rwx- Bits bei, und nichts im Schreibpfad löscht 0o7000 vor dem chmod:

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

Der Auslöser

Die Extraktion übergibt den archivgesteuerten Mode direkt an das Dateisystem:

// 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);

Beachten Sie die Aufrufsignatur von 0.6.x: extractAllTo(targetPath, overwrite, keepOriginalPermission) nimmt ein literales Boolean als drittes Argument. Das Übergeben eines Optionsobjekts wie { keepOriginalPermission: true } wird stillschweigend zu false konvertiert, was die Schwachstelle in einem Test maskiert, anstatt sie zu demonstrieren. Beide PoC-Skripte in diesem Repo übergeben direkt true.

Der Fix

Der Fix ist Commit 6a63c339 (v0.6.1). fileAttr behält jetzt nur noch die neun rwx-Bits:

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

Wie es funktioniert

  1. Ein Zip-Eintrag speichert einen Unix-Mode in seinen externen Attributen (der Standardort, um 16 Bits verschoben).
  2. Mit keepOriginalPermission=true liest die Extraktion diesen Mode über fileAttr und übergibt ihn an chmod.
  3. Da die Maske 0o7777 ist, überleben setuid, setgid und sticky.
  4. Wenn dieses chmod als root läuft, gehört die neue Datei root und kann setuid tragen. Ein späterer Lauf durch einen weniger privilegierten Benutzer führt den Code des Dateieigentümers als root aus.
  5. Derselbe Pfad gilt für Verzeichnisse. Ein setgid-Verzeichnis behält die Gruppenvererbung für danach darin erstellte Dateien bei.

Wenn das Flag auf seinem Standardwert belassen wird, wendet die Extraktion den Archiv-Mode nicht an, und die speziellen Bits werden nicht geschrieben.

Proof of Concept

Alles befindet sich unter poc/. Die mitgelieferte Payload ist verify.c, ein harmloses Programm, das seine reale und effektive uid/gid ausgibt und in seinem Standardmodus eine Shell mit der effektiven Identität öffnet. Es persistiert nichts, versteckt nichts und tut nichts über die Demonstration des Credential-Kontexts hinaus.

DateiZweck
poc/verify.cHarmlose setuid-Verifier-Payload
poc/build-archive.jsPackt eine Datei in ein Zip, dessen Eintrag den Mode 0o4755 trägt
poc/extract.jsExtrahiert ein Archiv mit keepOriginalPermission=true, wie es eine betroffene App tun würde
poc/run-demo.shEnd-to-End-Lauf: bauen, als root extrahieren, als aufrufender Benutzer ausführen

Ausführen

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

Erwartete Ausgabe gegen 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

Erwartete Ausgabe gegen 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
Tool herunterladen