漏洞信息 漏洞描述 类型: 堆缓冲区溢出(Heap-buffer-overflow) 位置: 编译器的词法分析器(peekChar)在解析包含恶意格式的引号序列的源文件时发生崩溃。 具体: 该漏洞在解析一个带恶意格式的引号管理员源码文件时在编译器的词法分析器(peekChar)中发生崩溃。 环境 操作系统: Linux x86_64 编译器: Clang 构建配置: 发布模式,启用AddressSanitizer (ASan) 漏洞细节 目标: Wren (wren-lang) 漏洞类型: CWE-125: Out-of-bounds Read 函数: peekChar (由readRawString调用) 位置: src/vm/wren_compiler.c:641 根本原因分析: 当词法分析器尝试解析原始字符串字面量(例如三重引号 """)时发生崩溃。 具体分析 1. 测试用例以多个引号结尾: nt("""""""""""""")。 2. nextToken函数调用readRawString处理字符串字面量。 3. 在readRawString内部,解析器消耗字符来查找关闭的分隔符。 4. readRawString(或其使用peekeChar)内部的循环逻辑在面对不完整的或过度的引号时,未能正确检测源缓冲区(EOF/空终止符)的结束,导致其读取堆分配的源字符串末尾之后的一个字节。 复现步骤 1. 使用发布优化和启用ASan构建Wren和测试程序。 2. 运行带有崩溃文件的测试: 3. 查看ASan报告。