«Луч смерти» на WebGPU подвешивает Mac одним кликом

· Технологии
Исследователь показал, как небольшой шейдер WebGPU на недоверенном сайте способен заморозить графику Mac до принудительной перезагрузки. Apple признала проблему, но отказалась считать её уязвимостью.

cover.svg

Разработчик под псевдонимом Auberon López (they/them) опубликовал описание приёма, который они назвали «лучом смерти» (Deathray). Речь идёт о крошечном шейдере на WebGPU, который любой недоверенный сайт способен запустить прямо в браузере. Достаточно жертве кликнуть по ссылке — и графическая подсистема Mac зависает настолько, что рабочий стол становится непригоден до перезагрузки.

Как это устроено

WebGPU — сравнительно новая технология, пришедшая на смену WebGL и позволяющая сайтам передавать шейдеры прямо на видеокарту устройства. В «луче смерти» вычислительный шейдер запускает бесконечный цикл: переменная счётчика не увеличивается, поэтому копирование вектора в буфере не прекращается никогда. Вершинный шейдер зависит от того же буфера и потому тоже застревает.

Проблема не остаётся в пределах вкладки. Зависание перекидывается на другие процессы, которым нужен GPU, — в первую очередь на WindowServer. Тот перестаёт отвечать, причём проявляется это по-разному: иногда курсор ещё двигается, иногда появляется «пляжный мячик», а порой часть экрана заливается пурпурным мусором.

Любопытно, что сама машина при этом остаётся работоспособной — по SSH к ней можно подключиться без проблем. Но за WindowServer следит сторожевой таймер: если тот молчит слишком долго, срабатывает kernel panic и компьютер уходит в перезагрузку.

Только на Mac

Автор воспроизвёл эффект в Chrome, Firefox и Safari на устройствах с чипами Apple серии M под управлением Tahoe. На других операционных системах трюк лишь подвешивает вкладку — стоит её закрыть, и всё возвращается в норму. López предполагает, что дело в архитектуре M-чипов: ядро ОС не может напрямую вытеснять задачи с GPU, вся логика вынесена в прошивку сопроцессора ASC.

Это не первый подобный случай. В 2023 году исследователь Рон Масас из Imperva собрал аналогичный шейдер ShadyShader на WebGL; Apple выпустила CVE-2023-40441 со средним рейтингом 6.5 и добавила проверку на «убегающие» циклы. В WebGPU эта проверка, похоже, слабее — бесконечный цикл здесь распознать элементарно. Но, как замечает автор, ловля бесконечных циклов упирается в проблему остановки; надёжнее принудительно вытеснять зависшие шейдеры, что и делают все прочие ОС.

Спор о том, что считать уязвимостью

Автор нашёл проблему случайно, изучая WebGPU в Recurse Center. О находке сообщили Apple 27 июля 2026 года; компания быстро воспроизвела баг и обещала исправить. Но 26 августа передумала, заявив, что «не видит здесь последствий для безопасности», ведь итог — лишь сбой, зависание или восстановимая потеря данных.

López признаёт: формально Apple права, и знакомые специалисты по безопасности с ней согласны. Однако обычные пользователи, по наблюдению автора, воспринимают это иначе — вера в то, что клик по ссылке не навредит компьютеру, оказывается подорвана. Порог входа предельно низкий, так что автор видит в приёме «злую версию рикролла» и надеется, что Apple всё же исправит проблему — только не отключением WebGPU по умолчанию.


Источник: Lobsters

Комментарии

Войдите, чтобы комментировать.

  • Пока нет комментариев.