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

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

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

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

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

Категории

Все категории
Loading categories
cve-2025-5915 — Эксплойт, подтверждающий концепцию, для чтения за пределами кучи в фильтре RAR v4 библиотеки libarchive (CVE-2025-5915) с воспроизведением в ASan, энкодером и демонстрацией на устройстве iOS 18.5. | Kitploit
Инструменты/GitHubGitHub/r3n3r0/cve-2025-5915
Безопасность iOSАнализ уязвимостейЭксплуатацияОбратная инженерияСтатьи и ИсследованияЭксплуатация Бинарных Файлов
GitHubr3n3r0/cve-2025-5915

cve-2025-5915

Эксплойт, подтверждающий концепцию, для чтения за пределами кучи в фильтре RAR v4 библиотеки libarchive (CVE-2025-5915) с воспроизведением в ASan, энкодером и демонстрацией на устройстве iOS 18.5.

Репозиторий
21 дней назадЕщё не проверено

Популярное

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

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

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

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

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

CVE-2025-5915 — переполнение кучи при чтении в RAR v4 в libarchive (с доказательством на устройстве iOS 18.5)

Контролируемое чтение за пределами кучи / раскрытие памяти в пути фильтра RAR v4 в libarchive (copy_from_lzss_window). Этот репозиторий воспроизводит проблему полностью: локальный ASan, написанный с нуля RAR v4-энкодер, который регулирует размер утечки, и демонстрация на устройстве под iOS 18.5 с использованием собственной системной libarchive.2.dylib телефона.

  • Ошибка: parse_filter() читает blocklength фильтра (байт-код RAR-VM, до 32 бит), а copy_from_lzss_window() выполняет memcpy этого количества байт из окна LZSS, не проверяя, что оно помещается в dictionary_size. Размер окна равен rar_fls(unp_size) << 1 — атакующий контролирует оба значения. Укажите unp_size=16 → 32-байтное окно, задайте blocklength=0x3C000 → чтение ~240 КБ соседней кучи в декомпрессированный вывод.
  • Исправление: коммит a612bf62 (libarchive 3.8.0) добавляет if (blocklength > rar->dictionary_size) return 0; (плюс исправление переполнения (wrap-around) в copy_from_lzss_window).
  • iOS: в 18.5 (22F76) поставляется libarchive 3.7.4, и она уязвима; в 18.6 (22G86) есть бэкпорт. Обе сообщают 3.7.4 — строка версии не позволяет их различить (см. статью §7–8).

Полная статья: writeup/cve-2025-5915.en.md (итальянская версия: writeup/cve-2025-5915.it.md).

Один memcpy — два CVE

Одно и то же непроверяемое blocklength задаёт длину одного memcpy с двумя сторонами:

В iOS 18.5 ограничение на стороне записи (26256) уже бэкпортировано, а защита на стороне чтения (5915) не бэкпортирована — поэтому на iOS это только чтение (analysis/two_cve_unification.md).

Структура репозитория

root@kitploit:~
writeup/       full technical article (EN + IT)
poc/
  build_bigleak.py     shrink unp_size in a real archive + repair header CRC-16
  build_encoder.py     from-scratch RAR v4 encoder; dials blocklength (leak size)
  plant.c              macOS realloc interpose to plant a secret after the window
  *.rar                proof-of-concept archives (see poc/README.md)
  RARLeak/             on-device iOS harness (Xcode project)
analysis/      ASan logs, iOS patch-diff (disassembly), notes, isolated guard patch
device-proof/  output of the on-device run (iPhone, iOS 18.5)

Воспроизведение (локально, macOS/Linux)

root@kitploit:~
git clone https://github.com/libarchive/libarchive && cd libarchive && git checkout v3.7.4
CC=clang CFLAGS="-fsanitize=address -g -O1" LDFLAGS="-fsanitize=address" \
  cmake -B build-asan -DENABLE_TEST=OFF . && cmake --build build-asan --target bsdtar
ASAN_OPTIONS=detect_leaks=0 build-asan/bin/bsdtar -xOf poc/enc_0x40000.rar >/dev/null
#  -> AddressSanitizer: heap-buffer-overflow  READ of size 262112

Создайте свой: python3 poc/build_encoder.py out.rar <unp_size> <blocklength> [e8e9].

Воспроизведение (на устройстве, iOS ≤ 18.5)

poc/RARLeak — это iOS-приложение, которое заполняет свою кучу, вызывает dlopen для системной libarchive, подаёт на вход специально сформированный RAR и подсчитывает, сколько собственной кучи возвращается в вывод. Укажите свою команду подписи и соберите:

root@kitploit:~
cd poc/RARLeak && ./build.sh <device-udid>        # set DEVELOPMENT_TEAM first (see build.sh)

Ожидается: файл с объявленным размером 16 байт даёт ~196 КБ вывода, из них ~150 КБ — внедрённый маркер LK5915!!, прочитанный за пределами границ. Результат записывается в Documents/ приложения.

Примечание о бинарниках iOS

libarchive.2.dylib от Apple (18.5 / 18.6) не включена в репозиторий (проприетарная). Включены только её SHA-1 (analysis/SHA1SUMS.ios-dylibs) и соответствующие фрагменты дизассемблирования. Извлеките собственную версию с помощью ipsw dyld extract <dyld_shared_cache> libarchive.2.dylib.

Авторы и этика

N-day, исправлено в libarchive 3.8.0 / iOS 18.6. Всё протестировано на собственном оборудовании автора. Ошибка сообщена JJLeo (issue #2565 в libarchive), исследование — Yifan Zhang (PLL, Пекинский университет), исправление — Tobias Stoeckmann и Tim Kientzle. Исправление CVE-2024-26256 — Tobias Stoeckmann. Только для исследований и защитного использования.

Скачать инструмент
сторонаотсутствующая проверка границCVEисправление
источник (окно LZSS)blocklength ≤ dictionary_sizeCVE-2025-5915 (чтение)a612bf62, v3.8.0
приёмник (vm->memory, 0x40000)blocklength ≤ VM_MEMORY_SIZECVE-2024-26256 (запись)b7b0c7c4, v3.7.5