描述
产品接收输入,将指定一个量(如大小或长度),但它并不验证或不正确验证数量具有所需的属性。
扩展描述
指定数量包括大小、长度、频率、价格,速度,操作的数量,时间,和其他人。指定代码可能依靠数量来分配资源,执行计算,控制迭代,等。当数量不正确验证,那么攻击者可以指定恶意数量导致过度的资源分配,引发意想不到的失败,使缓冲区溢出等。
的关系
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围 |
影响 |
可能性 |
其他
|
因为数量经常用来影响资源分配或处理财务数据,它们经常出现在许多地方在代码中。 |
|
示范例子
示例1
这个例子演示了一个购物交互的用户是免费的,指定要购买物品的数量和总计算。
… 公共静态最终双价格= 20.00; int数量= currentUser.getAttribute(“数量”); 双总=价格*数量; chargeUser(总); …
用户无法控制价格变量,然而代码并不阻止一个负值指定数量。如果攻击者提供一个负数,那么用户将他们的帐户贷方记入借方。
示例2
本例要求用户一个m X n的高度和宽度最大尺寸100方格的棋盘游戏。
… #定义MAX_DIM 100 …
/ * * /董事会维度
int m, n,错误; board_square_t *板; printf("请指定董事会高度:\ n”); 错误= scanf (“% d”, a&m); 如果(EOF = =错误){
死亡(“没有通过整数:死邪恶的黑客! \ n”); } printf("请指定板宽度:\ n”); 错误= scanf (“% d”, n); 如果(EOF = =错误){
死亡(“没有通过整数:死邪恶的黑客! \ n”); } 如果(m > MAX_DIM | | n > MAX_DIM) {
死亡(“价值太大:死邪恶的黑客! \ n”); } 董事会= (board_square_t *) malloc (m * n * sizeof (board_square_t)); …
虽然这个代码检查,以确保用户无法指定大,正整数和消耗过多内存,它不检查用户提供的负值。因此,攻击者可以执行资源消耗(cwe - 400)攻击这个程序通过指定两个,大的负值,不会溢出,导致一个非常大的内存分配(cwe - 789)甚至系统崩溃。另外,攻击者可以提供非常大的负值将导致一个整数溢出(cwe - 190)和异常行为会取决于价值观对待剩余的项目。
观察到的例子
参考 |
描述 |
|
|
|
缺乏验证长度字段导致无限循环 |
|
缺乏验证字符串长度字段允许内存消耗或缓冲罩上 |
潜在的缓解措施
实施阶段:
假设所有的输入是恶意的。使用一个“接受良好的“输入验证策略,即。,使用一个可接受的输入列表,严格遵守规范。拒绝任何不严格符合规范的输入,或将其转换为一些。
当执行输入验证,考虑所有可能相关的属性,包括长度,类型的输入,可接受的值的全系列,缺失或额外的输入,语法,一致性相关领域,符合业务规则。作为业务规则逻辑的一个例子,在语法上“船”可能是有效的,因为它只包含字母数字字符,但它不是有效的如果输入预计仅包含颜色,如“红”或“蓝色”。
不完全依赖寻找恶意或畸形的输入。这很可能错过至少有一个不受欢迎的输入,特别是如果代码的环境变化。这可以让攻击者有足够的空间绕过验证。然而,denylists可以用于检测潜在攻击或确定哪些输入是畸形的,应该直接驳回。
|
笔记
维护
这个条目仍处于开发阶段,将继续看到更新和内容的改进。
|