TGViewer
Yandex for Security Yandex for Security @yandexforsecurity · 3.42K subscribers
Post #209 1.96K
⏩ Как безобидный Math.sqrt(0) чуть не сломал браузеры

Каким будет корень из нуля? Ответит даже школьник: 0. Но если задать этот вопрос JIT-компилятору Maglev внутри движка V8, то при определённых обстоятельствах он сначала скажет «ноль», а потом решит сэкономить на проверке безопасности и отдаст злоумышленнику доступ к памяти браузера 🤠

👨‍💻 Всем привет, на связи Павел Кузьмин, инженер по информационной безопасности в Яндексе. Я занимаюсь практической безопасностью Яндекс Браузера и проекта Chromium. Сегодня я расскажу про CVE-2025-9864 — уязвимость, которую я нашёл в движке V8.

Она проявлялась только при сочетании двух условий:

🟣 После полной сборки мусора (Major GC), которая освобождала память и меняла состояние контекста

🟣 При компиляции функции в Maglev, когда движок переключался на оптимизированное выполнение

В таком сценарии Math.sqrt(0) приводил к тому, что узел Float64Sqrt в IR-графе Maglev приобретал тип kHoleyFloat64. Это заставляло преобразовывать результат в HeapNumber (объект в куче), при этом не записав это преобразование в Remembered Sets.

Критическая ошибка возникала на следующем шаге. Компилятор видел, что исходно в ячейке хранился Smi, и пропускал write barrier — механизм, который сообщает сборщику мусора о новых ссылках на объекты в куче.

Как итог, если после этого сборка мусора запускалась вновь, HeapNumber удалялся как неиспользуемый, но указатель на него оставался активным. Получался классический use-after-free, который открывал путь к read/write-примитивам в куче V8.

🦾 Как починили?

Мы изменили тип узла Float64Sqrt с HoleyFloat64 на обычный Float64. Теперь ноль не превращался в HeapNumber, а корректно оставался Smi. Write barrier больше не пропускался, и цепочка разрушилась. Патч уложился в одну строку.

📖 А полную статью читайте на Хабре. В ней я рассказываю:

🟣 Как устроена архитектура V8
🟣 Почему write barrier — это не просто «галочка», а жизненно важный механизм
🟣 Как превратить use-after-free в read/write-примитивы и модифицировать объекты в памяти
🟣 Почему даже с такой уязвимостью взломать браузер через песочницу — та ещё задача

💕 Материал будет интересен тем, кто работает с безопасностью V8, компиляторами или просто любит разбирать нетривиальные баги.

Подписывайтесь:
💬 @Yandex4Security
📹 @YandexForSecurity
  • 🔥 15
More from @yandexforsecurity
  1. Sep 24, 2026▶️ Думаем о безопасности, пока AI думает за нас 30 сентября в Москве (и онлайн) пройдёт ми…
  2. Sep 21, 2026♒️Ботнет напрокат Когда мы пользуемся шерингом — берём самокат или пауэрбанк, — редко заду…
  3. Sep 17, 2026📺 OFFZONE 2026: записи наших докладов ♒️ «CTF в новой реальности: чему соревнования научи…
  4. Sep 14, 2026🔒 Гайд: как защитить VLM Меня зовут Полина Тикунова, я инженер по информационной безопасн…
  5. Sep 11, 2026🔒Как безопасно внедрять AI-агентов и не давать им ломать прод Недавно мы пообщались с Але…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →