
Надежный эксплойт удаленного выполнения кода для CVE-2026-25243, нацеленный на jemalloc Redis. Выполняет произвольные команды через одну специально сформированную команду RESTORE без DEBUG, /proc или ROP. Включает полное управление кучей и цепочку произвольного чтения для обхода ASLR.
Надёжное удалённое выполнение кода из одной специально сформированной команды RESTORE на jemalloc Redis —
без команды DEBUG, без /proc, без gdb, без ROP, при включённом ASLR. Выполняет команду атакующего от имени
процесса redis (root в стандартных образах).
🔒 Приватный репозиторий — только для авторизованных исследований безопасности / координированного раскрытия. Не распространяйте. Уязвимость исправлена в вышестоящих версиях (6.2.22 / 7.2.14 / 7.4.9 / 8.2.6 / 8.4.3 / 8.6.3, коммит
b9dde6fc); этот инструмент предназначен для пути до исправления.
Метод проверен от начала до конца — свежий запуск на эталонной платформе выполнил
system("id") → uid=0(root) (ASLR включён, ), подтверждено 2026-07-02.
В этой ранние этапы подтверждены (double-free, overlap,
arb-read → и восстановлены корректно), но финальная утечка —
через — и константа не перенеслась
чисто в groom из (повторяющиеся ). (WRITEUP.md §7) перед использованием; эталонный код запуска — это
разработческий шаблон /. Всё остальное проверено.
enable-debug-command nosystemblob_baseOFF_BLOBROBJexploit.pyblob_read_shortOFF_BLOBROBJ
для вашей точной сборки и последовательностиpwn.pypwnd.pyexploit.py — автономный PoC (только stdlib). Задайте смещения в словаре PROFILE вверху.WRITEUP.md — полный технический анализ (баг, groom, arb-read без DEBUG, детерминизм, завершение).python3 exploit.py --host <цель> --port 6379 --cmd 'id' --tries 40
# выполняет system("<cmd>") от имени процесса redis; проверьте внеполосно или используйте reverse-shell --cmd.
Проверено на Redis 8.6.2 (8a8f1a3bb), jemalloc-5.3.0, x86-64, glibc bookworm, ASLR=2,
enable-debug-command no. Для другой сборки перекалибруйте смещения PROFILE — см.
WRITEUP.md §7.
EVAL→clo → arb-read PIE (clo+33) → arb-read system (free@GOT) + blob_base (blob_robj)
→ разместить поддельный dictType{hashFunction=system} в 16-МБ blob → подменить h2->dict->type → HGET h2 "<cmd>"
== system("<cmd>").