AWS Amplify Studio の脆弱性 CVE-2025-4318 (CVSS:9.5):PoC がリリース

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 ユーザーは、環境のセキュリティを確保し、継続的なコード安全性のためのベスト・プラクティスを導入するために、迅速に行動する必要がある。