CWE

常见的弱点枚举

一个由社区开发的软件&硬件缺陷类型的列表

2021 CWE最重要的硬件的弱点
CWE最危险的弱点
>CWE列表> CWE -个人字典定义(4.10)
ID

CWE-20:不适当的输入验证

弱点ID: 20
抽象:
结构:简单的
视图定制的信息:
+描述
产品接收输入或数据,但它不验证或不正确验证输入所需的属性的过程安全、正确的数据。
+扩展描述

输入验证检查潜在的危险是一个经常使用的技术投入,以确保输入是安全的在代码中进行处理,或与其他组件进行通信。当软件不正确验证输入,攻击者可以手工输入所期望的形式不是应用程序的其余部分。这将导致部分系统收到意想不到的输入,这可能会导致改变控制流,任意一个资源的控制权,或任意代码执行。

输入验证并不是唯一的技术处理输入,然而。其他技术尝试变换输入变成安全的潜在危险,如过滤(cwe - 790)——试图消除危险的输入——或编码/转义(cwe - 116),试图确保输入不是误解当它是包含在输出到另一个组件。其他技术存在(见cwe - 138更多的例子。)

输入验证可应用于:

  • 原始数据(字符串、数字、参数文件内容等。
  • 元数据,原始数据的信息,如标题或大小

可以是简单的或结构化的数据。结构化数据可以组成很多嵌套层,的组合组成的元数据和原始数据,与其他简单的或结构化数据。

许多原始数据或元数据的属性可能需要验证后进入代码,如:

  • 指定数量如大小、长度、频率、价格,速度,操作的数量,时间,等等。
  • 暗示或派生的数量,如文件的实际大小,而不是指定的大小
  • 索引、抵消或职位到更复杂的数据结构
  • 到哈希表中符号键或其他元素,关联数组等。
  • 格式良好性,即语法正确,符合预期的语法
  • 词法记号正确性,遵守规则作为一个令牌
  • 指定或派生类型,输入的实际类型(或输入似乎是什么)
  • 之间的一致性——单个数据元素之间,原始数据和元数据,引用之间等。
  • 符合特定领域的规则,例如业务逻辑
  • 等价——确保等效输入相同的对待
  • 真实性、所有权或其他证明输入,例如加密签名来证明数据的来源

暗示或派生属性数据必须经常计算或推断的代码本身。错误在派生属性可能被视为一个因素不适当的输入验证。

注意,“输入验证”对不同的人有着非常不同的含义,或在不同的分类方案。时必须谨慎引用这个CWE条目或映射。例如,一些弱点可能涉及无意中给攻击者控制在一个输入时不应该能够提供一个输入,但有时这被称为输入验证。

最后,重要的是要强调输入验证和输出逃离之间的差别往往是模糊的,和开发人员必须小心理解的差异,包括如何输入验证并不总是足以防止漏洞,特别是严格的数据类型必须支持较少,如自由格式的文本。考虑一个SQL注入场景,在该场景中,一个人的姓是插入一个查询。“O ' reilly”这个名字可能会通过验证步骤,因为它是一种常见的姓氏在英语语言。然而,这有效的名称不能直接插入到数据库,因为它包含了““撇号的角色,这将需要转义或转换。在这种情况下,删除撇号可能会减少SQL注入的风险,但是它会产生不正确的行为,因为错误的名字将被记录下来。

+的关系
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”研究概念”(cwe - 1000)
自然 类型 ID 的名字
ChildOf 支柱支柱——一个弱点是最抽象类型的弱点和代表一个主题类/基地/变体相关弱点。支柱是不同于一个类别作为支柱技术上仍然是一种弱点,描述了一个错误,而一个类别代表一个共同特征用于组相关的东西。 707年 不适当的中和
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 179年 不正确的行为秩序:早期验证
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 622年 不当的验证函数钩参数
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1173年 验证框架的使用不当
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1284年 不当验证指定数量的输入
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1285年 验证指定的索引位置不当,或抵消输入
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1286年 不当语法正确性的验证输入
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1287年 不当的验证指定的类型的输入
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1288年 不当内的一致性验证输入
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1289年 不当的不安全的等价验证输入
PeerOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 345年 验证数据的真实性不足
CanPrecede 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 22 不当限制限制目录的路径名(“路径遍历”)
CanPrecede 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 41 不当的解决路径等效
CanPrecede 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 74年 不当中和下游组件使用的特殊元素的输出(注射)
CanPrecede 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 119年 不当的操作限制的范围内一个内存缓冲区
CanPrecede 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 770年 资源配置没有限制或节流
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然 类型 ID 的名字
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 129年 不当的验证数组索引
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1284年 不当验证指定数量的输入
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关视图”架构概念”(cwe - 1008)
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1019年 验证输入
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关观点“七有害的王国”(cwe - 700)
自然 类型 ID 的名字
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 15 外部控制系统或配置设置
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 73年 外部控制文件名或路径
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 102年 Struts:重复验证形式
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 103年 Struts:不完整的validate()方法的定义
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 104年 Struts:表单Bean不扩展验证类
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 105年 Struts:表单字段验证器
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 106年 Struts:不使用的插件框架
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 107年 Struts:未使用的验证形式
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 108年 Struts:用户搜索行动形式
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 109年 Struts:验证器关闭
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 110年 Struts:没有表单字段验证器
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 111年 直接使用不安全的JNI
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 112年 失踪的XML验证
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 113年 不当中和CRLF序列在HTTP头(HTTP请求/响应分裂)
ParentOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 114年 过程控制
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 117年 不正确的输出中和日志
ParentOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 119年 不当的操作限制的范围内一个内存缓冲区
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 120年 缓冲区复制没有检查输入的大小(经典的缓冲区溢出)
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 134年 使用外部控制的格式字符串
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 170年 不当零终止
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 190年 整数溢出或概括的
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 466年 返回指针值的预期范围之外
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 470年 使用外部控制输入选择类或代码(“不安全的反思”)
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 785年 使用路径操作函数没有Maximum-sized缓冲区
+模式的介绍
部分帮助不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 请注意
架构和设计
实现

实现:造成这一弱点在建筑安全策略的实施。

如果一个程序员认为,攻击者不能修改特定的输入,那么程序员可能不执行任何输入验证。例如,在web应用程序中,许多程序员认为饼干和隐藏表单字段从web浏览器(不能修改cwe - 472),虽然他们可以改变使用代理或一个自定义的程序。在客户机-服务器体系结构中,程序员可能假定客户端无法绕过安全检查,即使可以编写一个定制的客户端,跳过那些检查(cwe - 602)。

+适用的平台
部分帮助该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。

语言

类:不是特定于语言的(通常是普遍的)

+常见的后果
部分帮助这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围 影响 可能性
可用性

技术的影响:DoS:崩溃,退出或重新启动;DoS:资源消耗(CPU);DoS:资源消耗(内存)

攻击者可以提供意想不到的价值,导致程序崩溃或过度消费的资源,如内存和CPU。
保密

技术的影响:读记忆;读文件或目录

攻击者可以读机密数据,如果他们能够控制资源引用。
完整性
保密
可用性

技术的影响:修改内存;执行未经授权的代码或命令

攻击者可以利用恶意输入修改数据或改变控制流以意想不到的方式,包括任意命令执行。
+利用的可能性
+示范例子

示例1

这个例子演示了一个购物交互的用户是免费的,指定要购买物品的数量和总计算。

(坏的代码)
例如语言:Java

公共静态最终双价格= 20.00;
int数量= currentUser.getAttribute(“数量”);
双总=价格*数量;
chargeUser(总);

用户无法控制价格变量,然而代码并不阻止一个负值指定数量。如果攻击者提供一个负数,那么用户将他们的帐户贷方记入借方。

示例2

本例要求用户一个m X n的高度和宽度最大尺寸100方格的棋盘游戏。

(坏的代码)
例如语言:C

#定义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)和异常行为会取决于价值观对待剩余的项目。

示例3

下面的示例显示了一个PHP应用程序的程序员试图显示用户的生日和主页。

(坏的代码)
例如语言:PHP
$生日= $ _GET['生日快乐'];
$首页= $ _GET['主页');
回声“生日:$生日< br >主页:< a href = $主页>点击这里< / >”

程序员用于生日的日期格式和美元的主页是一个有效的URL。然而,由于来自HTTP请求的值,如果攻击者可以哄骗受害者点击一个精心制作的URL与<脚本>标签提供生日的值和/或主页,则脚本将运行在客户的浏览器当web服务器回应的内容。注意,即使程序员捍卫美元的生日变量通过限制输入整数和破折号,它仍然是可能的攻击者提供一个字符串的形式:

(攻击代码)
2009-01-09——

如果这些数据是在SQL语句中使用,它将把剩余的声明发表评论。评论在声明中可以禁用其他安全相关的逻辑。在这种情况下,编码输入验证相结合将会是一个更有用的保护机制。

此外,XSS (cwe - 79)攻击或SQL注入(cwe - 89)只是几个潜在的后果不使用时输入验证。根据代码的上下文,CRLF注入(cwe - 93),参数注入(cwe - 88),或者命令注入(cwe - 77)也是可能的。

示例4

下面的例子将用户提供的价值分配一个对象数组,然后作用于数组中。

(坏的代码)
例如语言:Java
私人空间buildList (int untrustedListSize) {
如果(0 > untrustedListSize) {
死亡(“负价值提供列表的大小,死邪恶的黑客!”);
}
小部件[]=新的小部件列表(untrustedListSize);
[0]=新的小部件列表();
}

这个例子中试图建立一个从用户指定的值列表,甚至检查以确保提供一个非负价值。然而,如果提供的是一个0值,代码将建立一个数组大小为0,然后尝试一个新的小部件存储在第一个位置,导致抛出一个异常。

示例5

这个Android应用程序注册处理URL时发送一个意图:

(坏的代码)
例如语言:Java


IntentFilter过滤器= new IntentFilter (“com.example.URLHandler.openURL”);
MyReceiver接收机= new MyReceiver ();
registerReceiver(接收机、过滤);


公开课UrlHandlerReceiver BroadcastReceiver{延伸
@Override
公共空间onReceive(上下文语境,意图意图){
如果(com.example.URLHandler.openURL .equals (intent.getAction ())) {
字符串URL = intent.getStringExtra (“URLToOpen”);
int长度= URL.length ();


}
}
}

应用程序总是会假定URL包含在意图。网址不存在时,调用getStringExtra()将返回null,造成一个空指针异常当长度()。

+观察到的例子
参考 描述
链:不当输入验证(CWE-20)导致整数溢出(cwe - 190)在移动操作系统,利用每中钢协KEV在野外。
链:不当输入验证(CWE-20)导致整数溢出(cwe - 190)在移动操作系统,利用每中钢协KEV在野外。
链:反斜杠,后跟一个换行符可以绕过验证步骤(CWE-20),导致eval注入(cwe - 95),利用每中钢协KEV在野外。
链:输入验证不足(CWE-20)在浏览器允许堆腐败(cwe - 787),利用每中钢协KEV在野外。
链:不当输入验证(CWE-20)在用户参数,导致操作系统命令注入(cwe - 78),利用每中钢协KEV在野外。
链:安全产品不当输入验证(CWE-20)导致目录遍历(CWE-22),利用每中钢协KEV在野外。
不当的HTTP请求输入验证IP电话,每中钢协KEV利用在野外。
链:不当输入验证(CWE-20在防火墙产品导致XSS (cwe - 79),利用每中钢协KEV在野外。
链:缓存代理服务器有不当输入验证(CWE-20)的头,允许HTTP响应走私(cwe - 444)使用一个“低频行结束”
Eval注入在Perl程序使用一个ID应该只包含连字符和数字。
SQL注入通过ID应该是数字。
缺乏输入验证电子表格程序导致缓冲区溢出,整数溢出,数组索引错误,和记忆腐败。
验证不足使XSS
司机安全产品允许代码执行由于验证不足
无限循环从DNS数据包标签指向自己
无限循环从DNS数据包标签指向自己
缺少参数会导致崩溃
HTTP请求与失踪的协议版本号会导致崩溃
请求参数会导致信息丢失的风险
系统崩溃与偏移值与数据包大小不一致
大小字段与数据包大小不一致导致缓冲罩上
产品使用denylist识别潜在危险的内容,允许攻击者绕过一个警告
安全旁路通过一个额外的头
空包触发重新启动
不完整的denylist允许SQL注入
空字节主题名称导致目录遍历影响更糟
内核不验证传入指针之前解除它
反病毒产品连接输入验证不足SSDT功能,允许代码执行
反病毒产品允许DoS通过零长度字段
司机从用户空间到内核不验证输入
内核不验证参数从用户发送,允许代码执行
缺乏验证字符串长度字段允许内存消耗或缓冲罩上
缺乏验证长度字段导致无限循环
缺乏验证输入的IOCTL允许代码执行
长度为零的附件导致崩溃
输入长度为零的原因未初始化的指针
通过一个畸形的框架结构崩溃
从长SMTP请求无限循环
畸形数据包的路由器崩溃
包与无效的版本号会导致空指针
崩溃通过多个“。”字符在文件扩展名
+潜在的缓解措施

阶段:体系结构和设计

策略:减少攻击表面

考虑使用language-theoretic安全(LangSec)技术,描述输入使用正式语言和建立“识别器”语言。这实际上需要一个解析不同的层,有效地执行原始输入之间的边界和内部数据表示,而不是允许解析器代码分散在整个程序中,在那里可以受到错误或不一致产生的弱点。(ref - 1109][ref - 1110][ref - 1111]

阶段:体系结构和设计

策略:库或框架

使用一个输入验证框架如Struts或OWASP ESAPI验证API。注意,使用一个框架不会自动处理所有输入验证问题;注意可能出现的弱点从滥用框架本身(cwe - 1173)。

阶段:体系结构和设计;实现

策略:减少攻击表面

理解所有潜在的地区不受信任的输入可以输入软件:参数或参数,饼干,任何从网络读取环境变量,反向DNS查找,查询结果,请求头,URL组件、电子邮件、文件、文件名、数据库,以及任何外部系统提供数据的应用程序。记住,这样的投入可以获得间接通过API调用。

实施阶段:

策略:输入验证

假设所有的输入是恶意的。使用一个“接受良好的“输入验证策略,即。,use a list of acceptable inputs that strictly conform to specifications. Reject any input that does not strictly conform to specifications, or transform it into something that does.

当执行输入验证,考虑所有可能相关的属性,包括长度,类型的输入,可接受的值的全系列,缺失或额外的输入,语法,一致性相关领域,符合业务规则。作为业务规则逻辑的一个例子,在语法上“船”可能是有效的,因为它只包含字母数字字符,但它不是有效的如果输入预计仅包含颜色,如“红”或“蓝色”。

不完全依赖寻找恶意或畸形的输入。这很可能错过至少有一个不受欢迎的输入,特别是如果代码的环境变化。这可以让攻击者有足够的空间绕过验证。然而,denylists可以用于检测潜在攻击或确定哪些输入是畸形的,应该直接驳回。

有效性:高

阶段:体系结构和设计

对于任何一个在客户端执行安全检查,确保这些检查复制在服务器端,为了避免cwe - 602。攻击者可以绕过客户端检查通过修改值后,检查执行,或通过改变客户端完全删除客户端检查。然后,这些修改的值将被提交到服务器。

即使客户端对服务器端安全检查提供最小的好处,他们仍然有用。首先,他们可以支持入侵检测。如果服务器接收输入,应该已经被客户拒绝,那么它可能是一个攻击的迹象。第二,客户端错误检查可以提供有用的反馈给用户预期的有效输入。第三,可能会有意外的服务器端处理时间的减少输入错误,虽然这通常是一个小的储蓄。

实施阶段:

当应用程序结合来自多个数据源的数据,执行验证来源之后的总和。单个数据元素可以通过验证步骤但是违反限制后的总和。

实施阶段:

特别注意验证所有输入调用代码,跨越语言边界时,如从本机代码的解释型语言。这将创建一个意想不到的语言边界之间的交互。确保你没有违反任何期望的语言接口。例如,尽管Java可能不是容易缓冲区溢出,提供一个大型参数调用本地代码可能会触发一个溢出。

实施阶段:

直接输入类型转化为预期的数据类型,比如使用一个转换函数将一个字符串转换为一个数字。预期的数据类型转换后,确保输入的值在许用值的预期范围,包含多个字段的一致性维护。

实施阶段:

输入应该解码和规范化应用程序当前的内部表示之前验证(cwe - 180,cwe - 181)。确保您的应用程序不会无意中解码输入两次相同(cwe - 174)。这些错误可以用来绕过allowlist方案通过引入危险的输入后检查。使用库如OWASP ESAPI规范化控制。

考虑执行重复的规范化,直到输入不会改变。这将避免double-decoding和类似的场景,但它可能无意中修改输入,允许包含正确编码危险的内容。

实施阶段:

当组件之间交换数据,确保组件都使用相同的字符编码。确保适当的编码应用于每个接口。时显式地设置您所使用的编码协议允许你这样做。
+检测方法

自动静态分析

一些不当的实例输入验证可以使用自动检测到静态分析。

静态分析工具可能允许用户指定特定于应用程序的方法或函数执行输入验证;工具可能也有内置的验证框架Struts等知识。该工具可能会压制或de-prioritize任何相关的警告。这允许分析师关注领域的软件输入验证似乎并不存在。

除了前面的段落中描述的情况下,自动静态分析可能无法识别在执行适当的输入验证时,导致假阳性——即。警告,没有任何安全后果或需要任何代码更改。

人工静态分析

当自定义输入验证是必需的,例如当执行业务规则、手册分析是必要的,以确保验证是正确实施。

起毛

起毛技术可用于检测输入验证错误。当意想不到的输入提供给软件,软件不应该崩溃或者变得不稳定,它应该生成application-controlled错误消息。如果发生异常或interpreter-generated错误消息,这表明输入应用程序中没有发现和处理逻辑本身。

自动静态分析——二进制或字节码

根据飙升,以下检测技术可能是有用的:

成本有效的部分报道:
  • 字节码的弱点分析,包括反汇编程序+源代码弱点分析
  • 二进制弱点分析,包括反汇编程序+源代码弱点分析

有效性:飙升部分

人工静态分析——二进制或字节码

根据飙升,以下检测技术可能是有用的:

成本有效的部分报道:
  • 二进制/字节码反汇编程序,然后使用手动分析缺陷和异常

有效性:飙升部分

动态分析与自动化的结果解释

根据飙升,以下检测技术可能是有用的:

高成本效益:
  • Web应用程序扫描
  • Web服务的扫描仪
  • 数据库扫描仪

有效性:高

动态分析与人工解释结果

根据飙升,以下检测技术可能是有用的:

高成本效益:
  • 模糊测试
  • 基于框架Fuzzer
成本有效的部分报道:
  • 扫描仪主机应用程序接口
  • 监控虚拟环境——在沙箱中运行潜在的恶意代码/包装/虚拟机,看看它任何可疑的

有效性:高

人工静态分析源代码

根据飙升,以下检测技术可能是有用的:

高成本效益:
  • 关注人工抽查,手动分析来源
  • 手工源代码审查(不检查)

有效性:高

自动静态分析源代码

根据飙升,以下检测技术可能是有用的:

高成本效益:
  • 源代码缺陷分析仪
  • Context-configured源代码分析器

有效性:高

体系结构或设计审查

根据飙升,以下检测技术可能是有用的:

高成本效益:
  • 检验(IEEE 1028标准)(适用于需求、设计、源代码,等等)。
  • 正式的方法/ Correct-By-Construction
成本有效的部分报道:
  • 攻击建模

有效性:高

+会员资格
部分帮助这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 类型 ID 的名字
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 635年 最初使用的弱点NVD从2008年到2016年
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 722年 OWASP十大2004类别A1 -用户输入
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 738年 CERT C安全编码标准(2008)第五章-整数(INT)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 742年 CERT C安全编码标准(2008)第9章-内存管理(MEM)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 746年 CERT C安全编码标准(2008)第十三章-错误处理(ERR)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 747年 CERT C安全编码标准(2008)第14章-杂项(MSC)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 751年 2009年前25 -安全组件之间的交互
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 872年 CERT c++安全编码部分04 -整数(INT)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 876年 CERT c++安全编码部分08 -内存管理(MEM)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 883年 CERT c++安全编码部分49 -杂项(MSC)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 994年 SFP二级集群:受污染的输入变量
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1003年 弱点简化映射的漏洞发布
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1005年 7 pk -输入验证和代表性
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1163年 SEI CERT 09 C编码标准指导方针。输入输出(FIO)
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1200年 弱点在2019 CWE最危险的软件错误
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1337年 2021 CWE最危险软件的弱点的弱点
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1347年 OWASP十大2021类别A03:2021 -注射
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1350年 2020 CWE最危险软件的弱点的弱点
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1382年 ICS操作(&维护):新兴能源技术
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1387年 2022 CWE最危险软件的弱点的弱点
+笔记

映射

使用映射:气馁(CWE ID不应该用来映射到实际的漏洞)。

理由是:CWE-20通常被滥用在无知的漏洞报告时可以使用低级cw相反,或者更详细的脆弱性是可用的(ref - 1287]。它不是用于趋势分析。它也是一个一级类(即。支柱,一个孩子)。

评论:考虑底层的孩子,如使用不当的验证框架(cwe - 1173)或不当的验证涉及特定类型或属性等的输入指定的数量(cwe - 1284);指定的索引,位置,或抵消(cwe - 1285));语法正确性(cwe - 1286);指定的类型(cwe - 1287);内部一致性输入(cwe - 1288);或不安全的对等(cwe - 1289)。

的关系

cwe - 116CWE-20有着密切的关联,因为根据结构化信息的本质,正确输入验证可以间接地阻止特殊字符改变结构化信息的意义。例如,通过确认数字ID字段应该只包含0 - 9的字符,程序员有效地防止注入攻击。

术语

“输入验证”非常普遍,但它是用在许多不同的方式。在某些情况下使用否则会掩盖真正的潜在弱点或隐藏链接和组合关系。

有些人使用“输入验证”作为一个通用的术语,它包括许多不同的中和技术确保输入是合适的,如过滤、规范化和逃避。其他人使用术语更狭窄的背景下,仅仅指的是“检查输入是否符合预期不改变它。”CWEuses this more narrow interpretation.

维护

截至2020年,通常更喜欢使用这个条目,并经常混淆的来源。正在积极为4.1 CWE改进和后续版本。

维护

等概念验证、数据转换、和中和精制,所以之间的关系CWE-20和其他条目等cwe - 707可能会改变在未来的版本中,连同脆弱性理论的更新文档。

维护

输入验证——无论是缺失或不正确的——是一个重要和普遍安全发展的一部分,它是隐含在许多不同的弱点。传统上,缓冲区溢出等问题和XSS分为输入验证问题,许多安全专家。然而,输入验证未必是唯一的保护机制可以避免这样的问题,在某些情况下甚至是不充分的。CWE团队已经开始捕捉这些微妙之处内链研究概念视图(cwe - 1000),但更多的工作是必要的。
+分类法映射
映射分类名称 节点ID 适合 映射节点名
7有害的王国 输入验证和代表性
OWASP十大2004 A1 CWE更具体 用户输入
CERT C安全编码 ERR07-C 喜欢功能不支持错误检查等效函数
CERT C安全编码 FIO30-C CWE更抽象 排除用户输入的格式字符串
CERT C安全编码 MEM10-C 定义和使用验证函数的指针
WASC 20. 输入处理不当
软件故障模式 SFP25 受污染的输入变量
+引用
卡特里娜REF-6 Tsipenyuk,布莱恩象棋和加里·麦克格劳博士。“七有害的王国:分类软件安全错误”。NIST研讨会软件安全保障技术和度量工具。NIST的。2005-11-07。<https://samate.nist.gov/SSATTM_Content/papers/Seven%20Pernicious%20Kingdoms%20-%20Taxonomy%20of%20Sw%20Security%20Errors%20-%20Tsipenyuk%20-%20Chess%20-%20McGraw.pdf>。
(ref - 166)吉姆Manico。“输入验证ESAPI——非常重要”。2008-08-15。<http://manicode.blogspot.com/2008/08/input-validation-with-esapi.html>。
REF-45 OWASP。“OWASP企业安全API (ESAPI)项目”。<http://www.owasp.org/index.php/ESAPI>。
[ref - 168] Joel Scambray迈克示玛迦勒硅镁层。“黑客暴露的Web应用程序,第二版”。输入验证攻击。麦格劳-希尔。2006-06-05。
[REF-48]耶利米格罗斯曼。“输入验证或输出过滤,哪个更好?”。2007-01-30。<http://jeremiahgrossman.blogspot.com/2007/01/input-validation-or-output-filtering.html>。
(ref - 170)凯文海狸。“输入验证的重要性”。2006-09-06。<sid92_gci1214373, http://searchsoftwarequality.techtarget.com/tip/0, 289483年,00. html>。
[REF-7]大卫迈克尔·霍华德和勒布朗。编写安全代码。第十章,“所有输入都是恶!”Page 341. 2nd Edition. Microsoft Press. 2002-12-04. <https://www.microsoftpressstore.com/store/writing -安全-代码- 9780735617223>。
[ref - 1109]“LANGSEC: Language-theoretic安全”。<http://langsec.org/>。
[ref - 1110]“LangSec:识别、验证和作曲的正确性对真实世界的安全”。<http://langsec.org/bof-handout.pdf>。
(ref - 1111)谢尔盖支流,Lars Hermerschmidt斯文m . Hallberg迈克尔·e·Locasto猎鹰d . Momot梅雷迪思·l·帕特森和安娜Shubina。“治愈脆弱解析器:设计模式安全输入处理”。USENIX;登录:。2017年。<https://www.usenix.org/system/files/login/articles/login_spring17_08_bratus.pdf>。
(ref - 1287)主教法冠。“补充细节- 2022 CWE前25”。的细节问题映射。2022-06-28。<https://cwe.mitre.org/top25/archive/2022/2022_cwe_top25_supplemental.html problematicMappingDetails>。
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19 7有害的王国
+修改
修改日期 修饰符 组织
2008-07-01 Eric Dalci Cigital
更新Potential_Mitigations Time_of_Introduction
2008-08-15 Veracode
建议OWASP 2004年排名前十的映射
2008-09-08 CWE内容团队 主教法冠
更新的关系,Other_Notes Taxonomy_Mappings
2008-11-24 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings
2009-01-12 CWE内容团队 主教法冠
更新Applicable_Platforms、Common_Consequences Demonstrative_Examples、描述Likelihood_of_Exploit,名字,Observed_Examples, Other_Notes, Potential_Mitigations,引用,Relationship_Notes、人际关系
2009-03-10 CWE内容团队 主教法冠
更新描述,Potential_Mitigations
2009-05-27 CWE内容团队 主教法冠
更新Related_Attack_Patterns
2009-07-27 CWE内容团队 主教法冠
更新的关系
2009-10-29 CWE内容团队 主教法冠
更新Common_Consequences、Demonstrative_Examples Maintenance_Notes、Modes_of_Introduction Observed_Examples,关系,Research_Gaps Terminology_Notes
2009-12-28 CWE内容团队 主教法冠
更新Applicable_Platforms、Demonstrative_Examples Detection_Factors
2010-02-16 CWE内容团队 主教法冠
更新Detection_Factors Potential_Mitigations、引用Taxonomy_Mappings
2010-04-05 CWE内容团队 主教法冠
更新Related_Attack_Patterns
2010-06-21 CWE内容团队 主教法冠
更新Potential_Mitigations、Research_Gaps Terminology_Notes
2010-09-27 CWE内容团队 主教法冠
更新Potential_Mitigations、人际关系
2010-12-13 CWE内容团队 主教法冠
更新Demonstrative_Examples、描述
2011-03-29 CWE内容团队 主教法冠
更新Observed_Examples
2011-06-01 CWE内容团队 主教法冠
更新Applicable_Platforms、Common_Consequences Relationship_Notes
2011-09-13 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings
2012-05-11 CWE内容团队 主教法冠
更新Demonstrative_Examples、引用Related_Attack_Patterns、人际关系
2012-10-30 CWE内容团队 主教法冠
更新Potential_Mitigations
2013-02-21 CWE内容团队 主教法冠
更新的关系
2013-07-17 CWE内容团队 主教法冠
更新的关系
2014-02-18 CWE内容团队 主教法冠
更新Demonstrative_Examples Related_Attack_Patterns
2014-07-30 CWE内容团队 主教法冠
更新Detection_Factors、关系、Taxonomy_Mappings
2015-12-07 CWE内容团队 主教法冠
更新的关系
2017-01-19 CWE内容团队 主教法冠
更新Related_Attack_Patterns、人际关系
2017-05-03 CWE内容团队 主教法冠
更新Related_Attack_Patterns、人际关系
2017-11-08 CWE内容团队 主教法冠
更新Modes_of_Introduction、引用关系,Taxonomy_Mappings
2018-03-27 CWE内容团队 主教法冠
更新的引用
2019-01-03 CWE内容团队 主教法冠
更新Related_Attack_Patterns、人际关系
2019-06-20 CWE内容团队 主教法冠
更新Related_Attack_Patterns、人际关系
2019-09-19 CWE内容团队 主教法冠
更新的关系
2020-02-24 CWE内容团队 主教法冠
更新Potential_Mitigations、引用Related_Attack_Patterns、人际关系
2020-06-25 CWE内容团队 主教法冠
更新Applicable_Platforms Demonstrative_Examples,描述、Maintenance_Notes Observed_Examples, Potential_Mitigations,引用,Relationship_Notes,关系,Research_Gaps Terminology_Notes
2020-08-20 CWE内容团队 主教法冠
更新Potential_Mitigations Related_Attack_Patterns,关系
2021-03-15 CWE内容团队 主教法冠
更新描述,Potential_Mitigations
2021-07-20 CWE内容团队 主教法冠
更新Related_Attack_Patterns、人际关系
2021-10-28 CWE内容团队 主教法冠
更新的关系
2022-04-28 CWE内容团队 主教法冠
更新的关系
2022-06-28 CWE内容团队 主教法冠
更新Observed_Examples、人际关系
2022-10-13 CWE内容团队 主教法冠
更新引用关系
+以前的条目名称
改变日期 以前的条目名称
2009-01-12 足够的输入验证
更多的信息是可用的,请选择一个不同的过滤器。
页面最后更新:2023年1月31日