Данный проект содержит серию демонстрационных JavaScript PoC-эксплойтов, иллюстрирующих потенциальные техники out-of-bounds (OOB) доступа к памяти, перезаписи и исполнения shellcode, ориентированных на ARM64 (Apple Silicon M1).
Проект ориентирован на исследовательские цели и предназначен исключительно для изучения поведения JavaScript-движка WebKit (JSC).
├── index.html # Основной PoC-эксплойт с JIT Spray и ARM64 shellcode
├── nindex.html # Упрощённая версия эксплойта
├── test.html # Тестовый сценарий с OOB чтением и записью
├── poc/
│ ├── PoC1.js # Минимальный OOB-пример с попыткой переписать память
│ └── poc.js # Расширенный OOB-пример с большим числом записей
└── create_wasm.js # Генератор бинарного файла exploit.wasm
Этот HTML-файл запускает следующий пайплайн:
- Выделяет буферы
ArrayBuffer
и создаётFloat64Array
/Uint8Array
. - Использует уязвимую функцию
vuln(index, value)
для OOB-записи. - Делает JIT-спрей функций с вшитым ARM64 shellcode.
- Перезаписывает участки памяти и проверяет исполнение shellcode.
Встроенный в JIT shellcode может быть адаптирован под вызов execve, либо использован как индикатор исполнения.
Простой тест переполнения массива с попыткой изменить данные в Float64Array
и проверить успешность записи.
Упрощённый вариант основного эксплойта без JIT, но с демонстрацией записи в память и попыткой RCE через вызов функции.
Содержит два PoC-файла:
Минимальный пример:
- Создание массива oob и буфера.
- Использование
vuln()
для записи за пределами массива. - Попытка модификации памяти и проверка успешности.
Расширенный пример:
- Массив oob заполняется значениями с
index >= 4
. - Выполняется обход всех новых значений и попытка модификации
Float64Array
.
Скрипт, создающий минимальный WASM-бинарник exploit.wasm
, содержащий одну экспортируемую функцию run, которая вызывает alert
.
# Генерация .wasm
node create_wasm.js
- WebKit/JavaScriptCore движок
- Node.js (для генерации .wasm)
Исследователь: inorisojiu
Для вопросов, багов и предложений - создавайте issue или pull request.