資安雷達 2026 年 7 月 25 日

2026-07-25 — etcd Watch API 授權繞過、Bedrock AgentCore 命令注入與 Apache Thrift 15 CVE 齊發

primary=https://github.com/advisories/GHSA-xg4h-6gfc-h4m8 primary=https://github.com/advisories/GHSA-j6g5-3hh3-pgw8 primary=https://oss-security.openwall.org/list/oss-security/2026/07/24/46

etcd Watch API 授權漏洞:開放式範圍請求可繞過單一金鑰讀取限制

GitHub Security Advisories · 2026-07-23

etcd 專案於 2026 年 7 月 23 日發布安全公告 GHSA-xg4h-6gfc-h4m8,指出 gRPC Watch API 存在授權繞過問題:只要對單一 key 擁有 READ 權限的使用者,就能利用 clientv3.WithFromKey() 建立開放式範圍(open-ended range)的 watch 請求,進而收到所有字典序大於等於該 key 的資料異動事件。此漏洞尚未取得 CVE 編號,官方以 CVSS 7.1(High)評級,僅影響已啟用身分驗證的叢集;Range/Get 與 DeleteRange 等一般讀取操作不受影響。

漏洞機制

etcd 的 RBAC 檢查在處理 Watch 請求時,會先把請求中的 RangeEnd 做一次「範圍哨兵值」正規化(例如把空字串或單一 0 位元組改寫成代表「無上限」的內部值),但這段改寫邏輯發生在權限驗證之前,導致授權檢查看到的其實是已經被展開成開放式範圍的請求,而非使用者原始只指定單一 key 的請求。

// server/etcdserver/api/v3rpc/watch.go(修補前,節錄邏輯)
if len(creq.RangeEnd) == 0 {
    creq.RangeEnd = nil
}
if len(creq.RangeEnd) == 1 && creq.RangeEnd[0] == 0 {
    creq.RangeEnd = []byte{}
}
// ↑ 這段改寫在權限檢查之前執行,
//   RBAC 驗證到的已經是「無上限」範圍

結果是使用者傳入的 WithFromKey() 請求會被視為「從某個 key 開始、沒有上限」的合法 watch 範圍,只要起始 key 落在使用者被授權的單一 key 內,RBAC 就會放行整個開放式範圍,等於讓具備最小讀取權限的帳號能持續監看叢集中大量本不該可見的鍵值變動。

受影響版本

  • go.etcd.io/etcd/v3 ≥ 3.7.0-alpha.0,< 3.7.1
  • go.etcd.io/etcd/v3 ≥ 3.6.0,< 3.6.14
  • go.etcd.io/etcd/v3 < 3.5.33

修補與緩解

修補方式是把 RangeEnd 的正規化邏輯搬到權限檢查之後執行,確保 RBAC 驗證時看到的是使用者原始未改寫的範圍值;對應的 e2e 測試也一併更新,驗證低權限使用者在請求超出授權範圍的 watch 時會被正確拒絕。三條發布線各有一個修補提交:3.7.1(commit 6643f80)、3.6.14(commit afeaa62)、3.5.33(commit e863b00)。建議啟用身分驗證的叢集儘速升級至對應修補版本。

原始來源:GHSA-xg4h-6gfc-h4m8修補 commit e863b00


AWS Bedrock AgentCore Python SDK 命令注入:install_packages() 未過濾參數分隔符

GitHub Security Advisories · 2026-07-23

AWS 於 2026 年 7 月 23 日發布 bedrock-agentcore(PyPI)SDK 的安全公告 GHSA-j6g5-3hh3-pgw8,對應 CVE-2026-16796,CVSS 評分 8.4(High)。問題出在 Code Interpreter 沙箱中的 install_packages() 方法未正確處理套件名稱參數中的分隔符,已通過驗證的使用者可藉由精心構造的套件規格字串,在沙箱內注入並執行任意指令。

漏洞機制

該方法原先以正規表示式驗證套件的 extras 分組(如 package[extra] 語法),但正規表示式寫成 (\[.*\])?,等同對方括號內容不做任何字元限制,攻擊者可傳入類似 requests[$(id)] 或使用反引號的字串。更關鍵的是組出的套件字串在丟給底層 shell 執行前並未做跳脫處理,導致 shell 元字元被直接解讀執行。

# 修補前:直接以空白串接參數,未做 shell 跳脫
packages_str = " ".join(packages)

# 修補後:逐一以 shlex.quote() 跳脫
packages_str = " ".join(shlex.quote(pkg) for pkg in packages)

正規表示式也同步收斂為 (\[[a-zA-Z0-9._,\-]*\])?,只允許合法識別字元與逗號出現在 extras 分組中,兩項修補疊加後才能同時堵住「格式繞過」與「shell 注入」兩個環節。

受影響版本

  • bedrock-agentcore(PyPI)< 1.18.1

修補版本為 bedrock-agentcore@1.18.1

修補與緩解

修補收錄於 aws/bedrock-agentcore-sdk-python 專案的 PR #581(commit 3c4b4ee),新增測試涵蓋 $(id)、反引號、空白等 metacharacter 是否被正確拒絕,並確認 pandas[security]celery[redis,auth] 等合法 extras 語法仍可正常安裝。官方建議在升級前避免將未經信任或模型產生的輸入直接傳入 install_packages(),並依 PyPI 命名慣例額外做套件名稱驗證。此漏洞由 Sergio Garcia(@MrCloudSec)協調揭露。

原始來源:GHSA-j6g5-3hh3-pgw8修補 commit 3c4b4ee


Apache Thrift 一口氣揭露 15 個 CVE,橫跨 C++、Python、Rust、Ruby、Node.js、c_glib 等綁定

oss-security mailing list · 2026-07-24

Apache Thrift 維護者 Jens Geyer 於 2026 年 7 月 24 日在 oss-security 郵件論壇連續發出 15 篇公告(訊息序號 32 至 46),一次揭露 15 個 CVE,涵蓋 TLS 憑證驗證、解壓縮炸彈、整數溢位、堆積越界讀寫等多種問題,分散在 C++、Python、Rust、Ruby、Node.js、c_glib 等語言綁定中,另有 Go、Java、PHP、D 等綁定部分受影響。所有問題均在 Apache Thrift 0.24.0 中修補完成。

漏洞機制

這批公告大致可分四類:TLS 憑證驗證缺陷——c_glib 用戶端完全未驗證主機名稱(CVE-2026-48144),C++ 的 TSSLSocket::matchName() 對 RFC 6125 萬用字元比對有誤(CVE-2026-48145),Python 的 TSSLSocket 主機名稱比對函式匯入方式有問題並取代舊有 CVE-2026-41603CVE-2026-66053)。

解壓縮炸彈 / 資源耗盡類——Python 的 THeaderTransport 對 Zlib 解壓縮無上限(CVE-2026-41608),TZlibTransport 跨 C++/Java/Python/Go/D/c_glib 缺少解壓縮大小限制(CVE-2026-48586),Ruby 的 THeaderTransport 同樣存在 ZLIB 解壓縮炸彈(CVE-2026-49158),Java 綁定則有無限制的讀取分配導致 DoS(CVE-2026-45112),Rust 二進位協定非嚴格路徑缺少字串長度上限(CVE-2026-58389)。

記憶體安全與演算法複雜度類——C++ 端有多起堆積越界讀寫:THeaderTransport::readHeaderFormat() 越界讀(CVE-2026-55970)、untransform() 的 ZLIB 堆積緩衝區溢位寫入(CVE-2026-55971)、readString() info-header 長度邊界檢查被繞過(CVE-2026-58662);c_glib 綁定的 transport 剩餘位元組路徑也有越界讀(CVE-2026-58023);TProtocol::checkReadBytesAvailable() 在 C++/c_glib 有整數溢位(CVE-2026-55969);TCompactProtocol 的 varint 位元組計數上限缺失導致無窮迴圈,影響 Python/Go/PHP/Java(CVE-2026-43871);Node.js 伺服器接收 transport 則有二次時間複雜度的 DoS 問題(CVE-2026-55968)。

  • CVE-2026-41608 — Python:THeaderTransport 無上限 Zlib 解壓縮
  • CVE-2026-43871 — Python/Go/PHP/Java:TCompactProtocol varint 位元組計數上限缺失(無窮迴圈)
  • CVE-2026-45112 — Java:無上限讀取導致 DoS
  • CVE-2026-48144 — c_glib:TLS 用戶端未驗證主機名稱
  • CVE-2026-48145 — C++:TSSLSocket matchName() RFC 6125 萬用字元繞過
  • CVE-2026-48586 — C++/Java/Python/Go/D/c_glib:TZlibTransport 解壓縮大小限制缺失
  • CVE-2026-49158 — Ruby:THeaderTransport ZLIB 解壓縮炸彈
  • CVE-2026-55968 — Node.js:伺服器接收 transport 二次時間 DoS
  • CVE-2026-55969 — C++/c_glib:checkReadBytesAvailable() 整數溢位
  • CVE-2026-55970 — C++:readHeaderFormat() 堆積越界讀
  • CVE-2026-55971 — C++:untransform() ZLIB 堆積緩衝區溢位寫入
  • CVE-2026-58023 — c_glib:transport 剩餘位元組路徑堆積越界讀
  • CVE-2026-58389 — Rust:二進位協定非嚴格路徑缺少字串長度上限
  • CVE-2026-58662 — C++:readString() info-header 長度邊界檢查繞過
  • CVE-2026-66053 — Python:TSSLSocket 主機名稱比對函式匯入問題(取代 CVE-2026-41603)

受影響版本

語言綁定受影響版本修補版本
C++< 0.24.00.24.0
Python< 0.24.00.24.0
Rust< 0.24.00.24.0
Ruby< 0.24.00.24.0
Node.js< 0.24.00.24.0
c_glib< 0.24.00.24.0
Java(部分 CVE)< 0.24.0(CVE-2026-45112 自 0.19.0 起)0.24.0

修補與緩解

15 篇公告全部指向同一個修補版本:升級至 Apache Thrift 0.24.0 即可一次修補這批問題,官方公告未附額外的分版本 patch 或 JIRA 連結,僅各自附上 cve.org 記錄與 thrift.apache.org 首頁。多起發現者具名,包括 PayPal 的 Yu Bao(TLS 相關兩項)、Ghaith Abdulreda 與 Javid Khan(C++ 記憶體安全相關多項)、Song Jihoon(Node.js DoS)等。由於涉及網路可觸及的 transport/protocol 解析層,建議所有使用 Thrift RPC 的服務端與用戶端儘快檢查所用綁定版本並升級。

原始來源:oss-security 郵件列表(CVE-2026-66053)同批公告索引(訊息 32-46)


End of article
0
Would love your thoughts, please comment.x
()
x