OATH-Toolkit の CVE-2024-47191 が FIX:PAM Module が引き起こす root 侵害に対応

CVE-2024-47191: Critical Flaw in OATH-Toolkit PAM Module Could Lead to Root Exploits

2024/10/06 SecurityOnline — OATH-Toolkit の PAM モジュールに、深刻な脆弱性が発見された。この脆弱性により、One-Time Password (OTP) 認証を処理する際に、ルート・レベルのエクスプロイトに、システムがさらされる可能性が生じている。この脆弱性 CVE-2024-47191 は、SUSE のエンジニアである Fabian Vogt からの内部報告を受けた、SUSE Security Team の Matthias Gerstner により特定されたものだ。この脆弱性は、OTP ベースの2要素認証において、oath-toolkit を使用しているシステムに影響を及ぼすため、このモジュールを活用しているシステムでは深刻な脅威となる。

OTP の管理に広く使用される oath-toolkit は、パスワード認証の二番目の要素として多用される傾向にある。この問題は、バージョン 2.6.7 で導入された、ユーザーのホーム・ディレクトリに OTP 状態ファイル (usersfile) を保存する機能に起因する。それらのディレクトリで、PAM モジュールがファイル操作を実行する際の方式に、この脆弱性は存在するという。

Gerstner は、「ユーザーのホーム・ディレクトリで、PAM モジュールが安全ではないファイル操作を実行していることに、Fabian が気づいた。通常において、PAM スタックは root として実行されるため、セキュリティ上の問題が簡単に発生する可能性が生じている。${HOME} や ${USER} などの、パスの拡張ロジックが適切に保護されていないため、深刻なセキュリティ上の欠陥につながる」と述べている。

脆弱性 CVE-2024-47191 の根本的な原因は、OTP 認証中の PAM モジュールによる、ユーザー・ファイルとのインタラクションにある。ユーザーが認証すると、PAM モジュールにより、liboath ライブラリの oath_authenticate_usersfile() 関数が呼び出される。この関数は、一連のファイルへのアクセスを管理する役割を担っている。しかし、Gerstner が指摘するように、「権限は削除されず、また、この関数は、特別な権限を持つ PAM コンテキストを認識しない」という問題が生じてしまう。

この欠陥により、権限のないユーザーであっても、root 権限で実行される PAM スタックを悪用することで、ファイルの操作が可能になってしまう。たとえば、ホーム・ディレクトリにシンボリック・リンク (symlink) を作成することで、悪意のユーザーはシステムを騙して、”/etc/shadow” などの重要なファイルを上書きさせ、事実上のルート・アクセスを取得してしまう。

Gerstner は、「このエクスプロイトがトリガーされる手順は、きわめて容易なものである。つまり、/etc/shadow が上書きされ、その所有権が認証対象のユーザーに変更される。したがって、認証対象のユーザーは完全なルート権限を取得できる。競合状態に勝つ必要はなく、パス名を推測する必要もない」と説明している。

このエクスプロイトのシナリオは直接的であり、複雑な条件やタイミングを必要としないため、緊急に対応すべきセキュリティ脅威となっている。

SUSE Security Team は、この脆弱性に対処するために迅速に行動した。元のアップストリーム作成者と協力して、問題を修正するパッチを、すでに開発している。しかし、このタスクは当初の予想よりも複雑だったという。

このレポートで Gerstner は、「PAM モジュールは、対象となるユーザー・ファイルの所有者が、root ユーザー/認証されるユーザー/無関係なユーザーの、誰になるのかを正確に知ることができない。特定された主要な問題の1つは、壊れたロック・メカニズムだった。元の形式では、モジュールのロック・ファイルが途中でリンク解除され、競合状態が発生する可能性がある。さらに、ロック・ファイルをユーザーのホーム・ディレクトリに保存すると、ディレクトリが乱雑になり、ローカル・サービス拒否につながる可能性が生じる」と述べている。

これらの問題に対処するために SUSE は、いくつかの重要な対策を実装した。

  • ユーザー・ファイル・パスは、シンボリック・リンク攻撃を防ぐシステム・コールを使用して。安全にトラバースされるようになった。
  • 権限はユーザー・ファイルの所有者に委譲され、権限のエスカレーションの可能性が軽減された。
  • ユーザーのホーム・ディレクトリが乱雑にならないようにするため、ロック・メカニズムが全面的に見直され、ロックにはユーザー・ファイル自体が使用されるようになった。

この包括的なパッチは、現在の SUSE 製品で使用されているが、より移植性の高いアップストリーム・ソリューションも、oath-toolkit バージョン 2.6.12 でリリースされている。

その一方で、oath-toolkit のアップストリーム開発者も、修正プログラムをリリースしており、それがバージョン 2.6.12 に取り込まれている。彼らのアプローチは、クロスプラットフォーム互換性の向上を目指すものだが、すべての検討されるべきユース・ケースに、SUSE Security Team が対応しているわけではない。ただし、どちらのソリューションも、コアの脆弱性を解決し、壊滅的な権限昇格攻撃からシステムを保護するものとなる。