«Луч смерти» на WebGPU подвешивает Mac одним кликом
Разработчик под псевдонимом 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
Комментарии
Войдите, чтобы комментировать.