L2CAP (Logical Link Control and Adaptation Layer Protocol) は BlueBluetooth スタックのデータリンク層で動作し、接続の多重化、セグメント化、および Bluetooth などの上位層プロトコルのパケット再構築などのサービスを提供します。これにより、高レベルプロトコルによるクライアントへの L2CAP データパケットの送受信が行われます。
Linux カーネルの Bluetooth サブシステムがクライアントから受信した保留中の設定パケットを処理する方法で、スタックバッファーオーバーフローの問題が発見されました。その結果、クライアントはスタックバッファーオブジェクトに格納された任意の L2CAP 設定パラメーターを送信できます。これらのパラメーターは、バッファー長を超えて、隣接したカーネルスタックの内容を上書きすることができます。これは、認証前の Bluetooth 接続の確立時に発生します。カーネルスタック保護機能 (CONFIG_CC_STACKPROTECTOR=y) が無効になっている場合、Bluetooth でシステムに接続できる非認証ユーザーはこの不具合を悪用してシステムをクラッシュしたり、システムで任意のコードを実行することが可能です。
Red Hat セキュリティーレスポンスチームは、本件によるセキュリティー上の影響度を「重要な影響」として評価しています。
以下の Red Hat 製品バージョンが影響を受けます。
Red Hat Enterprise Linux 6
Red Hat Enterprise Linux 7
Red Hat Enterprise MRG 2
PPC64 アーキテクチャー上の Red Hat Enterprise Linux 7 は、スタックの保護なしで構築されるため、リモートでコードが実行される可能性のある脆弱性としてこの問題の影響を受けることに注意してください。カーネルスタックの保護はリモートでのコード実行のリスクを軽減します。そのため、保護されない状態で Bluetooth サービスが実行され、モジュールがロードされた場合、非認証の攻撃者が Red Hat Enterprise Linux 7 の PPC64 サーバーにてリモートでコードを実行することが可能です。PPC64 上の Red Hat Enterprise Linux 7 はワークステーション向けには提供されないため、Bluetooth ハードウェアを使用し、bluez パッケージがインストールされているサーバーが対象となります。デフォルトのサーバーインストールでは、bluez パッケージはインストールされないため、bluetooth.service ユニットファイル (および bluetoothd) は存在しません。
影響を受けない製品
攻撃が成功するには、脆弱性が存在する Bluetooth カーネルモジュールがロードされ、Bluetoothd サービスが実行されている必要があります。
以下の Red Hat 製品バージョンは影響を受けません。
RHEL Atomic Host には脆弱性が存在する Bluetooth モジュールが同梱されますが、bluetoothd サービスは同梱されないため影響を受けません。
s390x 上の Red Hat Enterprise Linux 7 は脆弱性が存在する Bluetooth モジュールを構築しないため、影響を受けません。
Red Hat Enterprise Linux 5 は、不具合が存在しないカーネル内で古いバージョンの Bluetooth サブシステムを使用するため、影響を受けません。
Red Hat Linux コンテナーは、このような Bluetooth モジュールの不具合など、カーネルの問題の影響を直接受けませんが、Red Hat は最新バージョンのコンテナーイメージを使用することを推奨します。Red Hat Container Catalog の一部である Container Health Index を使用すると、常にコンテナーのセキュリティー状態を確認できます。
攻撃の詳細と影響
Linux カーネルの Bloetooth サブシステムがクライアントから受信した保留中の L2CAP 設定応答を処理する方法で、スタックバッファーオーバーフローの不具合が発見されました。カーネルでスタック保護機能が有効になっているシステム (CONFIG_CC_STACKPROTECTOR=y、s390x および ppc64[le] 以外のすべてのアーキテクチャーで有効になっている) では、Bluetooth を使用してシステムに接続できる非認証の攻撃者はこの不具合を悪用してシステムをクラッシュできる可能性があります。スタック保護機能の性質により、コード実行の可能性は完全に排除できませんが、可能性は低いと考えられます。スタック保護機能のないシステム (ppc64[le]: Bluetooth モジュールは s390x では構築されません) では、Bluetooth を使用してシステムに接続できる非認証の攻撃者はこの不具合を悪用し、ring 0 (kernel) 権限を使用してシステム上でリモートで任意のコードを実行できる可能性があります。このような不具合は一般的にバッファーオーバーフローと呼ばれます。通常、この不具合を発生させるには、割り当てられたバッファー領域を超えた任意コードを作成し、他の手段 (関数の戻りポインターの誤作動など) でそのコードを実行します。攻撃者は脆弱性のあるシステムの近辺にいないと Bluetooth プロトコルでそのシステムに接続することはできません。
脆弱性の診断
Bluetooth ハードウェアがシステムに存在し、Bluetooth サービスが有効で使用できる状態である場合、この脆弱性の影響を受けます。具体的に説明すると、bluetooth.ko カーネルモジュールコード内にこの不具合が存在するため、このモジュールがロードされた場合にシステムの脆弱性が発生します。
# service bluetooth stop
# chkconfig bluetooth off
注意: 上記のカーネルモジュールがすでにロードされている場合、rmmod コマンドを使用すると手作業でアンロードすることができます。システムで検出された Bluetooth ハードウェアに応じて、ロードされる Bloetooth モジュールに若干の違いがあることが想定されます。rmmod コマンドは、使用時にロードされた追加の Bluetooth モジュールに関する情報を表示します。ロードされたことが通知される追加の Bluetooth モジュールすべてに rmmod を実行します。root として以下を実行し、実行中のカーネルからこれらのモジュールをアンロードします。
Comments