Directus の脆弱性 CVE-2024-27295 が FIX:アカウント乗っ取りにつながる恐れ

CVE-2024-27295: Directus Flaw Opens Door to Account Takeovers

2024/03/07 SecurityOnline — 多用途のオープンソース・コンテンツ管理プラットフォームである Directus に、脆弱性 CVE-2024-27295 が発見された。この脆弱性により、何千ものプロジェクトにおいて、アカウント乗っ取り攻撃の可能性が生じている。Directus は、その柔軟性と豊富なカスタマイズ・オプションにより、開発者たちに支持されている。具体的に言うと、Docker Pull 2,700 万以上/GitHub Star 約25,000/npm DL 49,000 件/月という状況であり、コンテンツ管理者たちの基盤としての地位を確立している。


この脆弱性 CVE-2024-27295 (CVSS:8.2) は、Directus バックエンドのパスワード・リセット機構に潜む、深刻なバグに起因している。この脆弱性は MySQL と MariaDB のコンフィグと複雑に関連しており、悪用に成功した攻撃者は、パスワード・リセット・プロセスを乗っ取ることができる。

脆弱性の発生原因

この脆弱性は、下記の組み合わせが原因で発生している:

  1. Directus のパスワード・リセットの欠陥:Directus のパスワード・リセット・システムが、パスワード・リセット・リンクを送信する際の、メール・アドレスの取得方法に欠陥がある。Directus は、データベースに保存されている正規のメール・アドレスではなく、リセットのリクエストと共に送信されたアドレス宛に、リセット・リンクを送信してしまう。
  2. MySQL/MariaDB:これらのデータベースのデフォルト・コンフィグでは、データの一部を比較する際に、アクセント記号付きの文字 (ü など) を、アクセント記号なしの文字 (u) と同じように扱うことがある。この精度の低さは、セキュリティ上致命的となり得る。

    MySQL weak comparison:
    select 1 from directus_users where ‘julian@cure53.de‘ = ‘julian@cüre53.de‘;

    これは API のエラーであり、データベースに保存された正規のメール・アドレスではなく、提供されたメール・アドレスをパスワード・リセット・メールの送信に使用してしまう。したがって、この欠陥は、攻撃者に悪用される可能性がある。
再現するための手順

以下のシナリオを想像してほしい:

  • 被害者のアカウント:たとえば、”julian@cure53.de” というメールアドレスを使用しているユーザーが、Directus が運営する Web サイトにアカウントを持っているとする。
  • 攻撃の準備:この脆弱性を悪用しようとする攻撃者は、アクセント記号が1文字違うだけの、julian@cüre53.de という、よく似た文字列のメールアドレスを作成する。
  • 脆弱性を悪用する:攻撃者は、被害者のアカウント (julian@cure53.de) に対して、偽のメール・アドレス (julian@cüre53.de) を使って、パスワード・リセットのリクエストを送信する。Directus とデータベースの複合的な欠陥から、偽のアドレスは正規のものだと判定され、パスワード・リセット・リンクが、攻撃者のアドレスに送信される。
アカウントが完全に乗っ取られる

攻撃者は、リセット・リンクにより、被害者のアカウントを完全にコントロールできるようになる。それにより、以下のような事態が発生する可能性がある:

  • 機密データの漏洩:攻撃者は、アカウントに保存されている機密情報にアクセスし、それらを盗み出す可能性がある。
  • 評判の低下:被害者になりすました攻撃者が、悪意のアクションを実行することで、被害者の評判を傷つけ、より広範なシステムに影響を及ぼす可能性がある。
  • 攻撃のエスカレーション:侵害されたアカウントを足がかりに、システム内の脆弱性を悪用した、さらなる攻撃を仕掛ける可能性がある。
自分の身を守るには
  • ただちにアップグレードをする:この脆弱性を解決するパッチが含まれている Directus 10.8.3 以降に、直ちにアップグレードする。
  • セキュリティのベスト・プラクティスを実施する
    • 強力なパスワード・ポリシーを導入し、複雑でユニークなパスワードを作成するようユーザーに求める。
    • 二要素認証 (2FA:Two-Factor Authentication) を有効にして、保護レイヤーの追加を検討する。
    • 定期的なセキュリティ監査を実施し、潜在的な弱点を特定する。
  • データベースの設定を見直す:
    • MySQL/MariaDB のユーザーは、文字比較 (照合順序) に関するデータベース構成設定を見直す。メールアドレスのような機密データに対して、より厳格な文字照合を行うように調整する。