Добро пожаловать
Быстрый отказ от ответственности: у нас нет точных знаний / мы не являемся экспертами во всем, что касается V8. Иногда мы будем делать предположения о коде, пытаясь полагаться на существующую документацию V8 или статьи членов их команды. Кроме того, эти знания следует использовать для повышения безопасности V8. Сообщайте о любых уязвимостях через программу ответственного раскрытия информации Google.
Добро пожаловать в первый пост этой серии, посвященный исследованию уязвимостей для Google V8! Мы ( Пранай Гарг и Джон Джонсон ) рады углубиться во все, что вам нужно, чтобы начать работу в этой области. Каждый из нас опубликует половину постов, так что обязательно загляните в оба наших блога!Мотивация
Наша цель — предоставить большему количеству людей возможность исследовать уязвимости в движке JavaScript Chromium. Часто изучение нового навыка сопровождается такими ощущениями, как «я не знаю, чего я не знаю». Ранее в этой области проводилось множество исследований (см. огромный список ссылок в конце), и может быть трудно понять, что читать (и, что еще хуже, то, что устарело!). В наших первых сообщениях мы попытаемся задокументировать то, что уже доступно, и дать краткое изложение текущего состояния поиска и эксплуатации ошибок V8. Заранее приносим извинения за то, что много «иди и прочитай это», но мы не хотим перефразировать некоторые из уже опубликованных замечательных статей. В наших будущих постах будет представлено больше оригинального материала, поскольку мы будем говорить об уязвимостях и их исправлениях. Мы также расскажем, как оставаться в курсе изменений в кодовой базе, когда наша информация устареет. Мы настоятельно рекомендуем просматривать ссылки, которые мы предоставляем на протяжении всей серии, и возвращаться на эту страницу всякий раз, когда вам нужна дополнительная информация по определенной теме.Мы считаем, что в этой области еще предстоит провести много исследований ( и Google тоже ). Несмотря на то, что команды разработчиков V8/Chromium приняли бесчисленное количество мер безопасности , все еще регулярно обнаруживаются уязвимые для использования ошибки. Мы надеемся объяснить процессы обнаружения и эксплуатации уязвимостей, а также кодовую базу таким образом, что это позволит большему количеству людей начать поиск ошибок и исследования безопасности памяти.
Если вы совершенно не знакомы с V8, см. этот краткий обзор, за исключением README:
V8 — это движок JavaScript с открытым исходным кодом от Google. V8 реализует ECMAScript, как указано в ECMA-262. V8 написан на C++ и используется в Google Chrome, браузере с открытым исходным кодом от Google. V8 может работать автономно или может быть встроен в любое приложение C++. Страница проекта V8: https://v8.dev/docs
Предыдущая работа
Нашей целью в этом исследовании будет создание как можно более полного руководства для понимания текущего состояния эксплуатации V8, а также его будущего! Однако это было бы совершенно невозможно без уже проделанной работы, давшей нам собственную отправную точку. Вот несколько ссылок, которые мы использовали для понимания. Вероятно, мы могли бы перечислить и другие, но эти оказали наибольшее влияние. Многие из тем, затронутых в этих статьях, будут освещены в будущих сообщениях, поэтому нет необходимости полностью понимать все в этом списке. Тем не менее, это будет отличное место, чтобы вернуться к нему, если будущие публикации не предоставят достаточно информации. Список, похожий на этот, блоге zon8, где вы можете найти еще больше ссылок.Начинаю со ссылок
Введение в Turbofan Джереми ФетивоАтакующий турбовентилятор Джереми Фетиво
Эксплойт v8 от Сакуры
Экскурсия по компилятору javascript для Chrome от Стивена Рёттгера.
Введение в Chrome V8 с точки зрения разработки эксплойтов Хавьера Хименеса
Глубокое погружение в V8 Диого Соуза
Learning-v8 от danbev
v8-начальное руководство от push0ebp
Введение в спекулятивную оптимизацию в V8 Бенедикта Мёрера
Внутреннее устройство Node.js V8: иллюстративный учебник Вардана Григоряна
Перспектива развития
Документы V8Промежуточное представление
Турбовентиляторный дизайн
Обзор компилятора TurboFan
Внутреннее устройство движка JavaScript, Матиас Байненс
Основы движка JavaScript Матиас Байненс
Исходный код для Binary Junrney javascript-движка V8 от Sakura
Экскурсия по V8: представление объектов от Джея Конрода
Понимание байт-кода V8, Франциска Хинкельманн
Документация по NodeJS V8
Изучение кода
Встраивание V8Руководство по коду C++
Структура памяти
Визуализация управления памятью в V8 Engine от Deepu K SasidharanУправление памятью, JS против C++ и понимание V8 Жасмин Занги
Написание плагинов V8 C++
Понимание того, как движок Chrome V8 переводит JavaScript в машинный код, Mayank TripathiВстраивание V8 в приложение C++, Дэвид Эрцег
C++: встраивание движка JavaScript V8, Дастин Опря
v8pp
Эксплуатация
Учебники по Chrome V8 от vngkv123Отладочная запись V8 от Sakura
Современные атаки на браузер Chrome Джереми Фетиво
Конкретные ошибки
Джереми Фетиво «Обход защиты от ошибок набора текста в Chrome».Окно возможностей от Exodus Intelligence
Исправление пробелов в Chrome от Exodus Intelligence
Похвальная речь для Chrome с пробелами Иштван Куруксай и Вигнеш С. Рао
Охота на Chromium, выпуск 1072171, Хавьер Хименес
Chrome V8 - -CVE-2019-5782 Кубок Tianfu Qihoo 360 S0rrymybad от aSiagaming
ПРОСТЫЕ ОШИБКИ С СЛОЖНЫМИ ЭКСПЛОЙТАМИ Сайед Фараз Абрар
Записи о проблемах CTF
Использование v8: *CTF 2019 oob-v8 Сайеда Фараза АбрараЭксплуатация TurboFan через устранение проверки границ, Ханьцин Чжао
Использование Chrome V8: Krautflare (35C3 CTF 2018) Джей Босамия
Использование ошибки ввода Math.expm1 в V8 по адресу 0x41414141 в ?? ()
Общая эксплуатация JIT-компилятора
Атака на движки JavaScript от SaeloИспользование логических ошибок в JavaScript JIT Engine от Saelo
Презентация Blackhat от Saelo
Серия JITsploitation от Saelo
Перевод Этой статьи