本目录包含 github.com/sirupsen/logrus 中拒绝服务 (DoS) 漏洞的概念验证代码和测试脚本,该漏洞编号为 CVE-2025-65637。
CVE ID: CVE-2025-65637
CWE: CWE-400 (未受控的资源消耗)
CVSS: 7.5 (高危)
发现者: Christopher Straight, Juan Pablo Mandelbaum
当使用 Entry.Writer() 记录一个大于 64KB 且不含换行符的单行负载时,github.com/sirupsen/logrus 存在一个拒绝服务漏洞。
由于内部 bufio.Scanner 的限制,读取会因 "token too long" 而失败,写入器管道被关闭,导致 Writer() 无法使用,造成应用程序不可用 (DoS)。
该漏洞影响 < 1.8.3、1.9.0 和 1.9.2 版本。已在 1.8.3、1.9.1 和 1.9.3+ 中修复,修复后输入会被分块处理,即使记录错误,写入器也能继续正常工作。
受影响版本:
< v1.8.3 (包括 v1.8.1, v1.8.2)
v1.9.0
v1.9.2
修复版本:
v1.8.3
v1.9.1
v1.9.3+
poc_logrus_dos_improved.go - 展示漏洞的独立 PoC
poc_logrus_dos.go - 更简单的 PoC 版本
test_versions.ps1 - 用于测试多个版本的 PowerShell 脚本
test_versions.sh - 用于测试多个版本的 Bash 脚本
test_single_version.ps1 - 单个版本的快速测试
# PowerShell
.\test_single_version.ps1 v1.8.1
# PowerShell
.\test_versions.ps1
# Bash/Linux
chmod +x test_versions.sh
./test_versions.sh
go mod init poclogrus
go get github.com/sirupsen/[email protected]
go run poc_logrus_dos_improved.go
综合测试确认:
| 版本 | 状态 | 有错误 | Writer 损坏 |
|---|---|---|---|
| v1.8.1 | 易受攻击 | 是 | 是 |
| v1.8.2 | 易受攻击 | 是 | 是 |
| v1.8.3 | 已修复 | 是 | 否 |
| v1.9.0 | 易受攻击 | 是 | 是 |
| v1.9.1 | 已修复 | 是 | 否 |
| v1.9.2 | 易受攻击 | 是 | 是 |
| v1.9.3 | 已修复 | 是 | 否 |
当 logrus.Writer() 接收到一个大小超过 64KB 且不含换行符的单行数据时,漏洞就会被触发。当应用程序将用户可控数据(例如 HTTP 头如 User-Agent 或子进程的 stdout/stderr)通过管道输入 logrus.Writer() 时,就可能发生这种情况。
易受攻击的版本:内部扫描器失败,管道断开,应用程序丢失日志或崩溃 (DoS)。
已修复的版本:错误会被记录,但 Writer 继续正常工作,从而防止 DoS。