cwe - 787:界外写
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
相关的视图”方案及质量的措施(2020)”(CWE-1305)
相关的视图”方案及数据保护措施”(cwe - 1340)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 C(通常是普遍的) c++(通常是普遍的) 类:装配患病率(待定) 技术 类:ICS /不(通常是普遍的)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 下面的代码尝试将四个不同的身份证号码保存到一个数组。
(坏的代码)
例如语言:C
int id_sequence [3];
/ *填充id数组。* / id_sequence [0] = 123; id_sequence [1] = 234; id_sequence [2] = 345; id_sequence [3] = 456; 因为数组只分配给三个元素,有效的索引0到2;所以,作业id_sequence[3]是界外。 示例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 这段代码需要来自用户的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)。 示例4 这段代码编码过程适用于一个输入字符串并将其存储到缓冲区。
(坏的代码)
例如语言: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。结果,当编码过程扩展了字符串可以溢出目的地缓冲区,如果攻击者提供了许多与符号的字符串。 示例5 在接下来的C / c++代码,效用函数用于从字符串修剪尾随空格。函数将输入字符串复制到本地字符串并使用一段语句删除尾随空格通过字符串和向后移动覆盖NUL字符的空格。
(坏的代码)
例如语言:C
char * trimTrailingWhitespace (char * strMessage int长度){
char * retMessage;
char *消息= malloc (sizeof (char) *(+ 1)长度); / /输入字符串复制到一个临时字符串 字符消息(长度+ 1); int指数; (指数= 0;指数<长度;指数+ +){
消息(指数)= strMessage(指数); }消息(指数)= ' \ 0 '; / /修剪尾随空格 int len =索引1; 而(isspace(消息(len))) {
消息(len) = ' \ 0 '; }莱恩-; / /返回字符串没有空格 retMessage =消息; 返回retMessage; 然而,这个函数会导致缓冲承销如果输入字符串包含所有空格。在某些系统过去而声明将后退一个字符串的开始,将调用isspace()函数在一个地址的范围之外的本地缓冲区。 例子6 下面的代码分配内存的最大数量的小部件。然后获得指定数量的小部件,确保用户不要求太多。然后初始化数组的元素使用InitializeWidget ()。因为小部件的数量可以为每个请求不同,插入一个空指针的代码意味着最后一个部件的位置。
(坏的代码)
例如语言:C
int我;
unsigned int numWidgets; 小部件* * WidgetList; numWidgets = GetUntrustedSizeValue (); 如果((numWidgets = = 0) | | (numWidgets > MAX_NUM_WIDGETS)) {
ExitError(“不正确的请求数量的小部件!”); }WidgetList =(小部件* *)malloc (numWidgets * sizeof(小部件*)); printf (" WidgetList ptr = % p \ n ", WidgetList); (我= 0;我< numWidgets;我+ +){
WidgetList[我]= InitializeWidget (); }WidgetList [numWidgets] =零; showWidgets (WidgetList); 然而,这段代码包含一个这些计算错误(-cwe - 193)。它分配足够的空间来包含指定数量的部件,但不包括空指针的空间。因此,分配缓冲区比它应该是(小cwe - 131)。如果用户请求MAX_NUM_WIDGETS,有一个界外写(cwe - 787当零分配。根据环境和编译设置,这可能会导致内存泄露。 例7 下面的代码可能会导致一个缓冲承销,如果发现()返回一个负值,表明ch srcBuf没有找到:
(坏的代码)
例如语言:C
int main () {
… }strncpy (destBuf &srcBuf[找到(srcBuf ch)], 1024); … 如果索引srcBuf用户的控制之下,这是一个任意write-what-where条件。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
更多的信息是可用的,请选择一个不同的过滤器。
|
使用常见的弱点枚举(CWE)和相关的引用从这个网站的使用条款。CWE赞助的美国国土安全部(DHS)网络和基础设施安全机构(CISA)和管理的国土安全系统工程和发展研究所这是由(HSSEDI)manbetx客户端首页(斜方)。版权©2006 - 2023,斜方公司。manbetx客户端首页CWE、水煤浆、CWRAF, CWE标志是斜方公司的商标。manbetx客户端首页 |