CWE-681: Incorrect Conversion between Numeric Types (数字类型之间的错误转换) 漏洞概述 当从一种数据类型转换到另一种数据类型(例如转换为整数)时,数据可能会被省略或以产生意外值的方式转换。如果这些结果值用于敏感上下文,则可能发生危险行为。 影响范围 该漏洞主要涉及数值精度丢失和类型转换逻辑错误,具体表现为: 1. 精度丢失:浮点数转换为整数时,小数部分被截断。 2. 舍入行为意外:显式强制转换可能导致向下舍入(round down),而非预期的四舍五入。 3. 有符号/无符号转换错误:当函数返回负值但声明为无符号整数(unsigned int)时,负值会被隐式转换为巨大的正数(例如 -1 变为 4,294,967,295),可能导致缓冲区溢出或逻辑错误。 修复方案 避免不必要的转换:尽量使用合适的数据类型,避免在不需要时进行类型转换。 显式处理转换:在进行类型转换前,显式检查数据范围,确保转换后的值符合预期,不要依赖隐式转换。 使用合适类型:如果变量可能包含负值,应使用有符号整数(signed int)而非无符号整数(unsigned int)。 漏洞代码示例 (POC) Example - 1 (Java) Example - 2 (PHP) Example - 3 (C/C++) Example - 4 (C/C++)**