CWE-690 未检查返回值导致空指针解引用

admin 2021年12月16日15:52:53评论220 views字数 3110阅读10分22秒阅读模式

CWE-690 未检查返回值导致空指针解引用

Unchecked Return Value to NULL Pointer Dereference

结构: Chain

Abstraction: Compound

状态: Draft

被利用可能性: unkown

基本描述

The product does not check for an error after calling a function that can return with a NULL pointer if the function fails, which leads to a resultant NULL pointer dereference.

扩展描述

While unchecked return value weaknesses are not limited to returns of NULL pointers (see the examples in CWE-252), functions often return NULL to indicate an error status. When this error condition is not checked, a NULL pointer dereference can occur.

相关缺陷

  • cwe_Nature: StartsWith cwe_CWE_ID: 252 cwe_View_ID: 709 cwe_Chain_ID: 690

  • cwe_Nature: ChildOf cwe_CWE_ID: 476 cwe_View_ID: 1000 cwe_Ordinal: Primary

适用平台

Language: [{'cwe_Name': 'C', 'cwe_Prevalence': 'Undetermined'}, {'cwe_Name': 'C++', 'cwe_Prevalence': 'Undetermined'}]

常见的影响

范围 影响 注释
Availability DoS: Crash, Exit, or Restart

检测方法

Black Box

This typically occurs in rarely-triggered error conditions, reducing the chances of detection during black box testing.

White Box

Code analysis can require knowledge of API behaviors for library functions that might return NULL, reducing the chances of detection when unknown libraries are used.

示例代码

The code below makes a call to the getUserName() function but doesn't check the return value before dereferencing (which may cause a NullPointerException).

bad Java

String username = getUserName();
if (username.equals(ADMIN_USER)) {

...

}

This example takes an IP address from a user, verifies that it is well formed and then looks up the hostname and copies it into a buffer.

bad C

void host_lookup(char user_supplied_addr){

struct hostent hp;
in_addr_t addr;
char hostname[64];
in_addr_t inet_addr(const char
cp);

/routine that ensures user_supplied_addr is in the right format for conversion /

validate_addr_form(user_supplied_addr);
addr = inet_addr(user_supplied_addr);
hp = gethostbyaddr( addr, sizeof(struct in_addr), AF_INET);
strcpy(hostname, hp->h_name);

}

If an attacker provides an address that appears to be well-formed, but the address does not resolve to a hostname, then the call to gethostbyaddr() will return NULL. Since the code does not check the return value from gethostbyaddr (CWE-252), a NULL pointer dereference (CWE-476) would then occur in the call to strcpy().

Note that this example is also vulnerable to a buffer overflow (see CWE-119).

分析过的案例

标识 说明 链接
CVE-2008-1052 Large Content-Length value leads to NULL pointer dereference when malloc fails. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-1052
CVE-2006-6227 Large message length field leads to NULL pointer dereference when malloc fails. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2006-6227
CVE-2006-2555 Parsing routine encounters NULL dereference when input is missing a colon separator. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2006-2555
CVE-2003-1054 URI parsing API sets argument to NULL when a parsing failure occurs, such as when the Referer header is missing a hostname, leading to NULL dereference. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1054
CVE-2008-5183 chain: unchecked return value can lead to NULL dereference https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-5183

分类映射

映射的分类名 ImNode ID Fit Mapped Node Name
CERT C Secure Coding EXP34-C CWE More Specific Do not dereference null pointers
The CERT Oracle Secure Coding Standard for Java (2011) ERR08-J Do not catch NullPointerException or any of its ancestors
SEI CERT Perl Coding Standard EXP32-PL CWE More Specific Do not ignore function return values

文章来源于互联网:scap中文网

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月16日15:52:53
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CWE-690 未检查返回值导致空指针解引用https://cn-sec.com/archives/613198.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息