CVE-2026-5089YAML::Syck是Perl语言中广泛使用的YAML解析库。在1.38版本之前,该库存在严重的安全漏洞,涉及base60(六十进制)解析代码中的缓冲区下溢问题。当解析包含冒号分隔的值(例如时间格式'1:30:45')时,程序在处理最左侧片段时可能会发生越界读取。具体而言,指针在向后搜索冒号的过程中可能越过字符串缓冲区的起始位置,导致读取缓冲区外的一个字节。攻击者可通过诱导受害者解析特制的YAML文件来触发此漏洞,可能导致应用程序崩溃或敏感信息泄露。
该漏洞位于`perl_syck.h`文件的base60解析逻辑中,具体影响`int#base60`和`float#base60`处理程序。代码在处理冒号分隔的字符串时,使用指针从当前位置向前扫描查找分隔符。关键代码逻辑如下:`while ( colon >= ptr && *colon != ':' ) { colon--; }`。当处理最左侧的片段(如'1:30:45'中的'1')时,如果未找到冒号,循环会在`colon`等于`ptr`时停止,随后`colon`被递减为`ptr-1`。接下来的检查`if ( *colon == ':' )`试图对`ptr-1`位置进行解引用读取。由于该位置位于已分配的堆缓冲区之外,导致了缓冲区下溢。尽管越界读取通常造成信息泄露或拒绝服务,但在特定内存环境下可能引发更严重的后果。此漏洞无需认证且无用户交互即可通过网络触发。