iPhoneをクラッシュさせる「爆弾文字列」とは? 送られると多数のアプリが利用不能に

いたずらで他人に送らないように…。
Open Image Modal
Engadget日本版

iPhone や Mac、Apple Watchに、特定の文字を表示するだけでアプリが落ちるバグが見つかりました。

表示しただけでクラッシュしてしまうため、メッセージやチャットなどで問題の文字を送りつけられた場合、いきなりアプリが落ちたうえに、再び起動しても即座に落ちるループに陥る危険があります。

影響を受けるのは iMessage や Safariブラウザ、LINE、Facebookメッセンジャーほか、システム標準のコンポーネントを使う多数のアプリ。

アプリを殺す字の例

Open Image Modal
Engadget日本版

iPhone アプリを即死させる魔の文字として最初に話題になったのはこちら。インドを中心に7000万人ほどの話者が居るテルグ語のテルグ文字です。

親しみがないとそもそも文字なのか分からない謎の記号のように見えますが、子音や母音、発音を示す記号などの字素を組み合わせた合字として表記されています。

コンピュータ内部での扱い的には、この例は制御文字を含む5つのUnicodeキャラクターからなる文字列です。念のためここにテキストとしては置きませんが、検索すればすぐに見つかります。

余談ながら、最近ダイバーシティへの配慮で爆発的に増えているように見える絵文字も、内部的には職業+性別+肌の色のような組み合わせ。要素と要素の間は「前後をつないで合字として表示する」意味の制御文字。

最初に話題になったのはこの文字列でしたが、有志の調査や実験の結果、テルグ語に限らず複数の言語で、構成要素に特定の記号や制御文字を含んだ合字(列)で同じクラッシュが発生することが判明しました。

再起動した途端に落ちる「詰み」パターンも

iOS や macOS で発生するのは、この特定の組み合わせの文字を表示したタイミングでアプリがクラッシュする現象。

アプリが落ちてホーム画面に戻ったり、iPhone自体が落ちたように見えます。(iOSそのものが再起動するわけではなく、ホーム画面部分のシステムアプリ SpringBoard が落ちる。Spotlight検索に貼り付けた場合など)

影響を受けるのは iMessage や Safari をはじめ、LINEやFacebookメッセンジャーなど、OS標準のテキスト表示コンポーネントを使う多数のアプリ。

特に困るのは、メッセンジャー系のアプリやSMSでこの文字列を送りつけられると、表示したところでアプリが落ち、再びアプリを立ち上げても前の画面から始まったり履歴表示でまた落ちるループが発生すること。

表示を確認できる前に落ちる場合もあれば、違うタイミングで不意に落ちる場合もあり、厳密にOSのどのプロセスがどの処理をするタイミングでクラッシュするのかまでは分かっていません。

しかしうかつにSafari などで表示させると、再起動が視認できない速さでまた落ちてしまったり、メッセージングアプリではスレッド一覧の表示で落ちるなど、詰んだかと思う状況になる場合も。

いたずらで送りつけられたり、好奇心で自分で入力してこの状態になってしまった場合は、アプリの立ち上げ直しを繰り返したり、別のアプリから「~で開く」を経由して安全な画面で起動したり、端末の再起動などで回避が可能でした。

要は問題の文字が自動的に表示されないようにアプリを開いてから、問題のメッセージを削除すれば大丈夫です。

メッセージがスレッド一覧に表示されてしまいデフォルトの起動画面でも落ちる場合は、同じスレッドにさらにメッセージを重ねて履歴を流して表示できるようにしたり、通知からスレッドを削除する手もあります。

修正パッチは近日中に提供予定

アップルによれば、このバグの存在は認識しており、近日中のOSアップデートで修正予定とのこと。春に提供予定の新機能追加アップデート iOS 11.3 まで待つ必要はなく、その前にバグ修正リリースがある見込みです。

Mozillaのエンジニア Manish Goregaokar 氏によれば、爆弾文字列の条件はデーヴァナーガリー文字、ベンガル文字、テルグ文字で、「子音1、ヴィラーマ(発音区別符号)、子音2、ZWNJ (制御文字のゼロ幅非接合子)、母音」の順に並ぶ文字列

子音と母音の種類によって発動する場合としない場合があり、これ以外にも落ちる文字列があることから、特定の制御文字や記号を組み合わせた場合の合字レンダリングに何かバグがあるのではないか、と推測しています。

関連記事