描述
产品使用一个函数,它接受一个格式字符串作为参数,但格式字符串来自外部源。
扩展描述
当攻击者可以修改一个外部控制格式字符串,这可能导致缓冲区溢出、拒绝服务或数据表示问题。
应该注意的是,在某些情况下,如国际化,格式字符串的集合是外部控制的设计。如果这些格式的源字符串是可信的(如只包含在库文件由系统管理员可以修改),然后外部控制本身可能不构成弱点。
的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为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.
不正确的输入验证
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段
请注意
实现
程序员很少计划格式字符串的外部控制。这个弱点经常介绍了构造日志消息的代码,省略了一个常数格式字符串。
实现
在本地化和国际化等情况下,特定于语言的消息存储库可以剥削的大道,但格式字符串的问题将被合成,因为攻击者控制的存储库也将允许修改消息长度,格式和内容。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围
影响
可能性
保密
格式字符串问题允许信息披露会严重简化程序的开发。
完整性 保密 可用性
格式字符串的问题会导致执行任意代码。
利用的可能性
示范例子
示例1
下面的程序输出一个字符串作为参数提供。
# include < stdio . h >
空白printWrapper (char *字符串){
}
int主要(int命令行参数个数,char * * argv) {
char buf [5012]; memcpy (buf, argv [1], 5012); printWrapper (argv [1]); 返回(0);
}
例子是可利用的,因为printWrapper调用printf()的()函数。注意:堆栈缓冲区添加使开发更简单。
示例2
下面的代码将命令行参数复制到缓冲区使用snprintf ()。
int主要(int命令行参数个数,char * * argv) {
char buf [128]; … snprintf (buf, 128, argv [1]);
}
这段代码,攻击者可以查看堆栈的内容和写堆栈使用命令行参数包含一个格式化的指令序列。攻击者可以通过提供更多的阅读从堆栈格式化指令,如x %,比格式化函数作为参数。(在这个例子中,函数没有参数被格式化)。通过使用% n格式指令,攻击者可以写堆栈,导致snprintf()写的字节数输出到目前为止指定的参数(而不是阅读价值的论点,这是预期的行为)。这种攻击的复杂版本将使用四个交错写入完全控制一个指针在堆栈上的价值。
示例3
某些实现更先进的攻击更容易通过提供格式指令控制的位置在内存中读取或者写入。这些指令的一个例子如以下代码所示,glibc写:
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服务的扫描仪
数据库扫描仪
动态分析与人工解释结果
根据飙升,以下检测技术可能是有用的:
人工静态分析源代码
根据飙升,以下检测技术可能是有用的:
自动静态分析源代码
根据飙升,以下检测技术可能是有用的:
源代码缺陷分析仪
Context-configured源代码分析器
体系结构或设计审查
根据飙升,以下检测技术可能是有用的:
功能区域
影响资源
会员资格
这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-44)大卫·勒布朗和Viega约翰。软件安全的“24宗罪”。“罪6:格式字符串的问题。”Page 109. McGraw-Hill. 2010.
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。第八章,“C格式字符串”,422页。1版。艾迪生卫斯理》2006。
内容的历史
提交
提交日期
提交者
组织
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
不受控制的格式字符串