CWE-464 对数据结构哨兵域的增加
Addition of Data Structure Sentinel
结构: Simple
Abstraction: Base
状态: Incomplete
被利用可能性: High
基本描述
The accidental addition of a data-structure sentinel can cause serious programming logic problems.
扩展描述
Data-structure sentinels are often used to mark the structure of data. A common example of this is the null character at the end of strings or a special sentinel to mark the end of a linked list. It is dangerous to allow this type of control data to be easily accessible. Therefore, it is important to protect from the addition or modification of sentinels.
相关缺陷
适用平台
Language: [{'cwe_Name': 'C', 'cwe_Prevalence': 'Undetermined'}, {'cwe_Name': 'C++', 'cwe_Prevalence': 'Undetermined'}]
常见的影响
范围 | 影响 | 注释 |
---|---|---|
Integrity | Modify Application Data | Generally this error will cause the data structure to not work properly by truncating the data. |
可能的缓解方案
['Implementation', 'Architecture and Design']
策略:
Encapsulate the user from interacting with data sentinels. Validate user input to verify that sentinels are not present.
Implementation
策略:
Proper error checking can reduce the risk of inadvertently introducing sentinel values into data. For example, if a parsing function fails or encounters an error, it might return a value that is the same as the sentinel.
Architecture and Design
策略:
Use an abstraction library to abstract away risky APIs. This is not a complete solution.
Operation
策略:
Use OS-level preventative functionality. This is not a complete solution.
示例代码
例
The following example assigns some character values to a list of characters and prints them each individually, and then as a string. The third character value is intended to be an integer taken from user input and converted to an int.
bad C
foo=malloc(sizeof(char)5);
foo[0]='a';
foo[1]='a';
foo[2]=atoi(getc(stdin));
foo[3]='c';
foo[4]=' '
printf("%c %c %c %c %c n",foo[0],foo[1],foo[2],foo[3],foo[4]);
printf("%sn",foo);
The first print statement will print each character separated by a space. However, if a non-integer is read from stdin by getc, then atoi will not make a conversion and return 0. When foo is printed as a string, the 0 at character foo[2] will act as a NULL terminator and foo[3] will never be printed.
分类映射
映射的分类名 | ImNode ID | Fit | Mapped Node Name |
---|---|---|---|
CLASP | Addition of data-structure sentinel | ||
CERT C Secure Coding | STR03-C | Do not inadvertently truncate a null-terminated byte string | |
CERT C Secure Coding | STR06-C | Do not assume that strtok() leaves the parse string unchanged |
文章来源于互联网:scap中文网
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论