Apache OFBizの重大な認証回避の脆弱性により、攻撃者は強制パスワード変更フローを乗っ取り、単一のHTTPリクエストを介してリモートコード実行(RCE)を達成できます。24.09.06より前のすべてのバージョンに影響を与えます。
- CVE ID: CVE-2026-45434
- CVSS 3.1スコア: 8.8(高)
- 影響を受けるバージョン: Apache OFBiz < 24.09.06
- パッチ版: Apache OFBiz 24.09.06
- 開示日: 2026年5月20日 | 研究者: Aretiq AI
Apache OFBiz RCEの脆弱性
Apache OFBizはビジネスプロセスを管理するために使用されるオープンソースエンタープライズリソースプランニング(ERP)プラットフォームです。
管理者がrequirePasswordChange=Yでユーザーアカウントにフラグを立てる場合(認証情報漏洩後またはオンボーディング中など)、そのアカウントはパスワードリセットが完了するまで、すべての機能からロックされるべきです。
Aretiq AIの研究者は、LoginWorker.checkLogin()メソッドがrequirePasswordChangeの戻り値を認証失敗として扱わないことを発見しました。
メソッドが文字列「error」のみをチェックするため、基盤となるlogin()関数からの「requirePasswordChange」レスポンスはサイレントに成功したログインとして通過します。
第2の欠陥と組み合わせて、requirePasswordChangeフラグがデータベースではなく攻撃者が制御可能なHTTPリクエストパラメータから直接読み取られるため、攻撃者は単一のPOSTリクエストで保護されたエンドポイントにパスワード変更フローを注入できます。
これら2つの認証欠陥と、ProgramExport.groovyの3番目の問題(24.09.06より前のバージョンではパーミッションチェックとGroovyサンドボックスが不足)をチェーンすると、OFBizプロセスユーザーとしての完全なリモートコード実行が可能になります。
エクスプロイトは3つのステップで機能します:
- checkLogin()経由の認証回避: メソッドは「error」.equals(login(request, response))のみを評価します。login()が「requirePasswordChange」を返すと、比較がfalseと評価され、メソッドが「success」を返します。実際の認証チャレンジを完了することなくアクセスを許可します。
- クライアント制御フラグ注入: requirePasswordChangeフラグはrequest.getParameter(“requirePasswordChange”)を経由してHTTPリクエストから直接読み取られます。攻撃者はrequirePasswordChange=Yパラメータを有効な認証情報と選択した新しいパスワードとともに送信します。これはupdatePasswordサービス経由でインラインパスワード変更をトリガーし、単一のリクエスト内で完全に認証されたセッションを確立します。
- ProgramExport経由のサンドボックスなしのGroovy実行: 脆弱性のあるバージョンでは、ProgramExport.groovyはユーザー提供のGroovyコードを、パーミッション検証なし、SecureASTCustomizerなし、危険パターンブロッキングリストなしのプレーンなGroovyShellを使用して評価します。これにより攻撃者にフルJVMアクセスを与え、Runtime.getRuntime().exec()を介したOSコマンド実行が可能になります。
OFBiz 24.09.05でのテストでは、/webtools/control/ProgramExportへの単一の細工されたPOSTリクエストでuid=0(root)のRCEが発生しました。
Apache OFBizは10個以上のデモアカウント(admin、flexadmin、demoadmin、ltdadminを含む)が付属し、すべてデフォルトパスワードofbizを使用しています。
つまり、開発、ステージング、最近デプロイされた本番インスタンスは事前偵察なしで簡単に悪用可能です。また、この脆弱性はCVE-2023-51467との類似性でも注目に値します。これは関連するrequirePasswordChangeロジック欠陥で、MITRE/NVDによって9.8と評価されています。
影響を受ける製品
Apache OFBiz 24.09.06より前のすべてのバージョン(18.12.xブランチ全体と24.09.x~24.09.05を含む)cpe:2.3:a:apache:ofbiz:*:*:*:*:*:*:*:*
Apacheは3つのコミット経由でバージョン24.09.06の脆弱性に対処しました:
- コミット6516157 – クライアント制御のrequirePasswordChange HTTPパラメータを完全に削除します。login()内の以前の「requirePasswordChange」戻りパスはすべて「error」を返すようになります。フラグはデータベースユーザーレコードからのみ読み取られるようになります。
- コミット771efc4 – ProgramExport.groovyにENTITY_MAINTパーミッションチェックを追加し、未認証またはローレベルアクセスをブロックします。
- コミットc0592a3 – SecureASTCustomizerを使用してProgramExport.groovyに厳密なGroovyサンドボックスを導入し、9つのOFBizエンティティクラスに限定されたインポートホワイトリスト、レシーバホワイトリスト、およびRuntime、ProcessBuilder、.execute()およびそれに類似する危険な呼び出しをブロックする40以上のパターン正規表現ブロッキングリストを含みます。
検出とミティゲーション
ネットワーク検出(Suricata): /webtools/control/ProgramExportへのHTTP POSTリクエストでrequirePasswordChange=YとgroovyProgramの両方がリクエスト本文に含まれている場合をモニタリングします。この組み合わせは正当なOFBiz使用には表示されません。
ホストベース検出(YARA): LoginWorker.javaでパターンrequest.getParameter(“requirePasswordChange”)(脆弱性あり)対userLogin.getString(“requirePasswordChange”)(パッチ適用)をスキャンします。ProgramExport.groovyでSecureASTCustomizerとENTITY_MAINTの存在または不在をスキャンします。
即座のミティゲーション手順:
- Apache OFBiz 24.09.06に直ちにアップグレードします。
- すべてのデモアカウント(admin、flexadmin、demoadmin等)を削除または無効化するか、OFBizインスタンスをネットワークに公開する前にデフォルトパスワードを変更します。
- WaFまたはリバースプロキシレイヤーで/webtools/control/ProgramExportへのアクセスを制限します。
- すべてのユーザーアカウントのrequirePasswordChange=Yフラグを監査し、アップグレード後に正しく実施されていることを検証します
翻訳元: https://gbhackers.com/apache-ofbiz-rce-flaw-abuses-password-change-restrictions/