// 威脅簡報

Letta 隨附的 compose.yaml 預設不安全:API 完全不需登入,PostgreSQL 以預設密碼對外開放

CVSS
9.3 CRITICAL
CISA KEV
未列入
弱點類型
CWE-1188

PlainCVE 團隊 · 發布 2026-10-21 · AI 輔助 · 媒體簡報 ↓

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
時間點
  • 首次公開 2026-10-18

藍隊應對手冊

確認、修補 / 緩解、應變、強化。版本符合受影響條件不等於已被入侵;檢查沒有結果也不等於安全,每一項都有能證明與不能證明的範圍。標記的步驟對應下方攻擊流程裡可以擋下攻擊的那一步。

DETECT確認我受影響嗎?有沒有入侵跡象?
  1. 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
  2. 02確認 Letta 版本

    在執行 Letta 伺服器的環境內執行(唯讀):虛擬環境,或用 docker exec 進入伺服器容器。官方 compose 用 letta/letta:latest 映像,在主機上跑 pip show 多半查不到伺服器版本;映像內是否有 pip、是否顯示版本取決於實際環境,查不到時請改看映像標籤與建置日期。(PlainCVE 的建議)

    唯讀查詢
    pip show letta | grep -i '^version'
  3. 03確認 PostgreSQL 埠是否對外公開

    在執行 Docker 的主機上列出容器的埠對應;看到 5432 綁在 0.0.0.0 代表其他機器可能連得到。(PlainCVE 的建議)

    唯讀查詢
    docker ps --format '{{.Names}}\t{{.Ports}}' | grep 5432
  4. 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/
MITIGATE修補 / 緩解先修補;還不能修補時先擋住
  1. 01開啟伺服器密碼保護

    官方文件:docker run 時加上 SECURE=true 與 LETTA_SERVER_PASSWORD。CVE 紀錄提到的變數是 LETTA_SERVER_SECURE,TheHackerWire 建議在 compose.yaml 開啟它。哪個名稱適用於 compose 部署尚未確認,改完後請確認沒帶密碼的請求會被拒絕。

  2. 02關閉 Postgres 對外埠並換掉預設密碼

    研究人員(Lasso Security)建議:不要把 Postgres 連接埠公開到主機,並產生非預設的資料庫帳密。

  3. 03限制誰能連到伺服器

    PlainCVE 的建議:用防火牆或只綁定內部網路,不讓 Letta API 與資料庫暴露在不受信任的網路。

RESPOND應變發現入侵跡象時
  1. 01曾對外暴露:當作可能已遭入侵處理

    PlainCVE 的建議:檢查 /v1/admin 使用者清單是否有陌生帳號、更換資料庫密碼與伺服器上保存的憑證,並以乾淨設定重建伺服器與資料庫容器。目前沒有已知的實際利用證據,這是預防性做法。

HARDEN強化長期避免同類問題
  1. 01資料庫角色不要用超級使用者

    研究人員(Lasso Security)建議。這樣即使資料庫被登入,也無法使用 COPY PROGRAM 這類高權限功能。

  2. 02留意官方已不支援 Docker 映像

    官方文件表示 Docker 映像已不再是積極維護或支援的產品。PlainCVE 的建議:不要期待官方修補,自行檢視部署設定,或評估改用仍受支援的部署方式。

完整修復步驟與說明

目前找不到可升級的修補版本,只能先改設定。順序建議:

  1. 先切斷外部連線,再改設定,避免修改期間仍暴露。
  2. **密碼保護的變數名稱有出入:**官方 Docker 文件寫的是 SECURE=true 加 LETTA_SERVER_PASSWORD(針對 docker run);CVE 紀錄與 TheHackerWire 提到的是 LETTA_SERVER_SECURE。哪一個對 compose 部署有效尚未確認,改完後務必實測沒帶密碼的請求會被拒絕。
  3. **資料庫:**拿掉 compose.yaml 中資料庫的 ports 對應(PlainCVE 的說明:一般 Compose 設定下伺服器容器仍可透過內部網路連到資料庫,改完請實測)、設定新的 LETTA_PG_PASSWORD。注意:PostgreSQL 的密碼通常只在第一次建立資料卷時生效,既有資料庫需另外在資料庫內修改密碼(PlainCVE 的說明)。

攻擊流程

從左到右是攻擊發生的順序。藍色盾牌代表這一步可以被擋下,越早擋下越好。點圖示可看細節。

由上到下是攻擊發生的順序。藍色盾牌代表這一步可以被擋下,越早擋下越好。點圖示可看細節。

Letta 隨附的 compose.yaml 預設不安全:API 完全不需登入,PostgreSQL 以預設密碼對外開放: 1. 從網路連到照預設值部署的 Letta 伺服器 → 2. 密碼檢查從來沒有被裝上 → 3. 透過執行工具的 API 跑任意 Python → 4. 用預設帳密直接登入對外公開的 PostgreSQL → 5. 透過 COPY PROGRAM 執行作業系統指令CVE-2026-77936 · Letta 隨附的 compose.yaml 預設不安全:API 完全不需登入,PostgreSQL 以預設密碼對外開放攻擊者你的系統從網路連到照預設值部署的 Letta 伺服器 — 不需要任何帳號、密碼或權限,只要網路連得到。 1從網路連到照預設值部署的 Letta 伺服器密碼檢查從來沒有被裝上 — compose.yaml 沒有開啟 LETTA_SERVER_SECURE,所以檢查密碼的中介層(middleware)不會被加入,所有 API 路由都不需認證。 2密碼檢查從來沒有被裝上透過執行工具的 API 跑任意 Python — 研究人員表示程式碼在伺服器容器內執行。依 CVE 紀錄,攻擊者也能管理 /v1/admin 使用者;研究人員表示還能讀寫所有租戶的資料。 3透過執行工具的 API 跑任意 Python用預設帳密直接登入對外公開的 PostgreSQL — 官方 compose.yaml 預設把 5432 埠公開到主機,密碼預設為 letta;研究人員表示內建的資料庫角色是超級使用者。 4用預設帳密直接登入對外公開的 PostgreSQL透過 COPY PROGRAM 執行作業系統指令 — COPY PROGRAM 是 PostgreSQL 讓超級使用者執行外部程式的功能。研究人員說指令在資料庫容器上執行;有新聞網站則說在底層主機上執行,說法不一致。 5透過 COPY PROGRAM 執行作業系統指令攻擊路徑可在此擋下PlainCVE · plaincve.date/vulns/cve-2026-77936-letta-insecure-default-config · CC BY 4.0
Letta 隨附的 compose.yaml 預設不安全:API 完全不需登入,PostgreSQL 以預設密碼對外開放: 1. 從網路連到照預設值部署的 Letta 伺服器 → 2. 密碼檢查從來沒有被裝上 → 3. 透過執行工具的 API 跑任意 Python → 4. 用預設帳密直接登入對外公開的 PostgreSQL → 5. 透過 COPY PROGRAM 執行作業系統指令CVE-2026-77936 · Letta 隨附的compose.yaml 預設不安全:API 完全不需登入,PostgreSQL 以預設密碼對外開放從網路連到照預設值部署的 Letta 伺服器 — 不需要任何帳號、密碼或權限,只要網路連得到。 1攻擊者從網路連到照預設值部署的 Letta 伺服器密碼檢查從來沒有被裝上 — compose.yaml 沒有開啟 LETTA_SERVER_SECURE,所以檢查密碼的中介層(middleware)不會被加入,所有 API 路由都不需認證。 2你的系統密碼檢查從來沒有被裝上透過執行工具的 API 跑任意 Python — 研究人員表示程式碼在伺服器容器內執行。依 CVE 紀錄,攻擊者也能管理 /v1/admin 使用者;研究人員表示還能讀寫所有租戶的資料。 3攻擊者透過執行工具的 API 跑任意 Python用預設帳密直接登入對外公開的 PostgreSQL — 官方 compose.yaml 預設把 5432 埠公開到主機,密碼預設為 letta;研究人員表示內建的資料庫角色是超級使用者。 4攻擊者用預設帳密直接登入對外公開的PostgreSQL透過 COPY PROGRAM 執行作業系統指令 — COPY PROGRAM 是 PostgreSQL 讓超級使用者執行外部程式的功能。研究人員說指令在資料庫容器上執行;有新聞網站則說在底層主機上執行,說法不一致。 5攻擊者透過 COPY PROGRAM 執行作業系統指令攻擊路徑可在此擋下PlainCVE · CC BY 4.0plaincve.date/vulns/cve-2026-77936-letta-insecure-default-config
圖片可自由用於報導與教學,採 CC BY 4.0,圖上已附出處。
  1. 攻擊者

    從網路連到照預設值部署的 Letta 伺服器

    不需要任何帳號、密碼或權限,只要網路連得到。

    防禦: PlainCVE 的建議:不要讓 Letta 伺服器暴露在網際網路或不受信任的網路,用防火牆或反向代理限制來源。

  2. 你的系統

    密碼檢查從來沒有被裝上

    compose.yaml 沒有開啟 LETTA_SERVER_SECURE,所以檢查密碼的中介層(middleware)不會被加入,所有 API 路由都不需認證。

    防禦: 開啟密碼保護。官方文件指示 docker run 時加上 SECURE=true 與 LETTA_SERVER_PASSWORD;TheHackerWire 建議在 compose.yaml 開啟 LETTA_SERVER_SECURE。哪個變數名稱適用於 compose 部署尚未確認。

  3. 攻擊者

    透過執行工具的 API 跑任意 Python

    研究人員表示程式碼在伺服器容器內執行。依 CVE 紀錄,攻擊者也能管理 /v1/admin 使用者;研究人員表示還能讀寫所有租戶的資料。

    防禦: 同第 2 步:開啟密碼保護後,這些 API 就需要密碼。

  4. 攻擊者

    用預設帳密直接登入對外公開的 PostgreSQL

    官方 compose.yaml 預設把 5432 埠公開到主機,密碼預設為 letta;研究人員表示內建的資料庫角色是超級使用者。

    防禦: 研究人員(Lasso Security)建議:預設不公開 Postgres 連接埠,並在首次執行時產生非預設的資料庫帳密。

  5. 攻擊者

    透過 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(指派時已不受支援)。

原理

兩個預設值疊在一起:

  1. API 沒有上鎖。 研究人員指出,伺服器只有在 LETTA_SERVER_SECURE=true 時才會加入檢查密碼的中介層(middleware,在請求進到功能前先跑的檢查)。隨附的 compose.yaml 沒有開啟它,所以所有 API 都不需認證。CVE 紀錄說遠端攻擊者因此能透過執行工具的 API 跑任意 Python,也能管理 /v1/admin 使用者;研究人員說程式碼在伺服器容器內執行,並能讀寫所有租戶(使用同一台伺服器的不同使用者或組織)的資料。
  2. 資料庫門也開著。 官方 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-21CVE 編號保留
2026-10-18CVE 紀錄記載的公開揭露日期(datePublic)
2026-10-19VulnCheck 安全公告日期
2026-10-20CVE 紀錄發布(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 · 審稿規則

驗證紀錄只寫環境與結果,不公開重現步驟或可攻擊他人系統的程式。詳見 政策.

來源

  1. CVE / NVD / OSVCVE-2026-77936 Record (CVE Services API) · CVE Program (CNA: VulnCheck), 2026-10-20 · 查閱 2026-10-21
  2. CVE / NVD / OSVNVD - CVE-2026-77936 · NIST · 查閱 2026-10-21
  3. 安全公告Letta through 0.16.8 Insecure Default Configuration Unauthenticated API and PostgreSQL Access · VulnCheck, 2026-10-19 · 查閱 2026-10-21
  4. 安全公告GitHub Advisory Database: GHSA-g524-hhf9-5x95 (unreviewed) · GitHub · 查閱 2026-10-21
  5. 其他OSV - CVE-2026-77936 · OSV · 查閱 2026-10-21
  6. 其他letta 0.16.8 (Snyk package page) · Snyk · 查閱 2026-10-21
  7. 廠商說明Letta Docker documentation · Letta · 查閱 2026-10-21
  8. 廠商說明letta compose.yaml (commit 1131535) · letta-ai (GitHub) · 查閱 2026-10-21
  9. 新聞報導CVE-2026-77936: Letta Unauthenticated RCE and OS Command Injection via Insecure Defaults · TheHackerWire · 查閱 2026-10-21
  10. 新聞報導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 執行的指令落在哪裡說法不一:研究人員說是資料庫容器,有新聞網站說是底層主機。
  • 沒有證據顯示已遭實際利用。

可引用的一句話

這不是一行寫錯的程式,而是一份「照著範例部署就門戶大開」的設定檔。

圖片

下載分享圖(PNG) · 攻擊流程圖(可下載)

引用時請標示「PlainCVE」並附上本頁連結。 完整引用格式見下方「如何引用本頁」。有事實錯誤請回報.

如何引用本頁

本文採 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}
}