cwe - 788:缓冲区结束后访问的内存位置
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
相关的视图”方案及质量的措施(2020)”(CWE-1305)
相关的视图”方案及数据保护措施”(cwe - 1340)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 这个例子将IP地址从一个用户,验证它是完整的,然后查找主机名和拷贝到缓冲区。
(坏的代码)
例如语言:C
空白host_lookup (char * user_supplied_addr) {
struct hostent *惠普;
in_addr_t * addr; char主机名[64]; in_addr_t inet_addr (const char * cp); / *程序确保user_supplied_addr是正确的格式转换* / validate_addr_form (user_supplied_addr); addr = inet_addr (user_supplied_addr); 惠普= gethostbyaddr (addr, sizeof (struct in_addr) AF_INET); strcpy(主机名、hp - > h_name); 这个函数分配64字节的缓冲区存储主机名,但是没有保证主机名不能超过64字节。如果攻击者指定一个地址解析为一个非常大的主机名,那么该函数会覆盖敏感数据,甚至放弃攻击者的控制流。 注意,本例中还包含一个未检查返回值(cwe - 252)能导致一个空指针(cwe - 476)。 示例2 在下面的示例中,可以要求memcpy比假定移动更大的内存段:
(坏的代码)
例如语言:C
int returnChunkSize (void *) {
/ *如果块信息有效,返回可用内存的大小, *,返回1表示一个错误 * / … int main () {
… }memcpy (destBuf srcBuf (returnChunkSize (destBuf) 1)); … 如果returnChunkSize()碰巧遇到一个错误将返回1。注意,返回值不是之前检查memcpy操作(cwe - 2521),所以可以作为尺寸参数传递给memcpy () (cwe - 805)。因为memcpy()假设值是无符号,它将被视为MAXINT-1 (cwe - 195),因此将远比可能可用内存复制到目标缓冲区(cwe - 787,cwe - 788)。 示例3 这个例子中一个编码过程适用于一个输入字符串并将其存储到缓冲区。
(坏的代码)
例如语言:C
char * copy_input (char * user_supplied_string) {
int i, dst_index;
char * dst_buf = (char *) malloc (4 * sizeof (char) * MAX_SIZE); 如果(MAX_SIZE < = strlen (user_supplied_string)) {
死亡(“用户字符串太长,死亡邪恶的黑客!”); }dst_index = 0; (我= 0;我< strlen (user_supplied_string);我+ +){
如果(' & ' = = user_supplied_string[我]){
dst_buf (dst_index + +) = ' & '; }dst_buf (dst_index + +) = ' a '; dst_buf [dst_index + +] =“m”; dst_buf [dst_index + +] =“p”; dst_buf (dst_index + +) = '; '; else if (' < ' = = user_supplied_string[我]){ / * & lt编码;* / 其他dst_buf [dst_index + +] = user_supplied_string[我]; 返回dst_buf; 程序员试图编码用户控制的&字符字符串,然而字符串的长度编码应用程序之前进行验证。此外,程序员假定编码扩张只会扩大给定字符的4倍,而编码&扩展的5。结果,当编码过程扩展了字符串可以溢出目的地缓冲区,如果攻击者提供了许多与符号的字符串。 示例4 在接下来的C / c++方法processMessageFromSocket例子从一个套接字()将会得到一个消息,放入缓冲区,并将缓冲区的内容解析成一个结构,包含消息长度和消息体。使用一个for循环将消息体复制到本地字符串将被传递给另一个方法进行处理。
(坏的代码)
例如语言:C
int processMessageFromSocket (int插座){
int成功;
字符缓冲区(BUFFER_SIZE); 字符消息(MESSAGE_SIZE); / /得到消息从套接字并存储到缓冲区 / /忽略缓冲区> BUFFER_SIZE医生 如果(getMessage(套接字缓冲区,BUFFER_SIZE) > 0) { / /将缓冲区的内容放入消息结构 ExMessage *味精= recastBuffer(缓冲); / /消息体复制到字符串进行处理 int指数; (指数= 0;指数<味精- > msgLength;指数+ +){
消息(指数)=味精- > msgBody(指数); }消息(指数)= ' \ 0 '; / /处理消息 成功= processMessage(消息); 返回成功; 然而,消息长度可变的结构是用作循环结束的条件没有确认消息长度变量准确地反映消息体的长度(cwe - 606)。这可能导致一个缓冲区上(cwe - 125)通过阅读从内存缓冲区的边界之外如果消息长度变量表示的长度长于消息体的大小(cwe - 130)。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
更多的信息是可用的,请选择一个不同的过滤器。
|
使用常见的弱点枚举(CWE)和相关的引用从这个网站的使用条款。CWE赞助的美国国土安全部(DHS)网络和基础设施安全机构(CISA)和管理的国土安全系统工程和发展研究所这是由(HSSEDI)manbetx客户端首页(斜方)。版权©2006 - 2023,斜方公司。manbetx客户端首页CWE、水煤浆、CWRAF, CWE标志是斜方公司的商标。manbetx客户端首页 |