CWE-468: Incorrect Pointer Scaling(指针缩放错误)

在C和C++编程中,不当的指针操作可能导致内存读写错误,如缓冲区溢出,影响软件安全性。本文探讨了指针索引时常见的误区,即直接加1可能因隐式数据类型转换而错位,导致读取或写入错误的内存位置,进而引发安全漏洞。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 ID: 468

类型:基础
结构:简单

状态:未完成

描述

在 C和C++中,由于存在指针索引的隐式数据转换,人们经常会意外地引用错误的内存。

相关视图

与“研究层面”视图(CWE-1000)相关

与“开发层面”视图(CWE-699)相关

引入模式

阶段

说明

实现

程序员可以通过添加一些字节来尝试从指针索引。这是不正确的,因为C和C++隐式地将操作数按数据类型的大小进行缩放。

应用平台

语言

C (出现的可能性不确定)

C++ (出现的可能性不确定)

后果

范围

冲击

可能性

保密性
完整性

技术冲击: 内存读取; 修改内存

I指针缩放不正确通常会导致缓冲区溢出。如果弱点是在缓冲区的上下文中,则可能会破坏其保密性。

 

被利用的可能性:

一般

示例

例1

此示例尝试计算指针第二个字节的位置。

(问题代码)

Example Language:

int *p = x;
char * second_char = (char *)(p + 1);

在本例中,第二个_char用于指向p的第二个字节。但是,将1添加到p实际上会将sizeof(int)添加到p,从而导致不正确的结果(在32位平台上为3个字节)。如果读取结果内存地址,这可能是信息泄漏。如果是一个写,它可能是对非授权内存的安全关键性的写入,不管它是否是缓冲区溢出。请注意,上述代码在其他方面也可能是错误的,特别是在低位编址环境中。

应对措施

阶段: 架构与设计

使用具有高级内存抽象的平台。

阶段: 实现

始终使用数组索引而不是直接指针操作。

阶段: 架构与设计

使用防止缓冲区溢出的技术。

种属

关系

类型

ID

名称

属于

737

CERT C Secure Coding Standard (2008) Chapter 4 - Expressions (EXP)

属于

884

CWE Cross-section

属于

998

SFP Secondary Cluster: Glitch in Computation

属于

1160

SEI CERT C Coding Standard - Guidelines 06. Arrays (ARR)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值