CWE

普遍的弱点

社区开发的软件和硬件弱点类型清单

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

CWE-777:无锚的正则表达式

弱点ID:777
抽象:变体
结构:简单的
查看自定义信息:
+描述
该产品使用正则表达式执行中和,但是正则表达式未锚定,可能会允许恶意或畸形的数据通过。
+扩展描述
在执行诸如验证一组允许输入(允许列表)之类的任务时,会检查并可能修改数据,以确保其构型并遵守安全值列表。如果未锚定正则表达式,则可能在与正则表达式匹配的任何字符串之前或之后包括恶意或畸形的数据。允许的恶意数据的类型将取决于应用程序的上下文以及正则表达式中省略了哪些锚。
+关系
部分帮助该表显示了与该弱点相关的弱点和高级类别。这些关系定义为childof,parentof,ementof,并深入了解可能存在于较高和较低抽象水平的类似项目。此外,定义了诸如Peerof和Canalsobe之类的关系,以显示用户可能想要探索的类似弱点。
+与观点“研究概念”相关(CWE-1000)
自然 类型 ID 姓名
Childof 根据基础 - 仍然主要独立于资源或技术的弱点,但有足够的细节来提供特定的检测和预防方法。基本水平的弱点通常用以下维度的2或3来描述问题:行为,财产,技术,语言和资源。 625 允许的正则表达
+背景详细信息
正则表达式通常用于匹配文本模式。锚在正则表达式中使用锚来指定模式应匹配的位置:在开始,末端或两者(整体输入)。
+介绍模式
部分帮助引言的不同模式提供了有关如何以及何时引入这种弱点的信息。该阶段识别可能发生介绍的生命周期中的一个点,而音符提供了与给定阶段中引言有关的典型情况。
阶段 笔记
执行
+常见后果
部分帮助该表指定与弱点相关的不同个人后果。该范围确定了违反的应用程序安全区域,而影响描述了如果对手成功利用这一弱点,就会产生负面的技术影响。其可能性提供了有关预期相对于列表中其他后果的特定后果的可能性的信息。例如,可能会利用弱点来实现一定的影响,但很可能会利用它来实现不同的影响。
范围 影响 可能性
可用性
保密
访问控制

技术影响:旁路保护机制

在允许列表的上下文中,未经常规的正则表达式可能会导致保护机制故障,从而使恶意或畸形的数据进入程序的可信区域。具体后果将取决于允许列表保护的功能。
+利用的可能性
中等的
+示例的例子

示例1

考虑支持多种语言的Web应用程序。它通过使用lang参数选择适当语言的消息。

(不良代码)
示例语言:php
$ dir =“/home/cwe/语言”;
$ lang = $ _get ['lang'];
if(preg_match(“/[a-za-z0-9]+/”,$ lang)){
包括(“ $ dir/$ lang”);
}
别的 {
回声“你不会通过!\ n”;
}

以前的代码试图仅匹配字母数值,以便诸如“英语”和“法语”之类的语言值有效,同时也可以防止路径遍历,CWE-22。但是,省略了正则表达锚,因此任何包含至少一个字母数字字符的文本现在都将通过验证步骤。例如,下面的攻击字符串将匹配正则表达式。

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

如果攻击者可以将代码序列注入文件,例如Web服务器的HTTP请求日志,则攻击者可能能够将lang参数重定向到日志文件并执行任意代码。

示例2

该代码在调用“ ping”命令中使用它之前使用正则表达式来验证IP字符串。

(不良代码)
示例语言:Python
导入子过程
导入

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命令将零prepended的IP地址视为八十
结果= subproces.call([[“ ping”,已验证]))
打印(结果)

由于正则表达式没有锚点(CWE-777),即没有 ^或$字符的无界无限,然后将0或0x预先到IP地址的开头仍将导致匹配的REGEX模式。由于PING命令支持八进制和十六进制的IP地址,因此它将使用意外有效的IP地址(CWE-1389)。例如,“ 0x63.63.63.63”将被认为等同于“ 99.63.63.63”。结果,攻击者可能会可能会直接达到攻击者无法直接到达的PING系统。

+观察到的例子
参考 描述
链:Python RPC框架的Web UI不使用Regex锚来验证用户登录电子邮件(CWE-777),可能允许绕过Oauth(CWE-1390)。
+潜在的缓解

阶段:实施

请确保了解将匹配的内容以及正则表达式将不匹配的内容。锚定表达式的末端将允许程序员将允许列表严格限制在正则表达式中的文本中匹配的允许列表。如果您使用的是默认情况下仅匹配一行的软件包,请确保在必要时可以匹配多行输入。
+内容历史记录
+提交
提交日期 提交者 组织
2009-06-30 CWE内容团队 MITER
+修改
修改日期 修饰符 组织
2010-06-21 CWE内容团队 MITER
更新的描述
2011-06-01 CWE内容团队 MITER
更新的common_cconsquences
2017-11-08 CWE内容团队 MITER
更新了libelihone_of_exploit
2020-02-24 CWE内容团队 MITER
更新的关系
2020-06-25 CWE内容团队 MITER
更新的common_cconsquences,Description,entife_mitigations
2022-10-13 CWE内容团队 MITER
更新了示范示例,obsoved_examples
2023-01-31 CWE内容团队 MITER
更新的描述
提供更多信息 - 请选择其他过滤器。
页面最后更新:2023年1月31日