CWE

常见的弱点枚举

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

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

cwe - 807:依赖不可信的输入在一个安全的决定

弱点ID: 807
抽象:基地
结构:简单的
视图定制的信息:
+描述
产品使用一个保护机制,依赖于存在或输入的值,但一个不可信的输入可以修改演员的方式绕过了保护机制。
+扩展描述

开发人员可能假设输入如饼干、环境变量,隐藏表单字段不能被修改。然而,攻击者可能会改变这些输入使用定制的客户或其他攻击。这种变化可能不会被发现。当身份验证和授权等安全决策基于这些输入的值,攻击者可以绕过安全的软件。

没有足够的加密、完整性检查或其他机制,任何输入,源于一个局外人是不可信的。

+的关系
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”研究概念”(cwe - 1000)
自然 类型 ID 的名字
ChildOf 支柱支柱——一个弱点是最抽象类型的弱点和代表一个主题类/基地/变体相关弱点。支柱是不同于一个类别作为支柱技术上仍然是一种弱点,描述了一个错误,而一个类别代表一个共同特征用于组相关的东西。 693年 保护机制失败
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 302年 认证绕过Assumed-Immutable数据
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 350年 依赖反向DNS解析强调安全的行动
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 784年 依赖饼干没有验证和完整性检查在一个安全的决定
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关视图”架构概念”(cwe - 1008)
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1012年 交叉剪接
+模式的介绍
部分帮助不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 请注意
架构和设计 委员会:这个弱点是指一个不正确的设计与架构相关的安全策略。
实现
+适用的平台
部分帮助该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。

语言

类:不是特定于语言的患病率(待定)

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

技术的影响:旁路保护机制;获得特权或假设的身份;不同的上下文

攻击者可以绕过安全访问任何被保护的决定。结果将取决于相关的功能,但他们可以从给予额外的特权不受信任的用户绕过重要的安全检查。最终,这个弱点可能导致暴露敏感数据或修改,系统崩溃,或者执行任意代码。
+利用的可能性
+示范例子

示例1

下面的代码摘录读取从浏览器cookie值来确定用户的角色。

(坏的代码)
例如语言:Java
饼干饼干[]= request.getCookies ();
for (int i = 0;我< cookies.length;我+ +){
饼干c =饼干(我);
如果(c.getName () .equals(“角色”)){
userRole = c.getValue ();
}
}

示例2

下面的代码可以为医疗记录应用程序。它执行身份验证检查如果已经设置cookie。

(坏的代码)
例如语言:PHP
auth = _COOKIES美元(“身份验证”);
如果(!auth美元){
如果(AuthenticateUser ($ _POST['用户”),$ _POST['密码'])= =“成功”){
/ /保存cookie将来发送响应
setcookie(“身份验证”、“1”、时间()+ 60 * 60 * 2);
}
其他{
ShowLoginScreen ();
死亡(“\ n”);
}
}
DisplayMedicalHistory ($ _POST [' patient_ID ']);

程序员希望AuthenticateUser()总是会检查,和“验证”饼干时只会被设置身份验证成功。程序员甚至努力指定两个小时过期的饼干。

然而,攻击者可以设置“身份验证”饼干等非零值1。因此,身份验证变量是1美元,AuthenticateUser()检查甚至没有执行。攻击者绕过身份验证。

示例3

在接下来的例子中,一个身份验证标记从一个浏览器读取cookie,从而允许外部用户状态数据的控制。

(坏的代码)
例如语言:Java
饼干饼干[]= request.getCookies ();
for (int i = 0;我< cookies.length;我+ +){
饼干c =饼干(我);
如果(c.getName () .equals(“验证”)& & Boolean.TRUE.equals (c.getValue ())) {
验证= true;
}
}

示例4

下面的代码示例使用DNS查找,以决定是否入站请求来自受信任的主机。如果攻击者可以毒DNS缓存中,他们可以获得信任的状态。

(坏的代码)
例如语言:C
struct hostent *惠普;struct in_addr myaddr;
char * tHost = " trustme.example.com ";
myaddr.s_addr = inet_addr (ip_addr_string);

惠普= gethostbyaddr ((char *) &myaddr sizeof (struct in_addr) AF_INET);
如果惠普& & ! strncmp (hp - > h_name, tHost, sizeof (tHost))) {
信任= true;
其他}{
信任= false;
}
(坏的代码)
例如语言:Java
字符串ip = request.getRemoteAddr ();
InetAddress addr = InetAddress.getByName (ip);
如果(addr.getCanonicalHostName () .endsWith (“trustme.com”)) {
信任= true;
}
(坏的代码)
例如语言:c#
IPAddress hostIPAddress = IPAddress.Parse (RemoteIpAddress);
IPHostEntry hostInfo = Dns.GetHostByAddress (hostIPAddress);
如果(hostInfo.HostName.EndsWith (“trustme.com”)) {
信任= true;
}

IP地址比DNS名称更可靠,但他们也可以欺骗。攻击者可以很容易地建立发送的数据包的源IP地址,但响应数据包将返回到伪造IP地址。看到响应数据包,攻击者嗅受害者机器之间的交通和伪造IP地址。为了实现所需的嗅探,攻击者通常试图定位自己在同一子网的受害者的机器。攻击者可以绕过这个需求通过使用源路由,但源路由今天互联网的大部分地区是禁用的。总之,IP地址验证可以是一个有用的身份验证方案的一部分,但不应该把它所需的单因素身份验证。

+观察到的例子
参考 描述
攻击者可以绕过身份验证通过设置cookie到一个特定的值。
攻击者可以绕过身份验证并获得管理员权限,通过设定一个“admin”饼干1。
内容管理系统允许管理员权限设置一个“登录”饼干“OK”。
发现应用程序允许管理员权限设置管理饼干1。
基于web的电子邮件列表管理器允许攻击者获得管理员权限设置一个登录cookie来“管理”。
+潜在的缓解措施

阶段:体系结构和设计

策略:减少攻击表面

在服务器端存储状态信息和敏感数据。

确保系统明确地和明确地跟踪自己的状态和用户状态和为合法的状态转换规则定义。不允许任何应用程序用户以任何方式直接影响国家除了通过合法的行动导致状态转换。

如果信息必须存储在客户端,不没有加密和完整性检查,或者在服务器端有一个机制篡改。使用一个消息身份验证代码(MAC)算法,如散列消息验证码(HMAC) (ref - 529]。应用此反国家或者你必须暴露敏感数据,可以保证数据的完整性,即。数据没有被修改。确保使用强大的哈希函数(cwe - 328)。

阶段:体系结构和设计

策略:库或框架

使用审查库或框架不允许这个弱点发生或提供了结构,使这个弱点更容易避免的。

无状态的协议(例如,HTTP,使用一个框架,为你保持状态。

例子包括ASP。网络视图状态(ref - 756)和OWASP ESAPI会话管理功能(REF-45]。

小心提供政府支持的语言特性,因为这些可能是为了方便程序员提供,不得考虑安全。

阶段:体系结构和设计

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

阶段:操作;实现

策略:环境硬化

使用PHP时,配置应用程序,以便它不使用register_globals。在实现,开发应用程序,以便它不依赖于这个特性,但是小心实现register_globals的模拟等弱点cwe - 95,cwe - 621和类似的问题。

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

策略:减少攻击表面

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

识别所有输入用于安全决策和确定您可以修改设计,这样你不需要依靠提交输入。例如,您可以保留关键信息在服务器端用户的会话,而不是在外部数据记录。

+检测方法

人工静态分析

因为这个弱点通常并不经常出现在一个软件包,手动白盒技术可以提供足够的代码覆盖率和减少假阳性如果所有可能受到操作可以在有限的时间内评估约束。

有效性:高

注意:手工分析的有效性和速度将减少,如果没有一个集中的安全机制,和安全逻辑是广泛分布在整个软件。

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

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

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

有效性:飙升部分

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

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

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

有效性:飙升部分

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

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

成本有效的部分报道:
  • Web应用程序扫描
  • Web服务的扫描仪
  • 数据库扫描仪

有效性:飙升部分

动态分析与人工解释结果

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

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

有效性:飙升部分

人工静态分析源代码

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

高成本效益:
  • 手工源代码审查(不检查)

有效性:高

自动静态分析源代码

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

成本有效的部分报道:
  • 源代码缺陷分析仪
  • Context-configured源代码分析器

有效性:飙升部分

体系结构或设计审查

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

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

有效性:高

+会员资格
部分帮助这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 803年 2010年前25 -多孔防御
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 859年 CERT甲骨文安全Java编码标准(2011)第十六章-平台安全(SEC)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 866年 2011年前25 -多孔防御
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 878年 CERT c++安全编码部分10 -环境(ENV)
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 884年 CWE横截面
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1348年 OWASP 2021年十大类别A04:2021——不安全设计
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1373年 集成电路工程(建筑/部署):信任模型的问题
+分类法映射
映射分类名称 节点ID 适合 映射节点名
CERT甲骨文安全Java编码标准(2011) SEC09-J 不要安检都建立在不可信的来源吗
+引用
(ref - 754)弗兰克·金。“前25系列——排名6 -依赖不可信的输入在一个安全的决定”。无软件安全研究所。2010-03-05。<http://blogs.sans.org/appsecstreetfighter/2010/03/05/top-25-series-rank-6-reliance-on-untrusted-inputs-in-a-security-decision/>。
[ref - 529]“HMAC”。维基百科。2011-08-18。<http://en.wikipedia.org/wiki/Hmac>。
(ref - 756)斯科特·米切尔。“了解ASP。网络视图状态”。微软。2004-05-15。<http://msdn.microsoft.com/en-us/library/ms972976.aspx>。
REF-45 OWASP。“OWASP企业安全API (ESAPI)项目”。<http://www.owasp.org/index.php/ESAPI>。
+内容的历史
+提交
提交日期 提交者 组织
2010-01-18 CWE内容团队 主教法冠
+修改
修改日期 修饰符 组织
2010-06-21 CWE内容团队 主教法冠
更新Common_Consequences Potential_Mitigations,引用
2010-09-27 CWE内容团队 主教法冠
更新Potential_Mitigations
2011-06-01 CWE内容团队 主教法冠
更新Common_Consequences
2011-06-27 CWE内容团队 主教法冠
更新Common_Consequences、人际关系
2011-09-13 CWE内容团队 主教法冠
更新Potential_Mitigations、引用关系,Taxonomy_Mappings
2012-05-11 CWE内容团队 主教法冠
更新Demonstrative_Examples、引用关系
2012-10-30 CWE内容团队 主教法冠
更新Potential_Mitigations
2013-07-17 CWE内容团队 主教法冠
更新的关系
2014-02-18 CWE内容团队 主教法冠
更新Potential_Mitigations
2014-07-30 CWE内容团队 主教法冠
更新Detection_Factors
2017-01-19 CWE内容团队 主教法冠
更新Related_Attack_Patterns
2017-11-08 CWE内容团队 主教法冠
更新Likelihood_of_Exploit Modes_of_Introduction、引用关系,Taxonomy_Mappings
2019-01-03 CWE内容团队 主教法冠
更新Taxonomy_Mappings
2020-02-24 CWE内容团队 主教法冠
更新的关系
2021-10-28 CWE内容团队 主教法冠
更新的关系
2022-04-28 CWE内容团队 主教法冠
更新的关系
2023-01-31 CWE内容团队 主教法冠
更新描述
更多的信息是可用的,请选择一个不同的过滤器。
页面最后更新:2023年1月31日