【iOS11】QRコードリーダーにバグが発見される。仕組みと危険性を解説!!

iOS11のQRコード読み取り機能に脆弱性

QRコードリーダーは脆弱性からはあまり縁のない比較的安全な機能です。

iOS11から標準カメラにもQRコードリーダーが搭載されました。

 

先日、この標準カメラに搭載されたQRコードリーダーに脆弱性が公開されました。

 

今回発見された脆弱性

今回発見された脆弱性は、「QRコードを読み取った際に通知に表示されたURLとは別のURLが開かれてしまう」というものです。

 

これは、カメラアプリがQRコードに関連付けられたURLを適切に解析できないために起こってしまうバグです。

 

 

この脆弱性は悪用されるととても危険です。

そして、この脆弱性を利用したQRコードを作成するのはとても簡単です。

 

ハッカーのfaker_Roman氏はこの脆弱性を2017年の12月23日にAppleのセキュリティーチームに報告していましたが、最新のiOSバージョン11.2.6でもこの脆弱性は修正されることはありませんでした。

 

ここまで有名になったので、おそらくiOS11.3のアップデートではこの脆弱性は修正されるでしょう。

 

追記:

本日iOS11.3がリリースされましたが、iOS11.3でも修正されていなかったので恐らく11.3.1で修正されると思われます。

 

 

iOS11のQRコードリーダーの脆弱性の仕組み

 

1: ユーザーはiPhoneでQRコードを読み取ります。

 

2: iOSはQRコードに関連付けられたURLに関する通知を表示します。

このアドレスは

https://xxx\@[webサイトA]:443@[webサイトB]/

の形式に従います。

 

3: ユーザーは通知をタップするとSafariでwebサイトAにアクセスします。

 

4: 理想では[webサイトA]:443xxxをユーザー名として送信します。

 

ですが、URLパーサーのバグによってxxx\@[webサイトA]をユーザー名、443をパスワードとしてwebサイトBに送信されてしまいます。

 

よって、通知に表示されるアドレスとは別のアドレスがSafariで開かれてしまうという現象が起こります。

 

 

脆弱性を利用したQRコードを作成するのは誰でも超簡単に出来てしまう

先ほど解説したとおり、ベースのURLの文字を少し置き換えてそのURLをQRコードに変換するだけでこの脆弱性を利用したQRコードが完成してしまいます。

 

QRコードはwebサービス等から簡単に作成することが可能です。

https://www.cman.jp/QRcode/qr_url/

 

 

試しに私が作成したQRコードが以下のものです。

URLは「https://xxx\@google.com:000@9ketsuki.info/qr-code-reader-exploit-ios11/」になっています。

 

 

このQRコードをiOS11の端末で読み取ると、「google.comを開く」と表示されますが、タップするとこのページのURL「https:/9ketsuki.info/qr-code-reader-exploit-ios11/」が開かれてしまいます。

 

この脆弱性の発見者faker_Romanもtwitterで動画を公開しています。

 

一番危ないのはiOS11を脱獄したユーザー

この脆弱性はQRコードを利用する全てのユーザーにとって危険ですが、ユーザーの大半は脱獄を行っていないため、「重大な」脆弱性としては見られていないようです。

脱獄していればこの脆弱性を悪用され、ハッカーに自分のデバイスへの完全なるルートアクセスを与えてしまうことになる可能性があります。

 

 

どう対策したらいい?

一番の対策としては、“QRコードを読み取らない”ことです。

読み取らなければこの脆弱性は危険でも何でもありません。

 

もし、QRコードを読み取らなければならない状況になった場合は、そのQRコードの発信元が信頼できる人、会社、webサイトから発信されているものかどうかをきちんと判断してからスキャンを行ってください。