HN 日本語サマリー

← 一覧へ戻る
セキュリティ

デスレイ:信頼できないサイトがMacをフリーズさせる簡単な方法

The Deathray: A simple way for an untrusted site to freeze a Mac (auberon.xyz)

251 pointsby auberonedu167 コメント

要約

WebGPUの脆弱性「デスレイ」により、信頼できないウェブサイトのリンクをクリックするだけでMacのグラフィックがフリーズし、再起動が必要になる問題が発見されました。この問題はmacOS上の主要ブラウザで再現し、無限ループを引き起こすシェーダーが原因でGPUが応答不能になり、最終的にシステムがクラッシュします。Appleは当初修正を意図していましたが、後にセキュリティ上の問題ではないと判断しました。

全文翻訳

The Deathray

信頼できないサイトがMacをフリーズさせる簡単な方法

2026年9月10日

TL;DR

信頼できないサイト上のWebGPUシェーダーは、Macのグラフィックスをハングさせ、再起動を強制するまでデスクトップUIを使用不能にすることができます。被害者はリンクをクリックするだけで済みます。この問題はmacOS上のクロスブラウザで再現しますが、他のOSでは再現しません。

Deathrayを試してみよう!

以下のボタンはあなたのMacをフリーズさせます。他のOSでは遅くなる可能性があります。

私がテストした他のOSでは、タブがフリーズし、動作が重くなりますが、タブを閉じれば問題ありません。ただし、環境によって異なる場合があります!上記をクリックするのは、コンピューターをフリーズさせても構わない場合のみにしてください。

スコープ

Chrome、Firefox、SafariのmacOSでDeathrayを再現しました。他のオペレーティングシステムでは再現しません。MシリーズMacBook(Tahoe実行中)でのみテストしましたが、他のMacでも影響があるか興味があります。

編集(2026/9/11):Hacker Newsのユーザーがテストし、その影響を報告しています。MシリーズMacでは完全にフリーズする可能性は低いようですが、問題が発生する可能性があります。Intel Macも影響を受けにくいようです。詳細な議論はこちらを参照してください。

仕組み

Deathrayは、比較的新しいWeb技術であるWebGPUを使用しています。WebGPUは、サイトがデバイスのGPUで実行するシェーダーを送信するために使用できる、ブラウザに組み込まれたAPIを提供します。これはWebGLに代わるもので、ほとんどのOSのすべての主要ブラウザでサポートされています。

Deathray全体は、1つの小さなファイルに収まります。ソースコードはこちらで見ることができます。ファイルの大部分は足場部分であり、重要なのはWebGPUシェーダーです。

Compute Shader
@group(0) @binding(0) var<storage, read_write> data : array<vec4f>;

@compute @workgroup_size(1) fn compute() {
  // no i++, loop spins endlessly
  for(var i = 0u; i < 1;) {
    data[i+1] = data[i];
  }
}
Render Shaders
@group(0) @binding(0) var<storage, read> data : array<vec4f>;

@vertex fn vert(@builtin(vertex_index) vertexIdx : u32)
              -> @builtin(position) vec4f {
  // attempts to read from same buffer the compute shader writes to
  let datum = data[vertexIdx];
  return datum;
}

@fragment fn frag(@builtin(position) pos : vec4f)
               -> @location(0) vec4f {
  return pos;
}

Compute Shaderでは、無限のビジーループがバッファ内で同じベクトルを繰り返しコピーします。Vertex Shaderは、Compute Shaderが操作しているのと同じデータバッファに依存します。Compute Shaderがビジーループでビジー状態であるため、Vertex Shaderは先に進むことができません。

これは、WindowServerなど、GPUを使用しようとする他のプロセスにも波及します。WebGPUの積み重ねの結果、WindowServerも応答しなくなります。これは常に同じように現れるわけではありません。マウスを動かせる場合もあれば、そうでない場合もあります。ビーチボールが表示されることもあれば、画面の一部にマゼンタ色のゴミが表示されることもあります。どのような要因で動作が異なるのかは不明です。

興味深いことに、この時点ではコンピューターの他の部分は正常です。SSHで問題なくコンピューターに接続できます。しかし、WindowServerをチェックするWatchdogがあります。応答がない時間が長すぎると、カーネルパニックがトリガーされ、コンピューターが再起動します。Deathrayにやられてしまい、我慢できない場合は、Watchdogが再起動するのを待たずに電源ボタンを長押ししてオフにし、再起動することができます。ただし、起動時にブラウザが同じタブを自動的に再オープンしないことを願うばかりです。

先例

これは実は、Appleがこの問題に直面したのが初めてではありません。2023年、ImpervaのRon Masasは、ShadyShaderという同様の悪意のあるシェーダーを作成しました。これはWebGLを使用しています。ShadyShaderも、実行中のループを使用してGPUを占有し、技術的には無限ではない巨大なネストされたループを作成します。

AppleはCVE-2023-40441(CVSSスコア6.5、中程度)を発行して対応しました。問題を軽減するために、Appleは実行中のループをより良く検出するために、入力検証を改善しました。

WebGPUでは、その入力検証が弱いように見えます。Deathrayには、容易に識別できる無限ループがあります。しかし、最終的に無限ループを検出することは負け戦です。停止問題(halting problem)を回避することはできません。応答しないシェーダー、特に信頼できないコードを実行しているシェーダーのプリエンプション(割り込み処理)を改善する必要があります。私がテストした他のすべてのオペレーティングシステムは、これを正しく処理しています。

Appleがこのような問題の修正に取り組む上での課題の一部は、Mシリーズチップのアーキテクチャにあるのかもしれません。OSカーネルはGPUを直接プリエンプトできません。代わりに、GPU処理はASCと呼ばれるコプロセッサによって行われ、OSカーネルはこれと通信します。GPUプリエンプションロジックはすべてASCファームウェアに存在します。Asahi Linaは、MシリーズGPUについて、アーキテクチャをより詳細に探求した優れた記事を公開しています。

Deathrayはどのように発見されたか?

この問題は昔ながらの方法で発見しました。偶然です!Recurse CenterでWebGPUを学んでおり、誤って無限ループを作成してしまいました。コンピューターがハングしたときは驚きましたが、もちろん「毎回そうなるのか?」と尋ねました。その通りでした!私がこれにつまずいた最初の人物ではないはずです。

公開

この問題は2026年7月27日にApple Securityに開示されました。Appleは迅速に問題を再現し、修正する意向であると述べました。彼らは秘密保持契約のため、ここに記載しない修正時期を示しました。

しかし、2026年8月26日、Appleは方針を変更し、「[私の]レポートにセキュリティ上の影響はない」と述べ、「[私の]レポートは[Appleの]製品に変更をもたらすものではない」としました。レポートは「潜在的な機能強化の検討」のために別のチームに送られるとのことでした。私には、それが修正されるとしても非常に優先度が低いように聞こえます。ShadyShaderが6.5の中程度の深刻度を持つ問題としてマークされていたことを考えると、少し奇妙に感じます。

とはいえ、何がセキュリティ問題にあたるのかについて、興味深い議論ができると思います。私が話したセキュリティ研究者は、Appleの見解に同意する傾向があります。Appleの言葉を借りれば、「結果はクラッシュ、ハング、または回復可能なデータ損失であり、これはセキュリティ問題とは見なしません。」そして技術的なレベルでは、彼らは間違っていないと思います。

しかし、私が話した非セキュリティ専門家の大多数は、その評価とAppleが問題の修正を優先していないことに驚いています。多くの人々はブラウザを強く信頼していると思います。(おそらく誤った)信念として、単にリンクをクリックするだけで、タブが閉じられるまで遅くなる以上の悪影響がコンピューター全体に及ぶことはないだろうというものです。Deathrayのようなものは、その信頼を非常に目立つ形で侵害しており、ほとんどのユーザーはそれをセキュリティ問題と見なしていると思います。

期待すること

Deathrayは、サンドボックスエスケープ、RCE、またはデータ侵害ほど深刻なものではありません。しかし、その参入障壁の低さ(誰かにリンクをクリックさせるだけでよい)から、非常に厄介になる可能性があります。悪意を持って使用された場合、Rickrollのより意地悪なバージョンとして見ており、Appleが早いうちに修正してくれることを願っています。(そしてApple、修正がWebGPUのデフォルト無効化にならないことを願っています!私はWebGPUを愛するようになりました💚)。

しかし、Appleが修正するまで、悪意のない方法で楽しむ方法を見つけてくれることを願っています。負けるとMacがフリーズする(ユーザーが事前に同意した場合)Deathrayビデオゲームを見てみたいです。「ゲームで死んだら、現実でも死ぬ」という考え方の、はるかに穏やかなバージョンです。

楽しんでください、猫ちゃんたち、でも責任を持ってくださいね!

敬具、

Auberon López (they/them)