4月9日、Photon社が「The 49.7-Day Time Bomb Hidden in Every Mac's Network Stack」と題した記事を公開した。
すべてのMacには、49日17時間2分47秒の連続稼働後に新しいネットワーク接続を一切受け付けなくなるという深刻な脆弱性が存在する。この問題は、AppleのXNUカーネルの32ビット整数オーバーフローに起因し、再起動以外に解決方法がない。
特に深刻なのは、この障害の隠密性である。システムは正常に動作し続け、pingへの応答も正常で、既存の接続も維持される。しかし新しいTCP接続は一切確立できなくなる。エラーログすら出力されないため、トラブルシューティングが極めて困難だ。
Mac長期稼働の増加で浮上した問題
この問題が今注目されている背景には、サーバー用途でMacを長期稼働させる企業の急増がある。特にCI/CDパイプライン用のMac miniや、メディアサーバーとしての活用が拡大する中、この脆弱性は運用上の重大なリスクとなっている。
AppleのM1/M2チップ搭載Mac miniの省電力性能により、24時間365日稼働させる事例が激増しているが、この隠れた時限爆弾の存在は広く知られていなかった。
発見の経緯:iMessageモニタリングで判明
この脆弱性を発見したのは、iMessageモニタリングサービスを24時間運用するPhoton社のエンジニアだった。Mac miniの運用フリートで複数のマシンが同じ不可解な症状を示し、詳細な調査の結果、49.7日という正確なタイミングでの障害が判明した。
問題の核心は、macOSのTCPネットワーキングスタックのtcp_now変数にある。この変数は最後の起動からの経過ミリ秒を追跡するが、32ビット符号なし整数として宣言されており、4,294,967,295ミリ秒(約49.7日)で上限に達する。
tcp_nowがオーバーフローして凍結すると、TIME_WAIT状態の接続をクリーンアップする処理が停止し、利用可能な65,536個のエフェメラルポートが徐々に枯渇していく。
RFC標準違反が根本原因
より深刻なのは、この問題が予期できない例外ではないことだ。IETF(Internet Engineering Task Force)のRFC 7323では、タイムスタンプクロックオーバーフローの正しい処理方法が明確に定義されている。
AppleのXNUカーネルはこの標準仕様に適切に従っておらず、RFC 7323準拠のオーバーフロー安全な比較を実装していない。これは設計上の重大な欠陥である。興味深いことに、XNUカーネルのソースコードは公開されているため、この問題は理論上検証可能だった。
1999年Windows 98バグより悪質
この問題は、1999年のWindows 98の49.7日クラッシュバグと似ているが、実はより悪質だ。Windows 98は即座にブルースクリーンでクラッシュしたため問題が明確だったが、macOSバグはシステムを稼働させ続けながら新しいネットワーク接続を静かに無効化する。
Windows 98のバグは25年前に修正されたが、現代のmacOSで同様の問題が残存している事実は、レガシーコードの問題を浮き彫りにしている。
影響範囲と対処法
月次アップデートサイクルを持つ一般ユーザーは影響を受けにくいが、以下の用途では深刻な問題となる:
- ホームサーバーとして使用されるMac mini
- CI/CDビルドマシン
- 監視・メディアサーバー
- 長期稼働が必要な業務用Mac
- 研究機関の計算ノード
現在確認されている唯一の回避策は、49.7日マーク前の定期的な再起動である。Photon社は代替緩和策を研究中としているが、根本的な修正にはAppleによるカーネル更新が必要だ。
コミュニティで広がる衝撃
Hacker Newsでは「25年前のWindows 98と同じバグが現代のmacOSに存在するとは信じられない」といった驚きの声が上がっている。特に「サーバー用途でMacを使う企業への警告として重要」という実用的な観点からのコメントが多数寄せられている。
Twitter上でも、インフラエンジニアを中心に「定期再起動スケジュールの見直しが必要」「Mac miniのサーバー運用で要注意」といった実務的な対応策の議論が活発化している。
一部のユーザーからは「これでApple Silicon Macのサーバー採用に慎重になる企業が増えそう」という懸念の声も出ている。
この脆弱性は、成熟したOSでも見落とされがちな低レベルバグの存在を示している。macOSがサーバー用途での利用が増加する中、数十年前のネットワーキング標準が正しく実装されていないことは重大な問題だ。
Appleからの公式対応が待たれるが、現時点では継続稼働が必要なMacでは7週間以内での定期再起動が唯一の実用的な対策となる。
詳細はThe 49.7-Day Time Bomb Hidden in Every Mac's Network Stackを参照していただきたい。