Vesta Control Panel ハッキング:ブルートフォースで Admin アカウントを侵害する PoC とは?

Vulnerability in Vesta Control Panel Exposes Admin Accounts

2024/10/02 SecurityOnline — Linux サーバの管理で多用される Web ベースのインターフェースである、Vesta Control Panel に深刻な脆弱性が存在することが、Fortbridge の Cloud Application Security Consultant である Adrian Tiron により判明した。この脆弱性の悪用に成功した攻撃者は、Bash の $RANDOM 変数のシード・エントロピー低下を介してで、管理者アカウントの乗っ取りを達成するという。

シンプルさで知られる Vesta により、ユーザーはホスティング/ドメイン/データベースを簡単に管理できる。しかし、使いやすさを優先する多数のシステムと同様に、セキュリティが後回しにされることもある。今回のケースで注目すべきは、コア機能である Vesta のパスワード・リセット機能が、$RANDOM を使用してトークンを生成する bash スクリプトに依存している点だ。この問題は、$RANDOM が暗号的に安全ではなく、使用するシードがブルートフォースにより推測される可能性があることを示している。

Vesta でパスワード・リセットが要求されると、bash $RANDOM 変数を使用してトークンが生成され、電子メールでユーザーに送信される。このトークンは、パスワード・リセットに不可欠なものであり、ユーザーのコンフィグ・ファイルにも保存される。 $RANDOM 変数は 0〜32,767 の、疑似ランダム整数を生成する。この整数はランダムに見えるが、適切なツールを使用すれば予測も可能である。

Adrian Tiron の研究では、BashRandomCracker というツールが活用された。この研究は、いくつかのサンプルから $RANDOM が使用するシードを、リバース・エンジニアリングするためのプロジェクトである。その結果として、3つの $RANDOM 値を提供することで、パスワード・リセット・トークンを生成する値を取り込んだ値が予測できたという。

この脆弱性は、Bash が乱数ジェネレーターをシードする方法に起因する。シードを設定する sbrand() 関数は、カレントの timestamp (tv_sec)/microseconds (tv_usec)/process ID (getpid) に依存するものである。ただし、この関数は、タイムスタンプの下位 20 Bit のみを変更するため、エントロピーが大幅に減少している。つまり、攻撃者は、最後のパスワード・リセット・タイムスタンプを中心とした、はるかに狭い範囲にブルート フォース攻撃を集中させることが可能となる。

このエントロピーの減少を、攻撃者は以下のように悪用できる。

  1. タイムスタンプ範囲の計算:タイムスタンプの下位 20 Bit のみがシードに影響するため、攻撃者はシードが含まれる可能性のあるタイムスタンプの範囲を計算できる。通常は、カレント・タイムスタンプ前後の約 12日間となる。
  2. シードのブルートフォース攻撃: この範囲を反復処理して悪意のリセット・トークンを生成することで、正規のリセット・トークンの形式と比較し、一致するものを見つけることが可能になる。
  3. 管理者パスワードのリセット:正しいリセット・トークンが見つかると、それを悪用する攻撃者は、管理者パスワードをリセットし、Vesta Control Panel を完全に制御できるようになる。

Adrian Tiron は、bashrand の拡張バージョンを用いて PoC エクスプロイトを開発し、この攻撃の実現可能性を実証しました。タイムスタンプの範囲を狭めることで、ブルートフォース攻撃の試行回数を、40 億回以上から約 3,100 万回に減少できたという。それは、大幅な最適化であり、攻撃を実用的にするものだ。

さらに、Turbo Intruder などのツールを使用すると、各種のリセット・トークンを使用して、HTTP リクエスト送信を自動化できるため、悪用プロセスが高速化されるという。