CVE-2025-65637CVE-2025-65637是github.com/sirupsen/logrus日志库中的一个高危拒绝服务漏洞。该漏洞存在于Entry.Writer()功能中,当使用该功能记录单行payload且内容超过64KB且不包含换行符时,会触发内部bufio.Scanner的限制,导致读取操作失败并返回「token too long」错误。此错误会导致写入管道被意外关闭,使得Writer()方法永久不可用,进而造成应用程序的日志功能失效,最终导致应用程序可用性受损(DoS)。logrus是Go语言生态中广泛使用的日志库,被大量开源项目和商业应用所依赖,因此该漏洞影响范围较广。任何使用受影响版本logrus且允许用户控制日志内容的应用都可能受到此漏洞威胁。攻击者可以通过向应用程序提交超长的单行日志数据来触发该漏洞,导致服务中断。
该漏洞的根源在于Go语言标准库中bufio.Scanner的默认token大小限制为64KB。当logrus的Entry.Writer()方法尝试读取超过此限制的连续数据(无换行符分隔)时,Scanner会抛出「bufio.Scanner: token too long」错误。在logrus的早期版本中,这个错误处理逻辑存在缺陷:当Scanner遇到错误时,会直接关闭底层的写入管道(pipe),导致Writer()方法变得完全不可用。由于Writer()是通过goroutine中的管道实现的,一旦管道被关闭,该goroutine将无法继续工作,即使后续传入符合长度要求的数据也无法恢复功能。攻击者只需要构造一个大于64KB且不包含换行符\n的字符串作为日志内容,通过任何支持用户输入日志的渠道(如日志记录API、错误报告功能等)提交,即可触发该漏洞。这种攻击方式简单直接,不需要特殊权限或复杂的技术手段。