漏洞概述 该漏洞涉及捆绑的libcy库中的四个缺陷,这些缺陷可以通过默认的YAML::Syck::Load()路径在未特制的输入下触发。这些缺陷包括: 1. CVE-2026-57075:CWE-125 越界读取(基于解码器) 2. CVE-2026-57076:CWE-416 使用后释放(锚点键字符串) 3. CVE-2026-57077:CWE-125 越界读取(lexer newline scan) 4. CVE-2026-13713:CWE-416 使用后释放(锚点节点) 影响范围 libcy库:所有四个缺陷都存在于捆绑的libcy库中。 YAML::Syck::Load():这些缺陷可以通过默认的YAML::Syck::Load()路径触发。 默认构建:这些缺陷在默认构建中是可触发的。 修复方案 1. CVE-2026-57075: - 问题:解码器索引了256个条目的静态64位xtable,使用有符号char作为索引,导致负索引读取。 - 修复:将每个表索引站点转换为无符号char,确保高字节始终为0x255。 2. CVE-2026-57076: - 问题:锚点名称由syck_strndup分配,用于键和锚点,但锚点重新定义后,键表被释放,导致悬空指针。 - 修复:将锚点和坏锚点表的所有权交给键字符串,避免悬空指针。 3. CVE-2026-57077: - 问题:lexer newline扫描中,token->len[i]被解引用,但没有NULL终止符或边界保证。 - 修复:在lexer路径中添加显式“len”参数检查和边界检查。 4. CVE-2026-13713: - 问题:锚点节点在重新定义或移除时,48字节节点块被释放两次,导致双重释放。 - 修复:在重新定义或移除锚点时,正确管理节点块的生命周期。 POC代码 验证 测试套件:72个文件/1176个测试(AUTOMATED_TESTING=1),无ASan增长超过200%的迭代。 ASan CI作业:确认所有ASan可见缺陷在修补后未触发。 文档和包装:更新CLAUDE.md和MANIFEST.md,添加测试文件。 代码变更 文件变更:12个文件,237个插入,39个删除。 主要变更: - :添加测试文件。 - :修复越界读取。 - :修复使用后释放。 - :修复锚点节点和键字符串的生命周期管理。 - :更新结构定义。 结论 该补丁修复了libcy库中的四个关键漏洞,确保在默认构建中不会触发这些缺陷。通过详细的测试和验证,确保修复的有效性和稳定性。