ウェブサイト検索

重大なLinux PolicyKitのセキュリティ脆弱性が発見されました:Pwnkit


ポリキット(以前のPolicyKit)における深刻なメモリー破損の脆弱性が、12年以上経ってようやく発見されました。このプログラムは、ほぼすべての現代のLinuxディストリビューションに存在しています。

一つの問題が解決すれば、また別の問題が現れる。Linuxカーネルのfs/fs_context.cプログラムにおけるヒープオーバーフローのバグという本当のLinuxの問題が見つかり、修正された後、また新たなセキュリティ問題が発見された。今回は、セキュリティ会社Qualysがpolkitのpkexecにおける本当に危険なメモリ破損の脆弱性、CVE-2021-4034を発見した。

Polkit(以前はPolicyKitとして知られていました)は、systemd SUID-rootプログラムです。これは、すべての主要なLinuxディストリビューションにデフォルトでインストールされています。

どれほど危険ですか?とても危険です。

この脆弱性は悪用が簡単です。そして、これにより、通常のユーザーでも、デフォルト設定でこの脆弱性を利用することで、脆弱なコンピュータ上でフルルート権限を得ることができます。Qualysが問題の簡潔な説明の中で書いているように、「この脆弱性は攻撃者の夢が実現したものです。」

彼らの夢は私たちの悪夢です。

なぜそれがそんなに悪いのか?その理由を数えてみましょう:

  • Pkexecは、すべての主要なLinuxディストリビューションにデフォルトでインストールされています。
  • Qualysは、テストにおいてUbuntu、Debian、Fedora、およびCentOSを利用しており、他のディストリビューションも脆弱であると確信しています。
  • Pkexecは2009年5月の作成以来(コミットc8c3d83、「pkexec(1)コマンドを追加」)、脆弱性が存在しています。
  • 特権のないローカルユーザーは、この脆弱性を悪用して完全なルート権限を取得することができます。
  • この脆弱性は技術的にはメモリ破損ですが、アーキテクチャに依存せず、即座かつ確実に悪用できます。
  • そして、最後に言いたいのは、ポリキットデーモン自体が実行されていなくても、これを悪用することができるということです。

素晴らしい、ただ素晴らしい。

そのプログラム自体が非常に強力であるため、それは非常に危険です。これは、Unix系オペレーティングシステムのシステム全体の権限を制御するためのコンポーネントです。私たちはLinuxが攻撃される可能性があることを知っていますが、Solarisや他のUnixシステムも脆弱である可能性があります。しかし、私たちはOpenBSDはこの脆弱性を利用した攻撃を受けることができないことも知っています。

Red HatはPwnKitの共通脆弱性評価システム(CVSS)スコアを7.8と評価しています。これは高いです。

正しく使用すると、Polkitは特権のないプロセスが特権のあるプロセスと通信するための整理された方法を提供します。また、コマンドpkexecを使用して、ルート権限で実行することを意図したコマンドを続けることで、特権を昇格させたコマンドを実行するためにpolkitを使用することも可能です。

言い換えれば、pkexecはsudoコマンドのようなものです。実際、Debianの開発者たちはこれを「systemdのsudo」と表現しています。

この脆弱性は、12年以上にわたり公然と隠れていたもので、pkexecが環境変数を読み取る方法に問題があります。Qualysによると、短く言うと「私たちのPATHが「PATH=name=.」であり、「name=.」というディレクトリが存在し、「value」という名前の実行可能ファイルが含まれている場合、文字列「name=./value」へのポインタがenvp[0]に対して範囲外に書き込まれる」とのことです。

Qualysはデモンストレーションのエクスプロイトをリリースすることはありませんが、エクスプロイトがすぐに入手可能になると確信しています。正直なところ、PwnKit攻撃を作成するのはそれほど難しくありません。

これは、Linuxディストリビューターからできるだけ早くパッチを取得して適用するべき理由です。オペレーティングシステムのパッチが利用できない場合、一時的な対策としてpkexecからSUIDビットを削除できます。例えば、このルート権限のシェルコマンドは攻撃を止めることができます:

# chmod 0755 /usr/bin/pkexec

すでに攻撃を受けていた可能性はありますか?それは可能です。システムに雑な攻撃があった場合、ログに痕跡が残っているか確認してください。通常、これは「SHELL変数の値が/etc/shellsファイルに見つかりませんでした」または「環境変数[…]の値に疑わしい内容が含まれています。」のいずれかです。

しかし、洗練された攻撃者はログに痕跡を残さずにPwnKit攻撃を行うことができます。

それでは、失礼します。パッチを当てるLinuxマシンがたくさんありますので。あなたのシステムに幸運を祈ります。

関連記事: