
Página WebGPU única congela Macs com chip M e derruba o WindowServer
O que o Deathray faz
Uma única página com um shader em WebGPU pode travar os gráficos de um Mac, deixando a interface de desktop inutilizável até que um reinício seja forçado. A vítima só precisa clicar em um link. O problema se reproduz em vários navegadores no macOS - Chrome, Firefox e Safari -, mas não em outros sistemas operacionais. O autor testou apenas em MacBooks com chip da série M rodando Tahoe e diz que gostaria de saber se outros Macs também são afetados. Em outros sistemas, segundo ele, a aba congela e o desempenho piora, mas ao fechar a aba tudo volta ao normal.
Como funciona
O Deathray usa WebGPU, tecnologia web relativamente nova que expõe APIs de navegador para enviar shaders à GPU do dispositivo. Ela deve substituir o WebGL e é suportada pelos principais navegadores na maioria dos sistemas. Todo o Deathray cabe em um único arquivo pequeno.
No shader de computação, um laço infinito ocupado copia o mesmo vetor repetidamente em um buffer. O shader de vértice depende do mesmo buffer de dados usado pelo shader de computação; como este fica em laço ocupado, o shader de vértice não avança. Isso transborda para outros processos que querem usar a GPU, em especial o WindowServer, que também fica sem resposta. As manifestações variam: às vezes o mouse ainda se move, às vezes não; às vezes aparece a bola colorida de espera e às vezes surgem artefatos magenta em parte da tela. O autor diz não saber o que leva a comportamentos diferentes.
O restante do computador segue funcionando nesse momento, e é possível acessar a máquina por SSH. Mas há um watchdog que monitora o WindowServer: quando ele não responde por tempo suficiente, dispara um kernel panic e o computador reinicia. Quem foi atingido e está impaciente pode segurar o botão de energia para desligar e reiniciar sem esperar o watchdog.
Precedente
Não é a primeira vez que a Apple enfrenta esse tipo de problema. Em 2023, Ron Masas, da Imperva, criou um shader malicioso semelhante chamado ShadyShader, que usa WebGL e também recorre a um laço descontrolado para monopolizar a GPU, com laços aninhados enormes que, tecnicamente, não são infinitos. A Apple respondeu com o CVE-2023-40441, de pontuação CVSS 6,5 (média), e adicionou validação de entrada para detectar melhor laços descontrolados.
Segundo o autor, essa validação parece mais fraca no WebGPU, e o Deathray tem um laço infinito trivialmente identificável. Ainda assim, ele afirma que detectar laços infinitos é um jogo perdido, por causa do problema da parada, e que é preciso haver melhor preempção de shaders sem resposta, sobretudo quando executam código não confiável. Todos os outros sistemas operacionais em que testou acertam nisso. Ele especula que parte da dificuldade da Apple venha da arquitetura dos chips da série M: o kernel do sistema não consegue preemptar a GPU diretamente; o tratamento da GPU é feito por um coprocessador chamado ASC, com o qual o kernel se comunica, e toda a lógica de preempção vive no firmware do ASC, citando um texto de Asahi Lina sobre essas GPUs.
Divulgação e resposta da Apple
O autor conta ter descoberto o problema por acidente, enquanto aprendia WebGPU no Recurse Center e criou um laço infinito sem querer. O caso foi divulgado à segurança da Apple em 27/7/26; a empresa reproduziu rapidamente o problema e disse que pretendia corrigi-lo, com um prazo de correção marcado como confidencial. Em 26/8/26, porém, a Apple mudou de posição: afirmou não ver implicações de segurança no relato e que ele não resultou em mudança nos produtos da empresa, dizendo que o caso seria enviado a outra equipe para “potenciais considerações de aprimoramento”. Para o autor, isso soa como prioridade muito baixa, o que ele considera curioso diante da classificação média do ShadyShader.
O que conta como questão de segurança
O autor observa que há uma discussão interessante sobre o que constitui um problema de segurança. Pesquisadores com quem conversou tendem a concordar com a Apple, que descreve o resultado como “ou uma queda, ou um travamento, ou perda recuperável de dados, o que não consideramos uma questão de segurança”. Tecnicamente, ele não acha que a Apple esteja errada. No entanto, a maioria das pessoas fora da área de segurança com quem falou se surpreende com essa caracterização e com a falta de prioridade. Para ele, existe uma confiança forte no navegador e a crença, talvez equivocada, de que clicar em um link não prejudicará o resto do computador além de deixá-lo mais lento até fechar a aba. O Deathray viola essa confiança de forma muito visível, e a maioria dos usuários veria isso como questão de segurança.
O que o autor espera
O Deathray está longe de ser tão grave quanto uma fuga de sandbox, execução remota de código ou vazamento de dados. Mas a barreira de entrada é baixíssima - basta fazer alguém clicar em um link -, o que o torna potencialmente bastante incômodo; usado com má intenção, seria uma versão mais cruel de um Rickroll. Ele espera que a Apple o corrija em breve, pedindo que a solução não seja desativar o WebGPU por padrão. Até lá, torce para que as pessoas se divirtam com ele sem má intenção, imaginando jogos em que perder congela o Mac, com consentimento prévio do usuário.