ID: 196 类型:变量 | 状态:草稿 |
描述
软件使用无符号数据强制转换成有符号数据,如果无符号数据的值不能用有符号数据表示,则会产生意外的值。
扩展描述
尽管无符号到有符号的转换比有符号到无符号的转换更不常见,但无符号到有符号的转换是危险的缓冲区下溢的完美前兆,允许攻击者向下移动堆栈,否则在正常缓冲区溢出条件下可能无法访问。当大的无符号值被强制转换为有符号值,然后用作缓冲区的索引或指针算术时,缓冲区下溢频繁发生。
相关视图
与“研究层面”视图(CWE-1000)相关
与“开发层面”视图(CWE-699)相关
引入模式
阶段 | 说明 |
实现 |
应用平台
语言
C (出现的可能性不确定)
C++ (出现的可能性不确定)
后果
范围 | 冲击 | 可能性 |
可利用性 | 技术冲击: DoS: 崩溃、退出或重启 I不正确的符号转换通常会导致未定义的行为,从而导致崩溃。 | |
完整性 | 技术冲击: 修改内存 如果不良的强制转换导致缓冲区溢出或类似的情况,数据完整性可能会受到影响。 | |
完整性 | 技术冲击: 执行未获授权的代码或者命令;越过保护机制 .没有正确检查的不正确的有符号到无符号转换有时会触发缓冲区溢出,这些溢出可用于执行任意代码。这通常不在程序隐式安全策略的范围内。 |
被利用的可能性:
一般
应对措施
阶段: 需求 选择一种不受这些铸造缺陷影响的语言。 |
阶段: 架构与设计 设计对象访问器函数以隐式检查有效大小的值。确保所有将用作大小的函数在用作大小之前都已选中。如果语言允许,则抛出异常,而不是使用带内错误。 |
阶段: 实现 错误检查所有函数的返回值。请注意所做的隐式强制转换,并尽可能使用无符号变量来表示大小。 |
种属
关系 | 类型 | ID | 名称 |
属于 | 998 |