漏洞概述 CWE-125: Out-of-bounds Read 描述: 产品读取了超出预期缓冲区边界的数据,即在缓冲区的末尾之前或开始之后读取数据。 别名: OOB read("Out of bounds" read 的简写) 影响范围 机密性: 攻击者可以获取敏感信息,如加密密钥、个人身份信息(PII)、内存地址等。 完整性: 缓冲区可能包含内存地址或其他可用于绕过ASLR和其他保护机制的信息,从而提高利用其他代码执行漏洞的可靠性。 可用性: 攻击者可能导致分段错误或崩溃,因为读取超出缓冲区边界的内存。特别是在代码读取可变数量的数据并假设存在哨兵(如字符串中的NUL)以停止读取操作时。 其他: 读取操作可能产生其他未定义或意外的结果。 修复方案 输入验证: 使用“接受已知好”的输入验证策略,即使用可接受输入的列表来严格符合规范。拒绝任何不符合规范的输入,或将其转换为符合规范的输入。 语言选择: 使用提供适当内存抽象的语言。 POC代码示例 示例1 问题: 该方法仅验证给定的数组索引是否小于数组的最大长度,但未检查最小值(CWE-839)。这可能导致负值被接受为输入数组索引,从而在缓冲区开始之前读取数据(CWE-127),并可能允许访问敏感内存。 修复: 示例2 问题: 消息长度变量(msgLength)用于循环结束条件,但未验证其是否准确反映消息体的实际长度(CWE-606)。如果msgLength指示的长度大于消息体的大小(CWE-130),则可能导致缓冲区溢出读取(CWE-125)。 相关漏洞 CWE-119: 内存缓冲区内的操作限制不当 CWE-126: 缓冲区溢出读取 CWE-127: 缓冲区下溢读取 CWE-823: 使用未初始化的指针 CWE-824: 访问未初始化的指针 CWE-825: 过期指针读取 适用平台 语言: C(不确定普遍性)、C++(不确定普遍性) 技术: JCS/OT(经常普遍) 检测技术 Fuzzing: 模糊测试是一种生成大量不同输入的强大技术,可以随机或算法地动态调用代码。即使使用随机输入,它也能生成意外结果,如崩溃、内存损坏或资源消耗。模糊测试有效产生可重复的测试用例,清楚地指示错误,帮助开发人员诊断问题。 自动化静态分析: 自动化静态分析,通常称为静态应用程序安全测试(SAST),可以找到一些这种弱点的实例,通过分析源代码(或二进制/编译代码)而不需要执行。通常,这是通过构建数据流和控制流模型,然后搜索潜在易受攻击的模式来完成的,这些模式将“源”(输入的起源)与“汇”(数据与外部组件交互的位置,如较低层代码,如OS等)连接起来。 自动化动态分析: 集成到编译中的工具,用于插入运行时错误检查机制,如AddressSanitizer(ASan)用于C/C++(REF-1518)。 功能区域 内存管理 受影响资源 内存 成员关系 SFP Secondary Cluster: Faulty Buffer Access SEI CERT C Coding Standard - Guidelines 03. Expressions (EXP) SEI CERT C Coding Standard - Guidelines 06. Arrays (ARR) SEI CERT C Coding Standard - Guidelines 07. Characters and Strings (STR) 2019 CWE Top 25 Most Dangerous Software Errors 2021 CWE Top 25 Most Dangerous Software Weaknesses 2020 CWE Top 25 Most Dangerous Software Weaknesses ICS Communications: Frail Security in Protocols 2022 CWE Top 25 Most Dangerous Software Weaknesses Comprehensive Categorization: Memory Safety 2023 CWE Top 25 Most Dangerous Software Weaknesses 2024 CWE Top 25 Most Dangerous Software Weaknesses 2025 CWE Top 25 Most Dangerous Software Weaknesses 漏洞映射笔记 用法: 允许(此CWE ID可用于映射到现实世界的漏洞) 原因: 可接受的使用 理由: 此CWE条目位于基本抽象级别,这是映射到漏洞根本原因的优选抽象级别。 评论: 仔细阅读名称和描述,以确保此映射是合适的。不要试图“强制”映射到较低级别的基本/变体以符合此首选抽象级别。 分类映射 PLOVER: Out-of-bounds Read CERT C Secure Coding: ARR30-C, ARR38-C, EXP39-C, STR31-C, STR32-C Software Fault Patterns: SFP8 相关攻击模式 CAPEC-540: Overread Buffers 参考文献 [REF-1034]: Raoul Strackx, Yves Younan, Pieter Philippaerts, Frank Piessens, Sven Lachmund and Thomas Walter. "Breaking the memory secrecy assumption". ACM, 2009-03-31. [REF-1035]: Fermín J. Serna. "The info leak era on software exploitation". 2012-07-25. [REF-44]: Michael Howard, David LeBlanc and John Viega. "24 Deadly Sins of Software Security". "Sin 5: Buffer Overruns". Page 89. McGraw-Hill. 2010. [REF-1518]: AddressSanitizer. 内容历史 提交日期: 2006-07-19 提交者: PLOVER 贡献日期: 2024-02-29 贡献者: Abhi Balakrishnan