2018年02月16日 12時30分00秒
たった1文字でiPhoneをクラッシュさせるバグ発覚、無限再起動ループの危険もあり
特定のURLや文字列によってiOSがクラッシュするバグはこれまでにも見つかっていましたが、新たにたった1文字でiOSをクラッシュさせられるバグが発見されました。このバグのせいで、場合によっては、無限再起動ループに陥る恐れがあるとのことです。
Un carattere indiano fa crashare iPhone, Mac e iPad | MobileWorld
http://www.mobileworld.it/2018/02/14/carattere-indiano-crash-iphone-mac-ipad-144881/
イタリアのメディア「MobileWorld」によると、問題の「文字」はインド南東部の公用語の一つであるテルグ語で使われる以下の文字。インドの全人口の5%にあたる約7000万人が利用している言語に含まれる文字です。
iMessageなどのメッセージアプリでこの文字を送られると、メッセージを開こうとした時にアプリがクラッシュするとのこと。
この問題の文字を「iOSの通知」に表示させることでiOS自体をクラッシュさせることも可能。Twitterでこの文字を送信してiPhone 7 Plusをクラッシュさせる様子は、以下のMobileWorldによる検証ムービーで確認できます。
Il carattere INDIANO che fa crashare iPhone - YouTube
Twitterのダイレクトメッセージを開いたiPhone 7 Plus。
PCからiPhone 7 PlusのTwitterアカウントに、問題の文字を大量に送りつけてみます。
次に、Twitterアプリが開いていない状態で、先ほどと同様にクラッシュ文字メッセージを送ると……
iOSがクラッシュ。これは、SpringBoardが文字を読み込もうとしてバグに陥っているのだと考えられます。
iOSの通知バーに問題の文字が表示されてiOSがクラッシュ状態に陥った場合、SpringBoardが再起動するのをじっと待つことが肝心だとMobileWorldは述べています。恐ろしいことに、待つことなく手動で再起動させようとiPhoneの電源を切ると無限再起動ループにハマる可能性があるとのこと。iOSのクラッシュを解除するには、PCでiTunesを使ったDFUモードで復元するしか打つ手がなくなるそうです。なお、このバグは、iMessageやTwitterの他に、Facebook MessengerやWhatsAppなどのメッセンジャーアプリで再現することが確認されており、macOSでも同様だとのこと。
このバグの原因を突き止めようとしている人もいます。
Picking Apart the Crashing iOS String - In Pursuit of Laziness
https://manishearth.github.io/blog/2018/02/15/picking-apart-the-crashing-ios-string/
Mozillaで働くManish Goregaokarさんによると、問題は複数の文字を合成して一文字にする「合字」を作るためのゼロ幅非接合子(ZWNJ)の処理にiOS・macOSは問題を抱えているとのこと。ZWNJがテルグ語で使われる「virama 」という要素を文字に合成する場合にバッファオーバーフローが発生する可能性を指摘しています。
Appleは1文字でiOS・macOSがクラッシュするというバグについてすでに対策に乗り出しているとのこと。2018年春にリリース予定のiOS 11.3や macOS 10.13.4のベータ版ではバグは解消されており、近く対策済みアップデートが提供される見込みです。
AppleはiOSのバグが増えている事態を踏まえて、新機能の追加よりも品質の向上により重きを置き、iOS 12のリリースを2019年まで遅らせる方針に切り替えたことがBloombergによって報じられていますが、賢明な判断かもしれません。