// 威脅簡報
Letta 隨附的 compose.yaml 預設不安全:API 完全不需登入,PostgreSQL 以預設密碼對外開放
- CVSS
- 9.3 CRITICAL
- CISA KEV
- 未列入
- 弱點類型
- CWE-1188
AI 審稿 2026-10-21(未經人工)指令測試:未提供漏洞重現:未進行驗證紀錄 ↓
Letta 0.16.8(含)以前隨附的 compose.yaml 沒有開啟密碼保護,所有 API 不需登入就能用,還以預設密碼對外開放 PostgreSQL(研究人員表示其角色為超級使用者);目前找不到修補版本。
| 誰會中 | 用 Letta(PyPI 套件 letta)0.16.8(含)以前隨附的 compose.yaml、照預設值自架 Letta 伺服器的人或組織。0.16.8 之後的版本是否仍受影響,來源沒有說明。 |
|---|---|
| 後果 | 能連到伺服器的人不需要帳號,就能執行任意 Python、管理 /v1/admin 使用者(CVE 紀錄);研究人員(Lasso Security)表示程式碼在伺服器容器內執行,還能讀寫所有租戶的資料;若資料庫連接埠可達且仍使用預設密碼,還能透過 PostgreSQL 執行作業系統指令(研究人員表示內建資料庫角色是超級使用者)。 |
| 現在該做什麼 | 目前沒有已知的修補版本。請開啟伺服器的密碼保護、不要把 PostgreSQL 連接埠對外公開、換掉預設資料庫密碼,並且不要讓 Letta 伺服器暴露在不受信任的網路。 |
| 受影響版本 | 0.16.8 以前(含 0.16.8)隨附的 compose.yaml;OSV 記錄受影響範圍從最早的版本開始。0.16.8 之後的版本狀態未知。 |
| 修好的版本 | 未確認:來源中找不到修補版本或修補提交 |
| CVSS 向量 | 顯示完整向量CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N |
| 時間點 |
|
藍隊應對手冊
確認、修補 / 緩解、應變、強化。版本符合受影響條件不等於已被入侵;檢查沒有結果也不等於安全,每一項都有能證明與不能證明的範圍。標記的步驟對應下方攻擊流程裡可以擋下攻擊的那一步。
- 01確認版本與 compose.yaml 設定
在放 compose.yaml 的資料夾執行(唯讀):檢查是否開啟了密碼保護、是否仍用預設資料庫密碼、是否公開 5432 埠。compose 會載入 .env,所以 .env 也要一併檢查(沒有該檔時 grep 會報錯,屬正常)。版本 ≤ 0.16.8 且照預設值部署就受影響;0.16.8 之後的版本狀態未知,一樣要檢查設定。
唯讀查詢grep -nE 'SECURE|LETTA_SERVER_PASSWORD|LETTA_PG_PASSWORD|5432' compose.yaml .env - 02確認 Letta 版本
在執行 Letta 伺服器的環境內執行(唯讀):虛擬環境,或用 docker exec 進入伺服器容器。官方 compose 用 letta/letta:latest 映像,在主機上跑 pip show 多半查不到伺服器版本;映像內是否有 pip、是否顯示版本取決於實際環境,查不到時請改看映像標籤與建置日期。(PlainCVE 的建議)
唯讀查詢pip show letta | grep -i '^version' - 03確認 PostgreSQL 埠是否對外公開
在執行 Docker 的主機上列出容器的埠對應;看到 5432 綁在 0.0.0.0 代表其他機器可能連得到。(PlainCVE 的建議)
唯讀查詢docker ps --format '{{.Names}}\t{{.Ports}}' | grep 5432 - 04搜尋 PostgreSQL 紀錄中的可疑活動
TheHackerWire 建議監控來自非預期 IP 的連線、以預設帳密登入的嘗試,以及 COPY PROGRAM 語句。在資料庫容器內或其資料卷上,對紀錄資料夾(含子資料夾)搜尋;實際路徑依你的設定而定。PlainCVE 補註:官方 compose.yaml 沒有設定任何紀錄選項,容器內的 Postgres 預設通常把紀錄輸出到 stderr(請改用 docker logs 查看),連線與語句紀錄(log_connections、log_statement)也需要先開啟;否則這個指令搜不到東西,不代表沒有被入侵。
唯讀查詢grep -riE 'copy .*program|connection authorized|password authentication failed' /path/to/postgresql/log/
- 01開啟伺服器密碼保護
官方文件:docker run 時加上 SECURE=true 與 LETTA_SERVER_PASSWORD。CVE 紀錄提到的變數是 LETTA_SERVER_SECURE,TheHackerWire 建議在 compose.yaml 開啟它。哪個名稱適用於 compose 部署尚未確認,改完後請確認沒帶密碼的請求會被拒絕。
- 02關閉 Postgres 對外埠並換掉預設密碼
研究人員(Lasso Security)建議:不要把 Postgres 連接埠公開到主機,並產生非預設的資料庫帳密。
- 03限制誰能連到伺服器
PlainCVE 的建議:用防火牆或只綁定內部網路,不讓 Letta API 與資料庫暴露在不受信任的網路。
- 01曾對外暴露:當作可能已遭入侵處理
PlainCVE 的建議:檢查 /v1/admin 使用者清單是否有陌生帳號、更換資料庫密碼與伺服器上保存的憑證,並以乾淨設定重建伺服器與資料庫容器。目前沒有已知的實際利用證據,這是預防性做法。
- 01資料庫角色不要用超級使用者
研究人員(Lasso Security)建議。這樣即使資料庫被登入,也無法使用 COPY PROGRAM 這類高權限功能。
- 02留意官方已不支援 Docker 映像
官方文件表示 Docker 映像已不再是積極維護或支援的產品。PlainCVE 的建議:不要期待官方修補,自行檢視部署設定,或評估改用仍受支援的部署方式。
完整修復步驟與說明
目前找不到可升級的修補版本,只能先改設定。順序建議:
- 先切斷外部連線,再改設定,避免修改期間仍暴露。
- **密碼保護的變數名稱有出入:**官方 Docker 文件寫的是
SECURE=true加LETTA_SERVER_PASSWORD(針對docker run);CVE 紀錄與 TheHackerWire 提到的是LETTA_SERVER_SECURE。哪一個對 compose 部署有效尚未確認,改完後務必實測沒帶密碼的請求會被拒絕。 - **資料庫:**拿掉 compose.yaml 中資料庫的
ports對應(PlainCVE 的說明:一般 Compose 設定下伺服器容器仍可透過內部網路連到資料庫,改完請實測)、設定新的LETTA_PG_PASSWORD。注意:PostgreSQL 的密碼通常只在第一次建立資料卷時生效,既有資料庫需另外在資料庫內修改密碼(PlainCVE 的說明)。
攻擊流程
從左到右是攻擊發生的順序。藍色盾牌代表這一步可以被擋下,越早擋下越好。點圖示可看細節。
由上到下是攻擊發生的順序。藍色盾牌代表這一步可以被擋下,越早擋下越好。點圖示可看細節。
- 攻擊者
從網路連到照預設值部署的 Letta 伺服器
不需要任何帳號、密碼或權限,只要網路連得到。
防禦: PlainCVE 的建議:不要讓 Letta 伺服器暴露在網際網路或不受信任的網路,用防火牆或反向代理限制來源。
- 你的系統
密碼檢查從來沒有被裝上
compose.yaml 沒有開啟 LETTA_SERVER_SECURE,所以檢查密碼的中介層(middleware)不會被加入,所有 API 路由都不需認證。
防禦: 開啟密碼保護。官方文件指示 docker run 時加上 SECURE=true 與 LETTA_SERVER_PASSWORD;TheHackerWire 建議在 compose.yaml 開啟 LETTA_SERVER_SECURE。哪個變數名稱適用於 compose 部署尚未確認。
- 攻擊者
透過執行工具的 API 跑任意 Python
研究人員表示程式碼在伺服器容器內執行。依 CVE 紀錄,攻擊者也能管理 /v1/admin 使用者;研究人員表示還能讀寫所有租戶的資料。
防禦: 同第 2 步:開啟密碼保護後,這些 API 就需要密碼。
- 攻擊者
用預設帳密直接登入對外公開的 PostgreSQL
官方 compose.yaml 預設把 5432 埠公開到主機,密碼預設為 letta;研究人員表示內建的資料庫角色是超級使用者。
防禦: 研究人員(Lasso Security)建議:預設不公開 Postgres 連接埠,並在首次執行時產生非預設的資料庫帳密。
- 攻擊者
透過 COPY PROGRAM 執行作業系統指令
COPY PROGRAM 是 PostgreSQL 讓超級使用者執行外部程式的功能。研究人員說指令在資料庫容器上執行;有新聞網站則說在底層主機上執行,說法不一致。
防禦: 研究人員(Lasso Security)建議:不要用超級使用者身分執行資料庫角色。
影響範圍
Letta 是用來建構 AI 代理(agent)的開源專案,可以自己架設伺服器。問題不在某一段程式碼,而在專案隨附的部署設定檔 compose.yaml(Docker Compose 用來描述要啟動哪些容器的檔案)。
| 條件 | 是否受影響 |
|---|---|
| letta 0.16.8 以前(含),照隨附 compose.yaml 的預設值部署 | 受影響(VulnCheck、CVE 紀錄) |
| 同上,但資料庫連接埠連不到 | API 部分仍受影響;資料庫那條路需要連得到 5432 埠 |
| 0.16.8 之後的版本(Snyk 列出的最新版為 0.34.12) | 未知。沒有來源說明之後的版本是否仍附帶同樣的設定;這是 PlainCVE 的判斷 |
| 修補版本 | 未確認。找不到修補版本、修補提交或官方修補資訊(OffSeq 也表示找不到) |
OSV 記錄受影響範圍從最早的版本開始。官方文件表示 Docker 映像「已不再是積極維護或支援的產品」,CVE 紀錄也標示為 unsupported-when-assigned(指派時已不受支援)。
原理
兩個預設值疊在一起:
- API 沒有上鎖。 研究人員指出,伺服器只有在
LETTA_SERVER_SECURE=true時才會加入檢查密碼的中介層(middleware,在請求進到功能前先跑的檢查)。隨附的 compose.yaml 沒有開啟它,所以所有 API 都不需認證。CVE 紀錄說遠端攻擊者因此能透過執行工具的 API 跑任意 Python,也能管理/v1/admin使用者;研究人員說程式碼在伺服器容器內執行,並能讀寫所有租戶(使用同一台伺服器的不同使用者或組織)的資料。 - 資料庫門也開著。 官方 compose.yaml 預設把 PostgreSQL 的 5432 埠公開到主機,密碼預設為
letta;研究人員說內建資料庫角色是超級使用者。超級使用者可以用 PostgreSQL 的 COPY PROGRAM 功能執行作業系統指令。**指令在哪裡執行,來源說法不一:**研究人員說是資料庫容器,TheHackerWire 說是底層主機。
弱點類型為 CWE-1188(以不安全的預設值初始化資源)。
有問題的思路(概念示意,不是原始檔案):
展開程式碼範例(yaml)
# 資料庫:密碼有預設值、埠公開到主機
POSTGRES_PASSWORD=${LETTA_PG_PASSWORD:-letta}
ports: "${LETTA_PG_PORT:-5432}:5432"
# 伺服器:沒有設定 LETTA_SERVER_SECURE → 不加密碼檢查展開程式碼範例(python)
if secure_enabled: # 只有明確開啟才檢查
app.add_middleware(CheckPassword)
# 否則:所有路由都不需認證比較安全的思路(概念示意): 資料庫不公開埠、密碼不用預設值、角色不用超級使用者;伺服器一定要求密碼,沒設定密碼就拒絕啟動,而不是默默開放。
時間軸
| 日期 | 事件 |
|---|---|
| 2026-08-21 | CVE 編號保留 |
| 2026-10-18 | CVE 紀錄記載的公開揭露日期(datePublic) |
| 2026-10-19 | VulnCheck 安全公告日期 |
| 2026-10-20 | CVE 紀錄發布(CNA:VulnCheck) |
| 2026-10-21 | 截至此日不在 CISA KEV 清單;NVD 目前狀態為 Awaiting Analysis(尚未分析) |
延伸閱讀
- **評分:**CNA(VulnCheck)給 CVSS 4.0 9.3、CVSS 3.1 9.8,兩者都是「重大」;NVD 尚未給分。GitHub 的 GHSA-g524-hhf9-5x95 尚未經 GitHub 審核。
- **利用情況:**不在 CISA KEV 清單,也沒有證據顯示已遭實際利用或在修補前被利用(目前也找不到已知的修補)。EPSS(預估 30 天內被利用機率)約 0.47%。已有公開概念驗證:CISA 的 SSVC 評為 poc(且可自動化);CNA 在 CVE 紀錄把研究人員頁面標為 exploit,該頁含攻擊程式,本站不連結。TheHackerWire 只說它監控的研究庫(GitHub、Exploit-DB、Nuclei)裡沒有獨立的攻擊程式,範圍不同,並不矛盾。
- **發現者:**Noy Pearl、Michael Sromin、Ophir Dror(依 VulnCheck 公告)。CVE 由 VulnCheck 指派,不是 Letta 專案本身。
- 本頁引用的 Lasso Security 研究內容(程式碼位置、資料庫角色、執行位置、資料庫建議)來自其漏洞資料庫頁面,因含攻擊程式未列入來源。
驗證紀錄 AI 依審稿規則逐項核對來源,全部通過;未經人工審稿,也尚未在我們的環境重現
| AI 審稿 | 2026-10-21 · 審稿規則 |
|---|
驗證紀錄只寫環境與結果,不公開重現步驟或可攻擊他人系統的程式。詳見 政策.
來源
- CVE / NVD / OSVCVE-2026-77936 Record (CVE Services API) · CVE Program (CNA: VulnCheck), 2026-10-20 · 查閱 2026-10-21
- CVE / NVD / OSVNVD - CVE-2026-77936 · NIST · 查閱 2026-10-21
- 安全公告Letta through 0.16.8 Insecure Default Configuration Unauthenticated API and PostgreSQL Access · VulnCheck, 2026-10-19 · 查閱 2026-10-21
- 安全公告GitHub Advisory Database: GHSA-g524-hhf9-5x95 (unreviewed) · GitHub · 查閱 2026-10-21
- 其他OSV - CVE-2026-77936 · OSV · 查閱 2026-10-21
- 其他letta 0.16.8 (Snyk package page) · Snyk · 查閱 2026-10-21
- 廠商說明Letta Docker documentation · Letta · 查閱 2026-10-21
- 廠商說明letta compose.yaml (commit 1131535) · letta-ai (GitHub) · 查閱 2026-10-21
- 新聞報導CVE-2026-77936: Letta Unauthenticated RCE and OS Command Injection via Insecure Defaults · TheHackerWire · 查閱 2026-10-21
- 新聞報導CVE-2026-77936: Initialization of a Resource with an Insecure Default in letta-ai letta · OffSeq Radar · 查閱 2026-10-21
媒體簡報
一句話
Letta 是用來建構 AI 代理(agent)的開源專案。它隨附的 Docker Compose 設定檔預設沒有開啟密碼保護,任何連得到伺服器的人都能不經登入使用全部 API,包括執行任意 Python 程式碼;同一份設定還以預設密碼對外開放 PostgreSQL 資料庫(研究人員表示其角色為超級使用者)。這個漏洞由 VulnCheck 於 2026 年 10 月 20 日發布 CVE,影響 0.16.8(含)以前的版本,目前找不到修補版本,官方文件也表示 Docker 映像已不再受支援。
關鍵數字
- 嚴重度(CNA:VulnCheck)
- CVSS 4.0 9.3;CVSS 3.1 9.8 cveawg.mitre.org
- 受影響版本
- letta <= 0.16.8 vulncheck.com
- CVE 發布
- 2026-10-20 cveawg.mitre.org
- VulnCheck 安全公告日期
- 10/19/2026 vulncheck.com
- NVD 狀態
- Awaiting Analysis services.nvd.nist.gov
已確認
- 0.16.8(含)以前隨附的 compose.yaml 沒有開啟 LETTA_SERVER_SECURE,所有 API 路由都不需認證。
- 官方 compose.yaml 預設把 PostgreSQL 5432 埠公開到主機,密碼預設為 letta。
- 官方文件表示 Docker 映像已不再是積極維護或支援的產品。
- 截至 2026-10-21,這個漏洞不在 CISA KEV 清單中。
- 已有公開概念驗證:CISA SSVC 評為 poc;CNA 在 CVE 紀錄把研究人員頁面標為 exploit,該頁含攻擊程式,本站不連結。
尚未確認 / 說法不一
- 沒有找到修補版本或修補提交;0.16.8 之後的版本是否仍受影響未知。
- 透過 COPY PROGRAM 執行的指令落在哪裡說法不一:研究人員說是資料庫容器,有新聞網站說是底層主機。
- 沒有證據顯示已遭實際利用。
可引用的一句話
這不是一行寫錯的程式,而是一份「照著範例部署就門戶大開」的設定檔。
圖片
引用時請標示「PlainCVE」並附上本頁連結。 完整引用格式見下方「如何引用本頁」。有事實錯誤請回報.
Letta 隨附的 compose.yaml 預設不安全:API 完全不需登入,PostgreSQL 以預設密碼對外開放 Letta 是用來建構 AI 代理(agent)的開源專案。它隨附的 Docker Compose 設定檔預設沒有開啟密碼保護,任何連得到伺服器的人都能不經登入使用全部 API,包括執行任意 Python 程式碼;同一份設定還以預設密碼對外開放 PostgreSQL 資料庫(研究人員表示其角色為超級使用者)。這個漏洞由 VulnCheck 於 2026 年 10 月 20 日發布 CVE,影響 0.16.8(含)以前的版本,目前找不到修補版本,官方文件也表示 Docker 映像已不再受支援。 關鍵數字: - 嚴重度(CNA:VulnCheck):CVSS 4.0 9.3;CVSS 3.1 9.8(https://cveawg.mitre.org/api/cve/CVE-2026-77936) - 受影響版本:letta <= 0.16.8(https://www.vulncheck.com/advisories/letta-through-0.16.8-insecure-default-configuration-unauthenticated-api-and-postgresql-access) - CVE 發布:2026-10-20(https://cveawg.mitre.org/api/cve/CVE-2026-77936) - VulnCheck 安全公告日期:10/19/2026(https://www.vulncheck.com/advisories/letta-through-0.16.8-insecure-default-configuration-unauthenticated-api-and-postgresql-access) - NVD 狀態:Awaiting Analysis(https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=CVE-2026-77936) 已確認: - 0.16.8(含)以前隨附的 compose.yaml 沒有開啟 LETTA_SERVER_SECURE,所有 API 路由都不需認證。 - 官方 compose.yaml 預設把 PostgreSQL 5432 埠公開到主機,密碼預設為 letta。 - 官方文件表示 Docker 映像已不再是積極維護或支援的產品。 - 截至 2026-10-21,這個漏洞不在 CISA KEV 清單中。 - 已有公開概念驗證:CISA SSVC 評為 poc;CNA 在 CVE 紀錄把研究人員頁面標為 exploit,該頁含攻擊程式,本站不連結。 尚未確認 / 說法不一: - 沒有找到修補版本或修補提交;0.16.8 之後的版本是否仍受影響未知。 - 透過 COPY PROGRAM 執行的指令落在哪裡說法不一:研究人員說是資料庫容器,有新聞網站說是底層主機。 - 沒有證據顯示已遭實際利用。 「這不是一行寫錯的程式,而是一份「照著範例部署就門戶大開」的設定檔。」— PlainCVE https://plaincve.date/vulns/cve-2026-77936-letta-insecure-default-config
如何引用本頁
本文採 CC BY 4.0,轉載請保留署名與連結。
PlainCVE 團隊(2026)。《Letta 隨附的 compose.yaml 預設不安全:API 完全不需登入,PostgreSQL 以預設密碼對外開放》。PlainCVE。https://plaincve.date/vulns/cve-2026-77936-letta-insecure-default-config(查閱日期:YYYY-MM-DD)BibTeX
@misc{cve202677936lettainsecuredefaultconfig2026,
title = {Letta 隨附的 compose.yaml 預設不安全:API 完全不需登入,PostgreSQL 以預設密碼對外開放},
author = {PlainCVE 團隊},
year = {2026},
howpublished = {PlainCVE},
url = {https://plaincve.date/vulns/cve-2026-77936-letta-insecure-default-config},
note = {更新於 2026-10-21}
}