CWE

常见的弱点枚举

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

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

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日