KeyFrame內部研究專用

Black Hat USA 2025 | ECS-cape – Hijacking IAM Privileges in Amazon ECS

Black Hat·3月18日週三·36 min英文

三句話摘要

安全研究員在 AWS ECS EC2 模式中發現「ECS Escape」漏洞,允許低權限容器冒充 ECS 代理劫持同一實例上所有其他任務的 IAM 憑證。 在 ECS EC2 模式中,IMDS 預設可存取使得任何任務都能冒充 ECS Agent、劫持同實例全部任務憑證,且攻擊在 CloudTrail 中留不下痕跡——封鎖任務對 IMDS 的存取並嚴格隔離高低權限工作負載是目前唯一可靠的防禦手段。 漏洞根源在於 IMDS 預設可存取:ECS EC2 模式中,實例上每個任務預設都能存取 IMDS,取得與 ECS Agent 相同的實例角色憑證,這讓任務具備冒充代理的前提條件。

重點整理

重點
  • 1

    漏洞根源在於 IMDS 預設可存取:ECS EC2 模式中,實例上每個任務預設都能存取 IMDS,取得與 ECS Agent 相同的實例角色憑證,這讓任務具備冒充代理的前提條件。

  • 2

    ACS 協議洩漏全部任務憑證:ECS Agent 透過 ACS(Agent Communication Service)內部 WebSocket 協議與 AWS 控制平面通訊,控制平面會將同一實例上所有任務的任務角色與任務執行角色憑證一次性下發,這是攻擊的核心利用點。

  • 3

    CloudTrail 日誌無法偵測攻擊:劫持後使用憑證的行為在日誌中顯示為原始合法任務所發出,既無攻擊者容器的痕跡,也無憑證劫持的記錄,使防禦方幾乎無從察覺。

  • 4

    AWS 認定屬消費者安全責任:AWS 回應表示 ECS Agent 在消費者安全邊界內運作,容器本身不構成安全邊界,並更新文件說明同一 EC2 實例上的任務可能存取其他任務的憑證。

實用技巧與重點

乾貨
  • 漏洞名稱:ECS Escape(ECS Cape)
  • 影響範圍:使用 EC2 啟動模式的 Amazon ECS,佔編排技術使用者約 1/3
  • 發表場合:Black Hat Las Vegas 2025
  • 研究者:Noah Haz,Sweet Security 軟體開發與安全研究員
  • 開源工具:ECS Escape CLI,GitHub 可搜尋,以 Rust 撰寫
  • 攻擊步驟(5步)
  • 透過 IMDS(`169.254.169.254`)取得 EC2 實例角色臨時憑證
  • 呼叫 `DiscoverPollEndpoint` API 取得 ACS WebSocket URL
  • 透過容器自省 API 取得 Container Instance ARN
  • 透過 IMDS + 任務元數據端點 v4 取得其餘識別符
  • 建立 ACS WebSocket 連線(`send_credentials=true`),接收所有任務憑證明文
  • 可劫持的憑證類型
  • 其他任務的任務角色(Task Role)
  • ECS 自身的任務執行角色(Task Execution Role),可讀取 AWS Secrets Manager 中的密鑰
  • 緩解措施
  • 用 IP Tables 規則封鎖任務對 IMDS 的存取(不可在實例層級封鎖,否則 ECS Agent 失效)
  • 禁止任務角色擁有 `ecs:Poll` 與 `ecs:DiscoverPollEndpoint` 權限
  • 禁止任務角色使用 ECS 通配符(`ecs:*`)
  • 高低權限工作負載分離至不同實例或集群
  • 多租戶系統每個租戶使用獨立集群或至少獨立 EC2 實例
  • 最小化任務執行角色權限,不共用同一個通用執行角色
  • AWS 文件變更:原文「容器永遠無法存取其他任務的憑證」→ 已改為「同一 EC2 實例上的任務可能存取其他任務的憑證」
  • --

結論

結論

在 ECS EC2 模式中,IMDS 預設可存取使得任何任務都能冒充 ECS Agent、劫持同實例全部任務憑證,且攻擊在 CloudTrail 中留不下痕跡——封鎖任務對 IMDS 的存取並嚴格隔離高低權限工作負載是目前唯一可靠的防禦手段。

完整解析

詳細

Noah Haz 在 Sweet Security 負責開發 EC2 感測器時,為了監控 ECS 任務而查詢「任務元數據端點 v4」,無意間發現 ECS Agent 與 AWS 控制平面之間的 WebSocket 連線帶有 `send_credentials=true` 參數,並透過抓包確認控制平面確實透過此連線下發任務憑證。這引發了他的核心疑問:一個普通任務能否偽裝成 ECS Agent,從而截取其他任務的憑證?

研究的突破口在於 IMDS。ECS EC2 模式中,IMDS 預設對所有任務開放,而 IMDS 所回傳的正是 EC2 實例角色憑證——這與 ECS Agent 用來向 AWS 控制平面認證的憑證完全相同。因此,任何正在運行的任務都天然具備 `ecs:DiscoverPollEndpoint` 與 `ecs:Poll` 等 ECS 必要權限。有了這組憑證,攻擊者可以呼叫 `DiscoverPollEndpoint` API 取得 ACS WebSocket 的 URL,再透過容器自省 API(Container Introspection API)取得 Container Instance ARN,搭配任務元數據端點補齊所有連線識別符,最終構造出一個完全合法的 ACS WebSocket 請求。

連線建立後,AWS 控制平面誤以為是真正的 ECS Agent,開始推送同一 EC2 實例上所有正在運行任務的角色憑證,包含各任務的任務角色(Task Role)以及原本只供 ECS 本身使用的任務執行角色(Task Execution Role)。後者尤其危險,因為任務執行角色通常持有存取 AWS Secrets Manager 的權限,代表攻擊者可直接讀取原本僅供特定任務使用的資料庫密碼或 API 金鑰。在 Demo 中,研究者以零 S3 權限的 ECS Escape 任務成功刪除了另一個任務擁有完整 S3 存取權的儲存桶,並讀出 Secrets Manager 中的明文密碼,完整重現跨任務橫向移動。

更值得警惕的是,此漏洞在 CloudTrail 中幾乎完全透明:所有被劫持憑證的操作日誌都顯示來自原始合法任務,攻擊者容器的身分從未出現在日誌中。AWS 的官方回應將此定性為消費者安全責任,認為 ECS Agent 在消費者安全邊界內運作,並更新文件說明,但未承諾短期修復。研究者的建議是:以 IP Tables 規則阻斷任務對 IMDS 的存取、對高低權限工作負載嚴格分離實例,以及落實最小權限原則於所有任務角色。

關鍵時刻

Pipeline v2

帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。

事實查核

Pipeline v2

說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

更多「Web2 安全」的內容

SANS Stormcast Tuesday, August 25th, 2026: DOUBLECUP PNG; WebAudio Fingerprinting; Expired Domains; Android; Car
7 min
Web2 安全英文PODCAST8月25日

SANS Stormcast Tuesday, August 25th, 2026: DOUBLECUP PNG; WebAudio Fingerprinting; Expired Domains; Android; Car

SANS Stormcast

  • PNG 容器攻擊的簡易性設計:Double Cup 不依賴複雜的 Exif 或隱寫技術,只用 PNG 副檔名和檔頭來偽裝,核心是利用 findstr 指令的常見可用性讓執行變得無需額外工具。
  • Web Audio API 的隱密指紋識別:音訊於增益零的無聲狀態下播放,使用者完全無感,但錄製波形足以建立裝置特徵,在瀏覽器原生功能層面難以區分是反詐欺還是過度追蹤。
  • 域名過期引發的串聯漏洞:DMARC 報告端點使用過期域名是常見疏漏,允許攻擊者透過簡單的域名註冊取得他人的 SPF/DKIM 錯誤報告,進而收集目標系統配置情報。
Risky Bulletin: Expired credit cards can be used for malicious transactions
5 min
Web2 安全英文PODCAST8月24日

Risky Bulletin: Expired credit cards can be used for malicious transactions

Risky Business

  • 支付安全的非對稱風險:Visa卡利用未加密的卡片資料與NFC通訊,攻擊者可藉由中間人技術竄改過期日期進行交易,但MasterCard、美運卡與Discover的防護更完善,顯示不同發卡機構的安全架構存在明顯差異。
  • 國家級駭客活動的連鎖延伸:北韓Lazarus集團在2月單一事件已累積100名受害者,涵蓋大學、警察部門、媒體與醫療機構,伊朗駭客則針對基礎建設如電力系統發動破壞性攻擊,反映地緣政治在網路戰爭中的升溫。
  • AI加速漏洞生態的雙面刃:AI工具催生近2萬份漏洞概念驗證代碼發布,但同時也導致大量失效漏洞代碼氾濫,增加資安團隊甄別真實威脅的難度;Mayer Protocol遭攻擊事件中,駭客用AI鏈接六個無關的小漏洞完成盜竊170萬美元的攻擊。
SANS Stormcast Monday, August 24th, 2026: More Entra Powershell; Entra Vulnerability; GitLab Vuln (and PoC); GTA 6 Leak Malware
5 min
Web2 安全英文PODCAST8月24日

SANS Stormcast Monday, August 24th, 2026: More Entra Powershell; Entra Vulnerability; GitLab Vuln (and PoC); GTA 6 Leak Malware

SANS Stormcast

  • Microsoft EntraID 的遠端代碼執行漏洞已由微軟修補,初期報告顯示已遭利用但後來更正為未遭利用。這反映 Microsoft 在雲端軟體安全上的透明度提升,對漏洞採用與內部軟體相同的 CVE 編號和公告流程。
  • PowerShell 指令碼可用於驗證 MFA 部署完整性,特別是找出未啟用 MFA 的遺漏帳號。同時可以分析 EntraID 登入日誌中的異常行為,如風險係數評估和地理位置檢測,幫助組織快速識別可疑登入。
  • GitLab 的 GraphQL 代碼注入漏洞允許未認證攻擊者刪除或修改儲存庫,潛在導致供應鏈攻擊。已有公開概念驗證 (PoC) 存在,使用內部部署 GitLab 的組織必須立即修補。