Linuxカーネル内に深刻な脆弱性が発見された。この脆弱性はメモリの二重解放(double free)に起因するものであり、2005年頃から存在していたとされている。CoreOSやRed Hat、Canonical、Debian ProjectをはじめとするLinuxディストリビューターは、パッチのリリースに向けて作業を進めており、既にパッチを公開しているところもある。
提供: iStock
同脆弱性は、LinuxカーネルにおけるDatagram Congestion Control Protocol(DCCP)の実装に存在している。これを悪用すれば、ローカルユーザーによるルート権限の取得が可能になり、他の脆弱性と組み合わせることでカーネル内で任意のコードが実行可能になる。
「CVE-2017-6074」というCVE識別番号が割り当てられたこの脆弱性は、発見した研究者のAndrey Konovalov氏によると、DCCPを初めてサポートし、2005年にリリースされたLinuxカーネル「2.6.14」から存在している可能性が高いという。Linuxカーネルにおいては、各ディストリビューターへの通知に先立ち、先週時点でパッチが適用されている。Konovalov氏は、Googleの分散型ファズツール「syzkaller」を用いて同脆弱性を発見したという。
MITREの説明によると、LinuxカーネルのDCCP実装は「LISTEN(待ち受け)状態中におけるDCCP_PKT_REQUESTパケットデータ構造の取り扱いに問題があるため、ローカルユーザーによるroot権限の奪取や、setsockoptシステムコールによってIPV6_RECVPKTINFOを設定しているアプリケーション経由でのDoS攻撃が可能になる」という。
さらにKonovalov氏は、DCCPのソケットバッファ(skb)に関する懸念も指摘している。同氏は、「現時点におけるDCCPの実装では、dccp_v6_conn_requestが正常終了した場合に、DCCP_PKT_REQUESTパケット用のskbがdccp_rcv_state_process内の__kfree_skb経由で強制的に解放されている」とSecLists.Orgのメーリングリストに記している。
「しかし、IPV6_RECVPKTINFOがソケット上で設定される場合、skbのアドレスはireq->pktoptsに保存され、dccp_v6_conn_request[4]内のskb参照カウントはインクリメントされるため、skbは使用中となる。それにもかかわらず、それ(skb)はdccp_rcv_state_process内で解放されてしまう」(Konovalov氏)
これら2度の解放によって、解放済みメモリ使用(use-after-free)の脆弱性が顕在化し、カーネル内で任意のコードを実行するために利用できるようになる。Konovalov氏は近日中にエクスプロイトコードを公開する意向を示している。
同氏は「攻撃者は、カーネル内で何らかのヒープスプレー(heap-spraying)テクニックを使用することで、(攻撃対象とする)オブジェクトに狙いを定め、そのコンテンツを任意のデータで上書きできる。上書きされたオブジェクトに呼び出し可能な関数ポインタが含まれている場合、攻撃者はカーネル内で任意のコードを実行できる」と記している。
この記事は海外CBS Interactive発の記事を朝日インタラクティブが日本向けに編集したものです。