Critical RCE Vulnerability in AWS Amplify Studio – PoC Now Public
2025/06/06 gbhackers — 2025年5月に AWS が公開した、深刻なリモートコード実行 (RCE) の脆弱性 CVE-2025-4318 (CVSS:9.5) は、AWS Amplify Studio のUI コード生成パイプラインとコア依存関係を持つ、@aws-amplify/codegen-ui パッケージに存在するものだ。この脆弱性は、UI コンポーネント・スキーマ内の、ユーザー定義 JavaScript 式を処理する、式バインディング・ロジックにおける不適切な入力検証に起因する。

RCE が発生する仕組み
AWS Amplify Studio を使用する開発者は、UI コンポーネントを視覚的に構築し、React コードとしてエクスポートできる。
これらのコンポーネントには、ラベル/プレースホルダー/値などの動的プロパティが取り込まれることが多く、それらは JSON スキーマに格納された JavaScript スニペットとして表現される。
脆弱性 CVE-2025-4318 が存在するバージョン 2.20.2以下では、入力に対するサニタイズやサンドボックス化を行わずに、eval()/new Function()/vm.runInNewContext() などの、安全が確保されない手法により、これらの式が評価されていた。
安全が確保されない評価の例
以下は、脆弱なロジックを示す、簡略化されたコード・スニペットである。
javascript// Vulnerable code in evaluateExpression.ts (pre-patch)
export function evaluateExpression(expression: string): any {
return eval(expression); // UNSAFE
}
このアプローチでは、コンポーネント・スキーマの任意の文字列を、JavaScript として実行できてしまう。したがって攻撃者は、コンポーネント JSON ファイルに悪意の式を挿入することで、任意のコード実行を達成する。
PoC エクスプロイト
典型的な攻撃では、次のような悪意のコンポーネント・スキーマが作成される。
json{
"componentType": "TextField",
"name": "MaliciousRCEComponent",
"properties": {
"label": { "value": "Exploitable Field" },
"placeholder": { "value": "require('child_process').execSync('touch /tmp/rce-success')" }
}
}
脆弱な Amplify codegen プロセスが、このようなスキーマを解析/評価すると、サーバ上でシェル・コマンドが実行され、完全な RCE が実行される。
攻撃対象領域と現実世界におけるリスク
エクスプロイトの前提条件:攻撃者が必要とするのは、Amplify Studio コンポーネントを作成/変更するための権限を持つ、認証済みアクセスをすることである。
潜在的な影響:
- バックエンド・ビルド・システムにおける任意のコード実行
- AWSシークレット/ソースコードなどのデータ窃取
- 悪意のコンポーネントが下流に伝播した場合の、サービス中断またはサプライチェーンの侵害
パッチ適用とセキュア・コーディング
すでに AWS は、バージョン 2.20.3 をリリースし、この脆弱性を修正している。具体的には、安全が確保されない評価方式の、サンドボックス化されフィルタリングされたアプローチへの置き換えが行われている。
この新しいロジックでは、以下の機能を持つ safeEval ラッパーが使用されている。
- 危険なキーワードである、require/process/child_process、eval などのブラックリスト化
- Strict モードで Function コンストラクタを使用することで、疑わしい入力を早期に拒否
javascript// Patched code in evaluateExpression.ts (v2.20.3+)
import { safeEval } from './sandbox';
export function evaluateExpression(expression: string): any {
return safeEval(expression); // Safe wrapper
}
// sandbox.ts
export function safeEval(expr: string): any {
if (!isValidExpression(expr)) {
throw new Error("Unsafe expression detected.");
}
return Function('"use strict"; return (' + expr + ')')();
}
function isValidExpression(expr: string): boolean {
const blacklist = ['require', 'process', 'child_process', 'global', 'Function', 'eval'];
return !blacklist.some(word => expr.includes(word));
}
緩和策と推奨事項
- 速やかなアップグレード:すべてのユーザーにとって必要なことは、@aws-amplify/codegen-ui v2.20.3 以降へのアップデートである。
- コンポーネント監査:すべての既存コンポーネント・スキーマを確認し、疑わしい式や予期しない式を確認する。
- アクセス制御:コンポーネントの編集権限を、信頼できるユーザーだけに制限する。
- フォーク・コード:カスタム・フォークまたは派生コードにはパッチが組み込まれない。
- セキュア・コーディング:ユーザー対応コンテキストにおける動的なコード評価を避け、厳格な入力検証と静的解析ツールを使用する。
このインシデントが浮き彫りにするのは、ローコード・プラットフォームにおける、入力検証とサンドボックス化の重要性である。ユーザーが提供する式は、不適切な処理により、大きな影響を与える攻撃ベクターへと変化する可能性を持つ。
AWS Amplify Studio ユーザーは、環境のセキュリティを確保し、継続的なコード安全性のためのベスト・プラクティスを導入するために、迅速に行動する必要がある。
AWS Amplify Studio の深刻な脆弱性ですが、ローコード開発の利便性と安全性のバランスが難しそうですね。PoC が提供されたことで、悪用の確率が高まると予測されます。なお、この脆弱性の第一報は、2025/05/07 の「AWS Amplify Studio 脆弱性 CVE-2025-4318 (CVSS v4:9.5) が FIX:直ちにアップデートを!」となります。ご利用のチームは、ご注意ください。
You must be logged in to post a comment.