「PinTheft」と呼ばれる公開の概念実証(PoC)エクスプロイトが、特定のシステム上でローカル攻撃者がRoot権限に昇格することを可能にする新たに開示されたLinuxカーネルの脆弱性に対してリリースされました。
PinTheftはLinuxローカル権限昇格(LPE)エクスプロイトで、信頼できるデータグラムソケット(RDS)のゼロコピー送信パス内の参照カウント不具合を標的とし、io_uring固定バッファを使用するページキャッシュ上書きに変換します。
この問題は、カーネル関数rds_message_zcopy_from_user()がユーザーページを1つずつピンし、後のページフォルト時のクリーンアップを誤って処理し、既にピン留めされたページへの参照が二重にドロップされることから生じます。
失敗したゼロコピー送信は、最初のピン留めされたページから1つの参照を効果的に「盗み」、制御可能な参照カウント低下条件を作成し、これを悪用することができます。
PinTheft Linuxの脆弱性
PinTheft PoCはRDS参照カウント不具合をio_uringの固定バッファ機構と組み合わせて、SUID-rootバイナリのページキャッシュを上書きしてからRoot権限でカスタムペイロードを実行します。
まずio_uringを使用して匿名ページを固定バッファとして登録します。これにより、ページは1024の参照の FOLL_PIN バイアスを取得します。
その後、io_uringが依然として生のページポインタを保持しているのに対して、それらの参照を消費するために、失敗したRDSゼロコピー送信を繰り返し発生させます。

その物理ページをSUID-rootバイナリのページキャッシュ内の最初のページとしてきれいに解放して再取得した後、エクスプロイトはSUID-rootバイナリを実行すると小さな埋め込みELFペイロードをページキャッシュに上書きできるようにするため、古いio_uring固定バッファエントリを悪用してRootシェルを生成します。
悪用には複数の狭い前提条件が必要です。カーネルはCONFIG_RDSおよびCONFIG_RDS_TCPでビルドされる必要があり、io_uringが有効である必要があります。io_uring_disabled=0、RDS/RDS_TCPモジュールがロード可能である必要があり、カーネルは完成したIOCING_REGISTER_CLONE_BUFFERS API(公開PoCはカーネル6.13以降をターゲット)をサポートする必要があります。
エクスプロイトはバンドルされたペイロード用のx86_64上で読み取り可能なSUID-rootバイナリが必要で、モジュール自動ロードを許可するシステムではSO_RDS_TRANSPORT=2を使用してTCPトランスポートをリクエストすることで、存在する場合はrds_tcpを自動ロードできます。
研究者らは、RDSモジュルがデフォルトでArch Linuxで有効化されていることを指摘し、彼らがテストした一般的なディストリビューション中で、Archユーザーが即座の主なターゲットになります。同時に、他の多くのメインストリームディストロカーネルはデフォルトではエクスポーズされていません。
研究者Aaron Esauが率いるV12セキュリティチームは、自動分析プラットフォームを使用して不具合を発見し、カーネルパッチが利用可能になった後に動作するPoCをリリースしました。
エクスプロイトコードはv12-security「pocs」GitHubリポジトリのpintheftディレクトリ下で公開されており、詳細なREADMEとメインのpoc.cファイルが含まれています。脆弱なシステムでは、コンパイルと実行は簡単です。例えば:
git clone https://github.com/v12-security/pocs.git && cd pocs/pintheft && gcc -o exp poc.c && ./exp
PoCは/usr/bin/su、/bin/su、/usr/bin/mount、/usr/bin/passwd、/usr/bin/pkexecなどの一般的なSUID-rootターゲットを自動的に検索し、選択されたバイナリを/tmp/.backup_<name>_<pid>の下にバックアップして、完全な悪用チェーン全体を実行してからオペレーターをRootシェルにドロップします。
軽減とセキュリティ強化のガイダンス
管理者は、ディストリビューション用に利用可能になったら上流カーネルパッチをデプロイすることを強く求められ、特にRDSが有効またはArch Linuxカーネルが使用されているシステム上では推奨されます。
RDSを必要としないシステムの即座の軽減策として、ディフェンダーはrmmod rds_tcp rdsでアクティブなモジュールを削除し、printf ‘install rds /bin/false\ninstall rds_tcp /bin/false\n’ > /etc/modprobe.d/pintheft.confなどのmodprobe規則を追加して将来のロードをブロックできます。
セキュリティチームはまた、公開されたホスト上に存在する必要なSUID-rootバイナリを確認し、ページキャッシュ上書きスタイルのエクスプロイトの実践的な影響を制限するためにSUID足跡の削減を検討する必要があります。
翻訳元: https://gbhackers.com/poc-released-for-pintheft-linux-flaw/