6クリックでRoot権限へ:EspoCRMのFormulaエンジンがサーバ乗っ取りのゲートウェイになった仕組み

広く普及しているEspoCRMカスタマー管理アーキテクチャ内で脆弱性が発見されました。これは管理者アクセスをサーバへの絶対的な支配権に変換する深刻な欠陥です。わずか6つのリクエストで管理者ダッシュボードからシステムコマンド実行までの溝を渡ることができます。CVE-2026-33656の識別子で分類されたこの問題はEspoCRMバージョン9.3.3を侵害しています。この脆弱性はApacheウェブサーバーとペアになった標準イメージの法医学的な分析中に明らかになりました。アプリケーションはwww-dataユーザーの権限で動作しています。

EspoCRM自体はオープンソースのカスタマー関係管理パラダイムであり、中小企業によって頻繁に推奨されています。そのアーキテクチャ内にはプロセス自動化、トランザクション調整、メール機能、そして独自のスクリプティングエンジンが含まれています。この特定のエンジンがまさに今回の攻撃の原因となっています。

EspoCRM内に埋め込まれている「Formula Engine」と呼ばれるものがあります。これはスクリプティング言語であり、管理者はデータを変換したり、プロセスを開始したり、専用インターフェース経由でロジックを厳密に検証したりできます。このサンクタムへのアクセスは管理者認証情報に限定されており、基本的にはセキュリティの雰囲気を投影しています。しかし、このエンジン自体が個別フィールドのレベルで内部的な制限を容赦なく回避することが明らかになりました。

正規のインターフェースおよびAPI経由では、これらのフィールドの一部が強化されています。例えば、特定の値は「読み取り専用」として明確にマークされており、明示的なリクエストを受けた場合でも変更不可のままです。しかし、Formula Engineはまったく異なるパスを辿り、そのような制限をあからさまに無視しながらデータを直接書き込みます。その結果、管理者はシステムロジックに従えばまったく変更不可であるはずのフィールドを変更することができるようになります。

重要な要素はattachmentに関連するsourceIdフィールドであることが判明しました。このフィールドはディスク上のファイルの物理的なパスを指定します。通常の状況下では、アーキテクチャはこの値を自動的に割り当て、その変更を厳しく禁止しています。しかし、Formula Engineを通じて、この厳格な制限は簡単に回避されます。その後、攻撃者は任意のパスにシームレスに置き換えることができます。たとえば、指定されたアップロードディレクトリをはるかに超えたところにあるファイルに向けることができます。

その後、最も興味深いフェーズが始まります。アーキテクチャは文字列の基本的な連結によってファイルパスを作成しており、検証が全くありません。サニタイゼーションが完全に欠如しており、制限がまったくありません。その結果、2つの悪用の経路が同時に展開されます。

第一に、任意のファイル抽出があります。アプリケーションの基本的な設定またはデータベース認証情報を含むアーカイブを収集するために、パスを改ざんするだけで十分です。

次に、任意の場所へのファイル書き込みがあります。EspoCRMはファイルの段階的なアップロードをサポートしています。アップロードシーケンス前にパスを変更すると、アーキテクチャは攻撃者が指定した場所にデータを正確に書き込みます。したがって、Webブラウザからアクセス可能なディレクトリを含め、カスタムアーティファクトをシームレスに書き込むことができます。

最後に1つの微妙な点が残ります。標準的なインストール上では、サーバは常にそのようなアーティファクトを実行可能コードとして実行するわけではありません。しかし、この障害は.htaccess設定ファイルを通じて優雅に回避されます。攻撃者が必要な命令をそこに注入することで、サーバはアップロードされたアーティファクトをスクリプトとして実行するよう強制されます。その後、特定のアドレスにアクセスするだけで、サーバはコマンド実行を即座に開始します。この攻撃のデモンストレーションでは、アーキテクチャはWebサーバが動作するwww-dataユーザーの特権で応答しました。

この脆弱性はファイルの書き込みと抽出にとどまらない深刻な損害をもたらします。この同じメカニズムはデータベース内に隠されたフィールドを読み取ることができます。これらの中にはユーザーパスワードの暗号化ハッシュとアクティブなセッショントークンが含まれています。このような無制限のアクセスはシステムの深部への継続的な攻撃への道を開きます。

改善は驚くべき速さで発表されました。EspoCRMバージョン9.3.4では、アーキテクトはbasename関数を使用したファイル名のサニタイゼーションを統合し、指定されたディレクトリを超えようとする試みを容赦なく遮断しました。これらの強化はファイルパスが作成される複数の場所に同時に適用されました。この介入後、攻撃の動作チェーン全体が完全に麻痺しました。

注目すべきことに、Formula Engine自体は変更されませんでした。プロジェクトのアーキテクトはフィールドレベルでの検証がないことは単なる見落としではなく、意図的なアーキテクチャ設計であると強く主張しています。それでも、この特定の動作とファイル処理アーキテクチャ全体の不幸な結合がこの重大な脆弱性を生み出しました。アーキテクトは問題の最初の開示からわずか1日以内に修正を発表しました。現在、ユーザーはバージョン9.3.4またはそれ以降にできるだけ早くアップグレードすることを強く推奨されています。

翻訳元: https://meterpreter.org/six-clicks-to-root-how-espocrms-formula-engine-became-a-gateway-for-server-takeover/

ソース: meterpreter.org