cwe - 190:整数溢出或概括
视图定制的信息:
整数溢出或概括的发生在一个整数值增加太大的值存储在相关的表征。当这种情况发生时,该值可能包装成为一个非常小的或负数。虽然这可能是依赖行为的情况下,包装,它可以安全如果包装是意想不到的后果。尤其如此,如果整数溢出可以触发使用用户提供的输入。这是强调安全的结果用于控制循环时,做出安全性决策,或确定偏移量大小等行为的内存分配,复制、连接等。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
相关观点“七有害的王国”(cwe - 700)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 类:不是特定于语言的患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 以下为图像图像处理代码分配一个表。
(坏的代码)
例如语言:C
img_t table_ptr;/ *结构包含img数据,每个* / 10 kb
int num_imgs; … num_imgs = get_num_imgs (); table_ptr = (img_t *) malloc (sizeof (img_t) * num_imgs); … 这段代码将分配一个表大小num_imgs,然而随着num_imgs越来越大,计算确定的大小最终会溢出列表(cwe - 190)。这将导致一个非常小的列表来分配。如果后续代码运行在名单上,就好像它是num_imgs长,这可能会导致许多类型的界外问题(cwe - 119)。 示例2 下面的代码摘录OpenSSH 3.3演示了一个典型的整数溢出:
(坏的代码)
例如语言:C
nresp = packet_get_int ();
如果(nresp > 0) {
响应= xmalloc (nresp * sizeof (char *)); }(我= 0;我< nresp;我+ +)响应[我]= packet_get_string(空); 如果nresp价值1073741824和sizeof (char *)有其典型值为4,然后操作的结果nresp * sizeof (char *)溢出,和xmalloc()的参数是0。大多数malloc()实现将愉快地分配一个0-byte缓冲区,导致后续的循环迭代中堆溢出缓冲区的回应。 示例3 整数溢出可以检测复杂和困难。下面的例子是为了说明一个整数溢出可能导致未定义的循环行为:
(坏的代码)
例如语言:C
短int bytesRec = 0;
字符缓冲区(SOMEBIGNUM); 而(bytesRec < MAXGET) {
bytesRec + = getFromInput (buf + bytesRec); }在上述情况下,完全有可能,bytesRec可能溢出,不断创造数量低于MAXGET也覆盖第一个MAXGET-1字节的缓冲区。 示例4 在这个例子中determineFirstQuarterRevenue方法用于确定第一季度收入会计/业务应用程序。方法检索前三个月的每月销售总额,计算第一季度销售总额从每月销售总额,计算第一季度收入根据第一季度的销售业绩,最后保存第一季度收入结果数据库。
(坏的代码)
例如语言:C
#定义1月1
#定义2月2 #定义3月3 短getMonthlySales (int) {…} 浮动calculateRevenueForQuarter(短quarterSold) {…} int determineFirstQuarterRevenue () { / /变量的季度销售收入 浮动quarterRevenue f = 0.0; 短JanSold = getMonthlySales(1月);/ * * / 1月销售 短FebSold = getMonthlySales(2月);/ * * / 2月销售 短MarSold = getMonthlySales (MAR);/ * * / 3月销售 / /计算季度总 短quarterSold = JanSold + FebSold + MarSold; / /计算季度的总收入 quarterRevenue = calculateRevenueForQuarter (quarterSold); saveFirstQuarterRevenue (quarterRevenue); 返回0; 然而,在这个例子中原始类型短int用于月度和季度销售变量。在C语言中简短的int原始类型的最大值为32768。这将创建一个潜在的整数溢出如果三个月销售的值加起来超过最大值的短int原始类型。一个整数溢出会导致数据损坏,意想不到的行为,无限循环,系统崩溃。纠正这种情况应该使用适当的原始类型,在下面的例子中,和/或提供了一些验证机制以确保原始类型的最大值不超过。
(好的代码)
例如语言:C
…
浮动calculateRevenueForQuarter(长quarterSold) {…} int determineFirstQuarterRevenue () {
…
/ /计算季度总 长quarterSold = JanSold + FebSold + MarSold; / /计算季度的总收入 quarterRevenue = calculateRevenueForQuarter (quarterSold); … 注意,一个整数溢出也可能发生如果quarterSold变量的原始类型长但是calculateRevenueForQuarter方法有一个参数类型的短。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
的关系
整数溢出可以主缓冲区溢出。
术语
“整数溢出”有时被用来覆盖错误的几种类型,包括signedness错误,或缓冲区溢位涉及整数数据类型,而不是字符的操作。混乱的一部分事实的结果0 xffffffff签署上下文是1。其他困惑是因为整数溢出在链的作用。
更多的信息是可用的,请选择一个不同的过滤器。
|
使用常见的弱点枚举(CWE)和相关的引用从这个网站的使用条款。CWE赞助的美国国土安全部(DHS)网络和基础设施安全机构(CISA)和管理的国土安全系统工程和发展研究所这是由(HSSEDI)manbetx客户端首页(斜方)。版权©2006 - 2023,斜方公司。manbetx客户端首页CWE、水煤浆、CWRAF, CWE标志是斜方公司的商标。manbetx客户端首页 |