🔍 Contexte
Publié sur GitHub (x86byte/adm-zip_LPE-PoC), cet article est un advisory de sécurité accompagné d’un PoC fonctionnel pour la vulnérabilité CVE-2026-102282 affectant adm-zip, une bibliothèque JavaScript pure pour Node.js comptant plus de 20 millions de téléchargements hebdomadaires sur npm.
🐛 Description de la vulnérabilité
La bibliothèque adm-zip supporte une option keepOriginalPermission permettant de restaurer les permissions POSIX enregistrées dans une archive ZIP. Dans les versions >= 0.5.10 et <= 0.6.0, le masque binaire utilisé dans headers/entryHeader.js était 0xfff (12 bits), préservant non seulement les permissions standard (0o777) mais aussi les bits spéciaux :
- SUID (
S_ISUID,0o4000) - SGID (
S_ISGID,0o2000) - Sticky bit (
S_ISVTX,0o1000)
Ces bits étaient ensuite appliqués directement au système de fichiers via fs.chmodSync() sans aucune validation.
⚙️ Mécanisme d’exploitation
Lorsqu’une application extrait une archive ZIP non fiable avec keepOriginalPermission = true en s’exécutant avec des privilèges élevés (root), adm-zip applique les bits SUID/SGID spécifiés par l’attaquant, créant un exécutable SUID appartenant à root (-rwsr-xr-x root:root). Un utilisateur local non privilégié peut alors exécuter ce binaire pour obtenir immédiatement les privilèges root.
🛠️ Correction
Dans la version 0.6.1, le masque a été restreint à 0o777 (511 décimal), éliminant tous les bits de privilèges spéciaux :
📊 Caractéristiques techniques
- CVE : CVE-2026-102282
- GHSA : GHSA-679w-jf3m-wh39
- CVSS 3.1 : 7.1 (High) —
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N - CWE : CWE-732 (Incorrect Permission Assignment for Critical Resource)
- Versions vulnérables : adm-zip >= 0.5.10, <= 0.6.0
- Version corrigée : adm-zip >= 0.6.1
- Condition requise : extraction avec privilèges root +
keepOriginalPermission = true+ filesystem sansnosuid
🎯 Contextes d’impact
- Pipelines CI/CD avec runners root
- Workflows de build de conteneurs
- Outils de déploiement cloud
- Frameworks d’installation de plugins
- Environnements d’hébergement partagé
📄 Type d’article
Il s’agit d’une analyse technique accompagnée d’un PoC public, publiée dans le cadre d’une divulgation coordonnée. Le but principal est de documenter la vulnérabilité, démontrer son exploitabilité et référencer le correctif disponible.
🧠 TTPs et IOCs détectés
TTP
- T1574 — Hijack Execution Flow (Privilege Escalation)
- T1548.001 — Abuse Elevation Control Mechanism: Setuid and Setgid (Privilege Escalation)
- T1195.002 — Supply Chain Compromise: Compromise Software Supply Chain (Initial Access)
IOC
- URLs :
https://github.com/x86byte/adm-zip_LPE-PoC— URLhaus - CVEs :
CVE-2026-102282— NVD · CIRCL - Fichiers :
exploit.zip - Fichiers :
Verify.cpp - Fichiers :
Verify - Fichiers :
BuildZip.js - Fichiers :
Extract.js - Chemins :
/var/local/poc_out/tools/helper - Chemins :
/var/tmp/poc_out/tools/helper
⚠️ À propos de ces IOC — ils sont extraits automatiquement de l’article original le 4 octobre 2026 et n’ont pas fait l’objet d’une vérification externe. Un indicateur peut avoir été réattribué depuis : une IP de C2 peut redevenir un service légitime, un domaine sinkholé peut changer de propriétaire. Aucune garantie d’exactitude ni d’actualité — contrôlez leur validité avant tout usage opérationnel, en particulier avant de les injecter dans une blocklist ou un SIEM.
🟡 Indice de vérification factuelle : 40/100 (moyenne)
- ⬜ github.com — source non référencée (0pts)
- ✅ 5199 chars — texte complet (fulltext extrait) (15pts)
- ✅ 9 IOCs (IPs/domaines/CVEs) (10pts)
- ⬜ 0/1 IOCs confirmés externellement (0pts)
- ✅ 3 TTPs MITRE identifiées (15pts)
- ⬜ date RSS ou approximée (0pts)
- ⬜ aucun acteur de menace nommé (0pts)
- ⬜ 0/1 CVE(s) confirmée(s) (0pts)
🔗 Source originale : https://github.com/x86byte/adm-zip_LPE-PoC