CVE-2026-87911 - Amazon awslabs postgres-mcp-server 的 SQL 驗證元件中,唯讀強制執行繞過導致作業系統命令執行
公告 ID:2026-104-AWS
範圍:AWS
內容類型:重要 (需要注意)
發布日期:2026 年 9 月 9 日下午 12:30 (太平洋夏令時間)
描述:
awslabs.postgres-mcp-server 是一個實作 Postgres MCP 伺服器的 Python 套件。我們發現了 CVE-2026-87911,Amazon awslabs postgres-mcp-server 在 1.1.7 版之前,其 SQL 驗證元件在強制執行唯讀限制時存在作業系統命令注入弱點,可能讓未經身分驗證的執行者,透過將特製的 COPY ... TO PROGRAM 陳述式置入某項內容,而該內容會在已驗證使用者以預設唯讀模式與 MCP 伺服器互動時受到處理,藉此在自我管理的 PostgreSQL 伺服器主機上執行作業系統命令。
受影響版本:
影響條件為 awslabs.postgres-mcp-server 1.1.7 版之前、採用自我管理的 PostgreSQL 部署設定檔 (PG_WIRE_PROTOCOL 連線方法),且所設定的資料庫角色具有 superuser 或 pg_execute_server_program 權限。
解決方案:
此問題已在 pypi 上的 awslabs postgres-mcp-server (Python 套件) 1.1.7 版中解決。
變通方法:
最強的控制措施是使用專用的 Postgres 角色連接 MCP 伺服器,該角色僅具備實際所需的權限,如此一來,無論什麼 SQL 到達資料庫,資料庫本身都會強制執行邊界。特別是:
- 請勿以超級使用者、rds_superuser 或叢集主使用者身分連接。這些角色會繞過資料列層級安全性,可讀取憑證目錄 (pg_authid、pg_user_mappings),且能終止其他工作階段。
- 對於唯讀用途,僅授予代理程式所需結構描述的 CONNECT + USAGE + SELECT 權限,並在角色層級強制執行唯讀交易。
- 對於讀取/寫入用途,僅授予所需的特定 INSERT/UPDATE/DELETE 權限,並限定於必要的結構描述與資料表。
將最小權限角色 (資料庫強制執行) 與封鎖清單 (應用程式強制執行) 結合,可提供深度防禦:即使查詢通過了封鎖清單,角色的權限仍會限制其能執行的操作。
參考資料:
致謝:
我們要感謝 Mordehai Attia (Corsen AI) 和 Ryan von Brubeck 透過協調的漏洞揭露程序,與我們共同處理此問題。
如有任何安全問題或疑慮,請寄電子郵件至 aws-security@amazon.com。