WebGPU-эксплойт «Deathray» вешает Mac одним кликом, а Apple не считает это уязвимостью

Автор блога Оберон Лопес 10 сентября 2026 года описал баг, который назвал «Deathray»: небольшой шейдер WebGPU с преднамеренным бесконечным циклом вешает графическую подсистему Mac настолько, что рабочий стол становится неотзывчивым и в итоге происходит принудительная перезагрузка. Чтобы это произошло, жертве достаточно кликнуть по ссылке на сайте, который запускает шейдер, установка программ не нужна. Баг воспроизводится в Chrome, Firefox и Safari, но только на macOS: автор тестировал его на MacBook с чипами Apple M-серии под управлением macOS Tahoe и говорит, что было бы интересно узнать, затрагивает ли это другие модели Mac. На других операционных системах тот же код лишь подвешивает вкладку браузера, после её закрытия компьютер работает нормально.

Механизм: вычислительный шейдер (compute shader) выполняет цикл без инкремента счётчика, условие цикла никогда не становится ложным, и раз за разом копирует один и тот же вектор в общий буфер. Вершинный шейдер (vertex shader) должен читать данные из этого же буфера, но не может продвинуться дальше, потому что буфер всё время занят вычислительным шейдером. Перегрузка расползается на другие процессы, которым нужен GPU, в первую очередь на системный процесс WindowServer, отвечающий за отрисовку рабочего стола: он тоже перестаёт отвечать. Внешне это выглядит по-разному, иногда курсор мыши всё ещё двигается, иногда нет, иногда появляется цветной «мячик» ожидания, а иногда часть экрана покрывают пурпурные графические помехи, и почему именно так происходит, автор сказать не может. Сама машина при этом остаётся доступна по SSH, но за WindowServer следит механизм Watchdog: когда тот не отвечает достаточно долго, Watchdog вызывает панику ядра, и компьютер перезагружается. Тому, кто не хочет ждать Watchdog, автор советует зажать кнопку питания, и предупреждает, что после перезапуска браузер может сам открыть ту же вкладку и повторить зависание.

У этой истории есть прецедент. В 2023 году Рон Масас из компании Imperva создал похожий вредоносный шейдер ShadyShader, тот использовал не WebGPU, а более старый WebGL, и вместо явно бесконечного цикла, технически конечные, но огромные вложенные циклы. Apple присвоила находке идентификатор CVE-2023-40441 с оценкой CVSS 6,5 (средняя категория тяжести) и закрыла проблему, добавив более строгую проверку входных данных для обнаружения безостановочных циклов. По наблюдению автора «Deathray», в WebGPU эта проверка оказалась слабее: цикл «Deathray» распознаётся как бесконечный тривиально просто, но проверку всё равно проходит. При этом сам автор считает, что распознавание бесконечных циклов, путь в никуда: оно упирается в проблему остановки, которую в общем виде решить нельзя. По мнению автора, правильный ответ, не детектировать такие циклы, а научиться принудительно прерывать (вытеснять) зависшие шейдеры, особенно если они запущены из недоверенного кода. Автор также, явно обозначая это как догадку, а не факт, предполагает, что Apple трудно исправить проблему из-за архитектуры чипов M-серии: ядро macOS не может напрямую вытеснять задачи на GPU, этим занимается отдельный сопроцессор ASC, и вся логика вытеснения зашита в его прошивку. В подтверждение автор ссылается на материал Asahi Lina, подробно разбирающий архитектуру GPU M-серии.

Автор сообщил об уязвимости в Apple Security 27 июля 2026 года. Apple быстро воспроизвела проблему и сообщила, что собирается её исправить; сроки исправления были помечены как конфиденциальные, поэтому автор их не раскрывает. Но 26 августа 2026 года позиция изменилась: Apple написала, что не видит в отчёте «никаких последствий для безопасности» и что отчёт «не приведёт к изменениям» в её продуктах, а сам отчёт передан другой команде «на рассмотрение как возможное улучшение». Автор трактует это как сигнал низкого приоритета, возможно, проблему не станут исправлять вовсе. При этом, по словам автора, опрошенные им специалисты по безопасности в целом согласны с позицией Apple, и на техническом уровне сам автор не считает её ошибочной. Но большинство обычных людей, с которыми автор говорил, реагируют иначе: они удивлены, что клик по ссылке способен так повлиять на весь компьютер, и воспринимают произошедшее как нарушение доверия к браузеру, то есть как проблему безопасности, вне зависимости от формальной классификации.

Сам автор оценивает «Deathray» как проблему куда менее серьёзную, чем выход за пределы песочницы браузера, удалённое выполнение кода или утечка данных: максимум, что теряет жертва, время и нервы на перезагрузку. Но именно из-за того, что для срабатывания достаточно одного клика, автор видит здесь потенциал для злоупотреблений, что-то вроде более злого рикролла. Автор надеется, что Apple всё же исправит проблему, и отдельно просит не решать её отключением WebGPU по умолчанию, эту технологию автор успел полюбить. Пока баг открыт, автор предлагает использовать находку не во вред: например, встраивать её в игры, где проигрыш «замораживает» компьютер игрока, при условии, что тот сам заранее на это согласился.

Ключевые факты

  • Эксплойт «Deathray», шейдер WebGPU с бесконечным циклом в вычислительном шейдере, вешает графику и рабочий стол Mac; в итоге срабатывает системный механизм Watchdog, происходит паника ядра и принудительная перезагрузка.
  • Баг воспроизводится в Chrome, Firefox и Safari на macOS (проверено на MacBook с чипами Apple M-серии под macOS Tahoe); на других операционных системах тот же код лишь подвешивает вкладку браузера.
  • У проблемы есть прецедент: в 2023 году похожий шейдер ShadyShader для WebGL (Рон Масас, Imperva) получил CVE-2023-40441 с оценкой CVSS 6,5; по наблюдению автора «Deathray», проверка входных данных в WebGPU оказалась слабее.
  • Автор сообщил об уязвимости в Apple Security 27 июля 2026 года; Apple сначала подтвердила проблему и планировала исправление, а 26 августа 2026 года заявила, что не считает это угрозой безопасности, и передала отчёт другой команде «на рассмотрение как возможное улучшение».
  • Автор считает, что правильный путь, не детектировать бесконечные циклы (это тупик из-за проблемы остановки), а научиться прерывать зависшие шейдеры, особенно если они запущены из недоверенного кода; отдельно автор просит Apple не решать проблему отключением WebGPU по умолчанию.

Почему это важно

WebGPU, относительно новый веб-стандарт, дающий сайтам прямой доступ к GPU, который должен заменить более старый WebGL; сейчас его поддерживают все основные браузеры. «Deathray» показывает, что при переходе на новый стандарт Apple воспроизвела старую проблему: похожий баг в WebGL (ShadyShader, 2023) получил CVE с оценкой CVSS 6,5 и был закрыт добавлением проверки входных данных, а в WebGPU эта проверка, по наблюдению автора, оказалась слабее, при том что порог входа ниже: не нужен замаскированный сайт или сложная социальная инженерия, достаточно одного клика по ссылке. Показательна и реакция Apple: компания сначала признала проблему и планировала исправление, а затем решила, что зависание с перезагрузкой, не вопрос безопасности. Расхождение между тем, что формально считается уязвимостью, и тем, что реально ощущает пользователь (компьютер сам завис и перезагрузился без предупреждения), самостоятельный сюжет о том, где индустрия проводит границу термина «проблема безопасности».

Кому это важно

Прежде всего это касается владельцев Mac на чипах Apple M-серии: баг воспроизведён в Safari, Chrome и Firefox под macOS (автор проверял на macOS Tahoe), то есть выбор браузера не защищает. Важно это и разработчикам браузеров и веб-приложений на WebGPU: история показывает, что проверка недоверенного шейдерного кода, открытый вопрос дизайна платформы, а не деталь одной реализации. Наконец, это касается специалистов по безопасности браузеров и самой Apple, как пример спора о границах термина «уязвимость», когда воспроизводимый и вредный баг формально не получает статуса угрозы безопасности.

Как это применить

Готового патча нет, решение остаётся за Apple. Пока проблема не исправлена, полезно знать: зависание не означает полную потерю доступа к машине, она остаётся доступна по SSH, а дожидаться автоматической паники ядра не обязательно: можно принудительно перезагрузиться, зажав кнопку питания, не дожидаясь срабатывания Watchdog. Стоит учитывать, что после перезапуска браузер может сам открыть ту же вкладку и повторить зависание. Автор опубликовал исходный код «Deathray» в блоге, это может быть полезно разработчикам, проверяющим собственные WebGPU-приложения на устойчивость к недоверенному шейдерному коду.

Можно ли доверять

Источник, личный технический блог автора находки: рассказ от первого лица с точными датами переписки с Apple Security, прямыми цитатами ответов Apple и опубликованным исходным кодом самих шейдеров, что делает техническую часть проверяемой напрямую. Прецедент, CVE-2023-40441 (ShadyShader, 2023), задокументированный факт, не зависящий от слов автора. Там, где у автора нет уверенности, например, почему зависание выглядит по-разному в разных случаях или почему Apple трудно исправить это на уровне архитектуры чипов M-серии, это прямо помечено как догадка, а не факт, что скорее повышает доверие к остальному тексту. Слабое место, рассказ дан только с одной стороны: слова Apple известны лишь в пересказе и в цитатах автора находки, без независимого подтверждения от самой компании.

Риски и подводные камни

Главный риск для пользователя, внезапная принудительная перезагрузка и риск повторного зависания, если браузер восстановит ту же вкладку при старте. Из-за минимального порога входа (один клик по ссылке) автор сам сравнивает риск злоупотребления с «более злым рикроллом», массовым использованием не для взлома, а для порчи впечатления от посещения сайта. Ответ Apple («потенциальное улучшение» вместо исправления) означает, что срок жизни проблемы не определён и патча может не быть вовсе. Отдельный риск, в гипотезе автора об архитектуре ASC как причине бага: это явно обозначенное предположение, не подтверждённое Apple, и его не стоит принимать за официальное объяснение. Наконец, неизвестно, ограничена ли проблема только Mac на чипах M-серии с macOS Tahoe или затрагивает более широкий круг устройств, источник не даёт ответа.

«Результат, это сбой, зависание или восстановимая потеря данных, а мы не считаем это проблемой безопасности.»

— Apple, в ответе на отчёт об уязвимости