
以下の問題は、https://android.googlesource.com/kernel/msm の android-msm-wahoo-4.4-pie ブランチ(およびおそらく他のブランチ)に存在します:
/drivers/android/binder.c のバインダードライバにおける binder_thread 構造体の wait メンバーに use-after-free が存在します。
アップストリームのコミットで説明されているとおり: 「binder_poll() は、作業のためにスリープ可能な thread->wait ウェイトキューを渡します。epoll を使用するスレッドが BINDER_THREAD_EXIT を使用して明示的に終了すると、ウェイトキューは解放されますが、対応する epoll データ構造から削除されることはありません。その後プロセスが終了すると、epoll クリーンアップコードがウェイトリストにアクセスしようとし、use-after-free が発生します。」
以下の proof-of-concept は、KASAN で構築されたカーネルで UAF クラッシュを示します(最初のアップストリームバグレポート https://lore.kernel.org/lkml/[email protected]/ より): #include <fcntl.h> #include <sys/epoll.h> #include <sys/ioctl.h> #include <unistd.h>
#define BINDER_THREAD_EXIT 0x40046208ul
int main()
{
int fd, epfd;
struct epoll_event event = { .events = EPOLLIN };
fd = open("/dev/binder0", O_RDONLY);
epfd = epoll_create(1000);
epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &event);
ioctl(fd, BINDER_THREAD_EXIT, NULL);
}
この問題は、2017年12月に 4.14 LTS カーネル [1]、AOSP android 3.18 カーネル [2]、AOSP android 4.4 カーネル [3]、AOSP android 4.9 カーネル [4] でパッチが適用されましたが、ソースコードのレビューに基づくと、最新のセキュリティ情報が適用された Pixel 2 は依然として脆弱です。
ソースコードのレビューに基づき、脆弱であると思われる他のデバイスは以下のとおりです(特に記載がない限り 8.x リリースを指します):
このバグが実際の攻撃で使用されているという証拠があります。したがって、このバグには 7 日間の開示期限が適用されます。7 日間が経過するか、パッチが広く利用可能になった場合(いずれか早い方)、バグレポートは公開されます。
この proof-of-concept が、ビルド walleye_kasan-userdebug 10 QP1A.191105.0035899767 の Pixel 2 で動作し、KASAN クラッシュを引き起こすことを確認しました。proof of concept の C コードと new.out を添付します。KASAN コンソール出力も添付します。
私は TAG および外部関係者から、NSO グループに帰属される Android エクスプロイトに関する技術情報を受け取りました。これらの詳細には、バグとエクスプロイトの手法に関する事実が含まれており、以下を含みますが、これらに限定されません:
これらの詳細を用いて、パッチを比較して他の候補を除外した結果、使用されているバグはこのレポートのものとほぼ間違いないと判断しました。このバグのより詳細な説明と、それを特定するための方法論については、時間ができ次第、今後のブログ記事で執筆する予定です。
現在、エクスプロイトのサンプルはありません。サンプルがないため、タイムラインもペイロードも確認できていません。
このバグは、脆弱なデバイスを完全に侵害できるローカル権限昇格の脆弱性です。エクスプロイトが Web 経由で配信される場合、この脆弱性はサンドボックスを介してアクセス可能であるため、レンダラーエクスプロイトと組み合わせるだけで済みます。
このバグをローカルで実行した際に任意のカーネル読み取り/書き込みを取得するために使用できることを示す、ローカルエクスプロイトの proof-of-concept を添付しました。CVE-2019-2215 を悪用するには、信頼できないアプリのコード実行のみが必要です。また、セキュリティパッチレベル 2019年9月の Android 10 (google/walleye/walleye:10/QP1A.190711.020/5800535:user/release-keys) を実行している Pixel 2 で POC が動作しているスクリーンショット (success.png) も添付しました。
Android からのベンダー声明:
この問題は Android では High 深刻度と評価されており、それ自体では悪用の可能性のために悪意のあるアプリケーションのインストールが必要です。Web ブラウザ経由などの他のベクターは、追加のエクスプロイトとの連鎖が必要です。Android パートナーには通知済みであり、パッチは Android Common Kernel で利用可能です。Pixel 3 および 3a デバイスは脆弱ではありませんが、Pixel 1 および 2 デバイスは、10月のアップデートの一部としてこの問題のアップデートを受け取ります。