Skip to content

og-mason/JavaScript-Memory-Exploitation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JavaScript Memory Exploitation PoC (Apple M1 ARM64)

Данный проект содержит серию демонстрационных 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

Основной эксплойт (index.html)

Этот HTML-файл запускает следующий пайплайн:

  • Выделяет буферы ArrayBuffer и создаёт Float64Array/Uint8Array.
  • Использует уязвимую функцию vuln(index, value) для OOB-записи.
  • Делает JIT-спрей функций с вшитым ARM64 shellcode.
  • Перезаписывает участки памяти и проверяет исполнение shellcode.

Shellcode (ARM64)

Встроенный в JIT shellcode может быть адаптирован под вызов execve, либо использован как индикатор исполнения.

Дополнительные PoC-файлы

Простой тест переполнения массива с попыткой изменить данные в Float64Array и проверить успешность записи.

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

Папка poc/

Содержит два PoC-файла:

Минимальный пример:

  • Создание массива oob и буфера.
  • Использование vuln() для записи за пределами массива.
  • Попытка модификации памяти и проверка успешности.

Расширенный пример:

  • Массив oob заполняется значениями с index >= 4.
  • Выполняется обход всех новых значений и попытка модификации Float64Array.

WebAssembly

Скрипт, создающий минимальный WASM-бинарник exploit.wasm, содержащий одну экспортируемую функцию run, которая вызывает alert.

# Генерация .wasm
node create_wasm.js

Требования

  • WebKit/JavaScriptCore движок
  • Node.js (для генерации .wasm)

Контакт

Исследователь: inorisojiu

Для вопросов, багов и предложений - создавайте issue или pull request.