Atomics-hub/exposecheck
GitHub: Atomics-hub/exposecheck
针对 Langflow CVE-2025-3248 漏洞的单目标防御性自检工具,检测部署是否存在未身份验证的代码验证端点暴露风险。
Stars: 0 | Forks: 0
# EXPOSECHECK 检查
针对与 CVE-2025-3248 相关的 Langflow 暴露风险的一个小型防御性自检工具。只需为 EXPOSECHECK 提供一个基础 URL——你自己的服务器或 localhost——它就会报告:
- 服务器是否返回 HTTP 响应;
- `/api/v1/validate/code` 是否对未经验证的请求发起质询;
- 检测到的 Langflow 版本是否低于已修复的 `1.3.0` 阈值;以及
- 输入的主机看起来是本地/私有地址还是可公开访问的地址。
这不是一个漏洞利用工具或大规模扫描器。它只接受一个目标,不发送任何可执行代码,也不执行互联网范围的发现。验证端点探测仅提交一个空的 JSON 对象(`{}`)。
## 为什么会有这个工具
[Sysdig 威胁研究](https://www.sysdig.com/blog/jadepuffer-agentic-ransomware-for-automated-database-extortion) 记录了 JADEPUFFER,其研究人员认为这是首个由 AI agent 从头到尾执行的勒索软件攻击。初始访问权限与已知且已修复的 Langflow 漏洞 [CVE-2025-3248](https://nvd.nist.gov/vuln/detail/CVE-2025-3248) 相关:较旧的暴露实例允许未经身份验证即访问代码验证端点。
Langflow 是一个合法的开源 AI 应用框架。风险在于暴露的、未打补丁的部署,而不是 Langflow 本身。Langflow `1.3.0+` 包含相关的修复,并要求在该端点上进行身份验证。
## CLI(推荐)
需要 Node.js 18+;无需安装任何包。
```
node check.js http://localhost:7860
```
你也可以输出机器可读的结果:
```
node check.js http://localhost:7860 --json
```
退出码在本地脚本中很有用:
- `0` — `PATCHED FOR CVE-2025-3248`
- `1` — `EXPOSED`
- `2` — `NEEDS ATTENTION`、无效输入或结果不明确的检查
`PATCHED FOR CVE-2025-3248` 需要同时满足 `401/403` 身份验证质询以及检测到的版本为 `1.3.0` 或更高版本。这并不意味着服务器总体上是安全的。如果在到达请求验证之前端点没有进行身份验证质询,则状态为 `EXPOSED`。缺失、重定向、被阻止或模棱两可的响应会被特意报告为 `NEEDS ATTENTION`,而不会被随意猜测为安全。
## 浏览器 UI
直接打开 `index.html`,或者在本地托管该目录:
```
python3 -m http.server 8080
```
然后访问 `http://localhost:8080`。
浏览器强制执行 CORS 和混合内容规则。一个跨源服务器可能是正常的,但仍然会阻止页面读取其响应。这会产生不明确的结果;请使用 CLI 进行可靠的检查。
## 测试
使用 Node.js 18+ 运行内置的回归测试套件:
```
node --test test.js
```
该套件锁定了公开的结果词汇表,因此基于 CVE 范围的已修复状态就不会静默地退化为通用的 `safe` 或 `you're fine` 声明。
## 本地演示模式
演示是确定性的,不会联系外部服务器。
CLI:
```
node check.js --demo exposed
node check.js --demo patched
```
浏览器:使用结论面板上方的 **Demo: exposed** 和 **Demo: patched**。该页面默认加载暴露的演示,这使得无需将工具指向实际目标即可进行可靠的屏幕录制。
## 检查项的含义
| 检查项 | 观察到的防御性信号 | 注意信号 |
| --- | --- | --- |
| 可达性 | 任何 HTTP 响应都确认主机已启动 | 超时或连接失败是不明确的 |
| 端点身份验证 | 对空的未经验证请求返回 `401` 或 `403` | `2xx`、`400` 或 `422` 表示在请求被接受/验证之前没有发生身份验证质询 |
| 版本 | Langflow `1.3.0+` | `<1.3.0` 存在漏洞;未知版本需要手动验证 |
| 网络提示 | 本地/私有 URL | 公共 IP/域名仅供参考,应提示进行暴露审查 |
网络提示仅检查输入的 URL。它不解析 DNS,也不证明主机可以从互联网访问。
绿色样式仅限于显示的谓词。特别是,`PATCHED FOR CVE-2025-3248` 并不意味着 `SAFE`。
## 修复措施
**将 Langflow 升级到 1.3.0+,将其置于身份验证之后,并将其从公共互联网上撤下。**
纵深防御仍然很重要:限制 ingress,避免将开发工具直接放置在公共互联网上,如果怀疑存在暴露则轮换凭证,并审查服务器日志。如果此工具报告在身份验证之后存在旧版本,它会返回 `NEEDS ATTENTION`,因为该软件仍应进行修补。
## 安全特性
- 一次仅接受一个用户提供的 base URL;
- 没有目标列表、搜索引擎集成或发现行为;
- 没有漏洞利用 payload,也没有发送可执行代码;
- 没有尝试绕过身份验证;
- 未收集或存储任何机密;
- CLI 中具有较短的请求超时和较小的响应读取限制。
## 致谢
- [Sysdig JADEPUFFER 研究](https://www.sysdig.com/blog/jadepuffer-agentic-ransomware-for-automated-database-extortion)
- [NVD: CVE-2025-3248](https://nvd.nist.gov/vuln/detail/CVE-2025-3248)
- [Langflow](https://github.com/langflow-ai/langflow)
## 许可证
MIT。详情请见 [LICENSE](LICENSE)。
标签:GNU通用公共许可证, Langflow, MITM代理, Node.js, TLS, URL发现, 后端开发, 多模态安全, 安全检测, 数据可视化, 防御工具