Microsoft 365 Defender Research Teamは明らかにした複数のLinux脆弱性を総称して「Nimbuspwn」と呼んでいる。Dirty Pipe脆弱性と同様、必要なのは低い権限しか持たないローカルユーザーだけで権限を昇格できるが、今回はエクスプロイトがより限定的で、接続状態の変化を処理するsystemdコンポーネント「networkd-dispatcher」に焦点を当てている。
Nimbuspwnの脆弱性群はCVE-2022-29799(ディレクトリトラバーサル)およびCVE-2022-29800(TOCTOUの競合状態)として記録されている。研究者らは、networkd-dispatcherコンポーネントに実装されたロジックが、スクリプトパスの構築に使われる重要な要素をサニタイズしていないことを発見した。これを悪用すれば、/etc/networkd-dispatcher/ディレクトリから抜け出せる可能性がある。
さらにMicrosoftの研究者らは、コンポーネントがスクリプトを発見してから実際に実行するまでの間に危険な遅延があることも発見した(そのためTOCTOU、time-of-check-time-of-useと呼ばれる)。攻撃者はこのような間隙を悪用し、スクリプトを自分たちのものに置き換えられる。
研究者らは、攻撃者がこれらの脆弱性を利用して任意のシグナルを送信できる可能性があると結論付けた。特定の条件下でのみ可能だが、networkd-dispatcherにスクリプトを無条件にroot権限で実行させられる。攻撃者はこれを利用して、マルウェアの配布やランサムウェアの展開など、追加の作業を実行できる。
以下を参照:オープンソース脆弱性評価ツールのトップ10
Nimbuspwnのエクスプロイト手順
Microsoftの研究者らは、攻撃者がエクスプロイトを連鎖させてnetworkd-dispatcherを乗っ取り、root権限を取得する方法を示した、非常に分かりやすい図(下図)で全手順を説明している。

デーモンとD-Bus
Nimbuspwnの仕組みを理解するには、デーモンやバスなど、関係するLinuxコンポーネントの基本的な概要を知る必要がある。
デーモンは、一部のサブシステムを監視・維持するためにバックグラウンドで実行されるユーティリティプログラムだ。あらかじめ定められた時刻に非常に特定の処理を実行したり、何らかのイベントをきっかけに起動したりする。末尾がdのプロセスを見かけたら、それはデーモンだ。psコマンドや、topなどの組み込みユーティリティを使って確認できる。
つまり「networkd」は「network daemon(ネットワークデーモン)」を意味する。研究者らが注目したのは、networkd-dispatcherデーモンがシステム上でroot権限により起動時に実行される点だ。このコンポーネントがある場合は、ターミナルで次のコマンドを実行して確認できる。
ps -U root -u root u | grep networkd-dispatcherD-Busは「Desktop Bus」の略で、プロセス間の通信を可能にする。この仕組みはfreedesktopプロジェクトが開発したもので、バスに接続されたすべてのプロセスが効率的に相互通信できるようにするため、必要な抽象化(ソフトウェアモジュール間の通信を容易にするモデルである「ソフトウェアバス」)を提供する。
Linuxシステム(デスクトップ環境など)はD-Busを使って複数のバスを作成する。その中には、システム上のすべてのユーザーとプロセスが利用でき、システムサービスへのアクセスを提供する単一のシステムバスも含まれる。
rootが所有するシステムサービスはシステムバスをリッスンして応答するため、ハッカーにとって格好の標的となる。
org.freedesktop.network1バスの所有権を取得する
エクスプロイトを成功させるため、研究者らは特権サービスの下でorg.freedesktop.network1というバス名を所有する必要があった。

このようなバス名は通常、systemd-networkdサービスが所有しているが、ハッカーが不正なD-Busを取得できれば変更可能だ。
これらの脆弱性は、連鎖させて悪用するのがやや難しいように思える。研究者らも複数のファイルを配置し、TOCTOUの競合状態に勝つために何度も試行する必要があった。しかしNimbuspwnを使ってバックドアを仕掛けることで、rootコマンドを再び使いたいときにはエクスプロイトを省略できるようにした。
root権限の昇格を可能にする脆弱性は、悪用の難しさにかかわらず、深刻に受け止めるべきだ。
以下を参照:脆弱性管理ツールのトップ
Nimbuspwnから身を守る方法
執筆時点では、影響を受ける環境やディストリビューションの公式リストは存在しない。しかしMicrosoft Research Teamは、Ubuntuをベースにした軽量ディストリビューションであるLinux Mint、DebianベースのOS、そしておそらく最も人気のあるLinuxディストリビューションに言及している。
簡単な検索を行えば、脆弱なコンポーネントを含む可能性のあるすべてのディストリビューションを特定できるかもしれない。networkd-dispatcherのメンテナーであるClayton Craftは脆弱性を修正済みだ。そのため、コンポーネントを有効にしている場合は、強くアップデートが推奨される。
ただし、この場合は朗報だが、すべてのディストリビューションでコンポーネントがデフォルトでインストールされているとは限らない。手動で確認してもよいが、GitHubにはすでに無料のオープンソース検出ツールがあり、システム上で現在プロセスが実行されているかどうかを確認できる。
より一般的に言えば、Nimbuspwnは、Linuxデバイスを含むすべてのエンドポイントを監視することがいかに重要かを示している。Linuxのシステムやコンポーネントでは脆弱性やエクスプロイトが増え続けており、Linuxが多くのクラウドベースのアーキテクチャやサーバーで普及していることから、この傾向がすぐに止まることはないだろう。
このような欠陥の大きな問題は、ローカルユーザーが必要であることを主な理由として、過小評価されがちな点だと私は考える。つまり、ハッカーは悪用するためにすでにマシン内にいなければならない。しかし、これはリスクを軽視する正当な理由にはならない。ラテラルムーブメントや権限昇格は、いまやハッカーの常套手段だからだ。
セキュリティを1つの層だけに頼ることはできない。企業は、侵害後のエクスプロイト技術に備える必要がある。





