PwnKitのローカル権限昇格エクスプロイトを分析する
Kyle Suero
2022年1月29日
0 分で読めますLinuxの脆弱性と自然災害に共通するものは何でしょうか?一見休眠しているように見えるものが突然活動を始め、表面下の動きを露呈させることがあります。数日前、あるセキュリティ研究者が、主要なLinuxディストリビューションのほとんどに影響する重大な脆弱性「PwnKit」を公表しました。恐ろしいのは、この脆弱性が2009年5月から存在していたことです。
Polkitは、Unix系オペレーティングシステムで権限を管理するコンポーネントで、主要なLinuxディストリビューションのほとんどに標準で含まれています。Polkitに含まれるpkexecコマンドは、昇格した権限でコマンドを実行するために使われ、systemdのsudoとも呼ばれています。
今回のPolkitの脆弱性は、もはや休眠状態の脅威ではありません。Linuxベースのオペレーティングシステムで広く使われているこのコンポーネントには、2009年の登場以来、長年にわたって脆弱性が潜んでいました。Fedoraで初めて使われたこのポリシー制御の仕組みは、その後、さまざまなオペレーティングシステムに広く普及しました。
この脆弱性を悪用すると、ローカルで実行する一般ユーザーがバッファオーバーフローを通じてメモリを破損できます。Qualysチームが実証したように、このオーバーフローを悪用すれば、完全なroot権限を取得できます。2013年にはRyan Mallonがこの脆弱性を報告し、メンテナーにパッチを提出しました。しかし、Mallonは脆弱性の悪用方法を見つけられず、パッチが適用されることもありませんでした。
この不具合の根本原因は、コマンドライン引数の処理にあります。LinuxのCプログラムでは、最初の引数(argv[0])は通常、実行ファイル名です。しかし、execve関数を呼び出すと、実行ファイル名を含まない空のリストを指定できます。このような場合、コードがargv[0]は常に存在すると想定していると、メモリ破損の脆弱性につながる可能性があります。この引数処理の根本的な問題はほかのバイナリにも存在しますが、pkexecはSUIDであり、特殊なファイル権限によって、実行したユーザーではなくファイルの元の所有者として実行されます。そのため、特別なケースです。
ここでは詳しい説明は省きます。詳細は元の開示情報に記載されています。pkexecコマンドに引数がないと、引数リストが空になり、メモリが破損します。その結果、攻撃者は対象ホストで完全なroot権限を取得できます。
PwnKitからシステムを守るためにパッチを適用する
PwnKitのエクスプロイトは非常に簡単で、すでに実際に悪用されています。幸い、パッチは非常に迅速に提供されました。すぐにオペレーティングシステムの更新をすべてインストールしてください。
オペレーティングシステムの更新をインストールできない場合は、pkexecコマンドを使ってchmodからSUIDビットを手動で削除する方法が適切な回避策です。
このエクスプロイトは、広く使われ、多くの人が長年にわたってソースコードを確認してきたオープンソースアプリケーションであっても、深刻な脆弱性が長期間検出されずに存在する可能性があることを改めて示しています。
セキュリティの脅威を軽減するには、セキュリティパッチを常に最新の状態に保つことが欠かせません。ソフトウェアのデプロイにコンテナを利用している場合は、これらのオペレーティングシステムのパッチを含む更新済みイメージへの切り替えを検討してください。Snyk Containerを利用すれば、PwnKitのような脆弱性をコンテナ内で簡単に検出し、修正できます。Snykは問題を修正した更新済みベースイメージや、自分で適用できる修正またはパッチを案内します。
開発者ファーストのコンテナセキュリティ
Snykは、コンテナイメージとKubernetesワークロードの脆弱性を検出し、自動的に修正します。
脆弱性のあるオペレーティングシステム
RedHat
Red Hat Enterprise Linux 6
Red Hat Enterprise Linux 7
Red Hat Enterprise Linux 8
Red Hat Virtualization 4
Ubuntu:
Ubuntu 21.10
Ubuntu 20.04
Ubuntu 18.04
Ubuntu 16.04
Ubuntu 14.04
Suse:
HPE Helion Openstack 8
SUSE CaaS Platform 4.0
SUSE Enterprise Storage 6
SUSE Enterprise Storage 7
SUSE Linux Enterprise High Performance Computing 15
SUSE Linux Enterprise Micro 5
SUSE Linux Enterprise Module for Basesystem 15
SUSE Linux Enterprise Server 12
SUSE Linux Enterprise Server 15
SUSE Linux Enterprise Server for SAP Applications 12
SUSE Linux Enterprise Server for SAP Applications 15
SUSE Linux Enterprise Software Development Kit 12
SUSE Manager Proxy 4
SUSE OpenStack Cloud 8
SUSE OpenStack Cloud 9
SUSE OpenStack Cloud Crowbar 8
SUSE OpenStack Cloud Crowbar 9
openSUSE Leap 15
注: SUSE Linux Enterprise 11は旧世代のPolicyKit-1を使用しているため、影響を受けません。



