CWE

普遍的弱点

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

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

CWE-609:双检查锁定

弱点ID:609
抽象:根据
结构:简单的
查看自定义信息:
+描述
该程序使用双重检查的锁定来访问资源,而无需明确同步的开销,但锁定不足。
+扩展描述
双检查锁定是指程序员检查是否已初始化资源,抓住锁,再次检查资源以查看资源是否已初始化,然后执行初始化(如果尚未发生)执行的情况。不应这样做,因为不能保证在所有语言和所有架构上都可以使用。总而言之,其他线程可能不会在同步块内部运行,也不能保证看到操作以与同步块内显示的顺序相同的顺序执行。
+关系
部分帮助该表显示了与该弱点相关的弱点和高级类别。这些关系定义为childof,parentof,ementof,并深入了解可能存在于较高和较低抽象水平的类似项目。此外,定义了诸如Peerof和Canalsobe之类的关系,以显示用户可能想要探索的类似弱点。
+与观点“研究概念”相关(CWE-1000)
自然 类型 ID 姓名
Childof 班级班级 - 以非常抽象的方式描述的弱点,通常与任何特定的语言或技术无关。比支柱弱点更具体,但比基本弱点更一般。班级弱点通常用以下维度的1或2来描述问题:行为,属性和资源。 667 锁定不当
canpreceede 根据基础 - 仍然主要独立于资源或技术的弱点,但有足够的细节来提供特定的检测和预防方法。基本水平的弱点通常用以下维度的2或3来描述问题:行为,财产,技术,语言和资源。 367 检查时间使用时间(TOCTOU)种族条件
部分帮助该表显示了与该弱点相关的弱点和高级类别。这些关系定义为childof,parentof,ementof,并深入了解可能存在于较高和较低抽象水平的类似项目。此外,定义了诸如Peerof和Canalsobe之类的关系,以显示用户可能想要探索的类似弱点。
+与“软件开发”视图相关(CWE-699)
自然 类型 ID 姓名
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 411 资源锁定问题
+介绍模式
部分帮助引言的不同模式提供了有关如何以及何时引入这种弱点的信息。该阶段识别可能发生介绍的生命周期中的一个点,而音符提供了与给定阶段中引言有关的典型情况。
阶段 笔记
执行
+适用的平台
部分帮助该清单显示了可能出现的弱点的可能区域。这些可能适用于特定的命名语言,操作系统,体系结构,范式,技术或一类此类平台。该平台与给定弱点出现在该实例的频率一起列出。

语言

爪哇(不确定的患病率)

+常见后果
部分帮助该表指定与弱点相关的不同个人后果。该范围确定了违反的应用程序安全区域,而影响描述了如果对手成功利用这一弱点,就会产生负面的技术影响。其可能性提供了有关预期相对于列表中其他后果的特定后果的可能性的信息。例如,可能会利用弱点来实现一定的影响,但很可能会利用它来实现不同的影响。
范围 影响 可能性
正直
其他

技术影响:修改应用程序数据;更改执行逻辑

+示例的例子

示例1

似乎以下代码可以实现线程安全性,同时避免了不必要的同步...

(不良代码)
示例语言:爪哇
如果(helper == null){
同步(this){
如果(helper == null){
助手= new Helper();
}
}
}
返回助手;

程序员希望保证只分配一个助手()对象,但每次调用该代码时都不想支付同步费用。

假设没有初始化的助手。然后,线程A看到助手== null并进入同步块并开始执行:

(不良代码)
助手= new Helper();

如果第二个线程B螺纹B在此呼叫的中间接管,并且辅助人员尚未完成运行构造函数,则线程B可能会在助手上进行呼叫,而其字段则保持不正确的值。

+潜在的缓解

阶段:实施

虽然可以在某些语言中实现双重检查的锁定,但它在1.5之前固有地存在缺陷,并且在不损害平台独立性的情况下无法实现。在Java 1.5之前,已知仅使用同步关键字。从Java 1.5开始,使用“挥发性”关键字允许双重检查的锁定成功工作,尽管关于它是否获得足够的性能提高存在一些争论。请参阅参考。
+会员资格
部分帮助此成员关系表显示了其他CWE类别和视图,将此弱点称为成员。该信息通常可用于理解弱点适合外部信息源的何处。
自然 类型 ID 姓名
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 853 Java的Cert Oracle安全编码标准(2011)第10章 - 锁定(LCK)
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 986 SFP辅助群集:缺失锁
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 1143 Java的SEI CERT ORACLE SECURE编码标准 - 指南09.锁定(LCK)
+分类映射
映射的分类名称 节点ID 合身 映射的节点名称
Java(2011)的CERT ORACLE SECURE编码标准 LCK10-J 请勿使用不正确的双检查锁定成语的形式
软件故障模式 SFP19 缺少锁
+参考
[Ref-490] David Bacon等。““双重检查的锁定”违反了“声明”。<http://www.cs.umd.edu/~pugh/java/memorymodel/doublecheckedlocking.html>。
[Ref-491] Jeremy Manson和Brian Goetz。“ JSR 133(Java内存模型)常见问题解答”。<http://www.cs.umd.edu/~pugh/java/memorymodel/jsr-133-faq.html#dcl>。
[Ref-62] Mark Dowd,John McDonald和Justin Schuh。“软件安全评估的艺术”。第13章,“线程漏洞”,第815页。第一版。艾迪生·卫斯理。2006。
+内容历史记录
+提交
提交日期 提交者 组织
2007-05-07 匿名工具供应商(在NDA下)
+修改
修改日期 修饰符 组织
2008-07-01 埃里克·达奇(Eric Dalci) 雪茄
更新的Context_Notes
2008-09-08 CWE内容团队 MITER
更新的描述,关系,分类_mappings
2008-11-24 CWE内容团队 MITER
更新了示范_examples
2009-01-12 CWE内容团队 MITER
更新的关系
2009-05-27 CWE内容团队 MITER
更新的关系
2009-10-29 CWE内容团队 MITER
更新的分类法_ mappings
2010-12-13 CWE内容团队 MITER
更新的关系
2011-06-01 CWE内容团队 MITER
更新的common_conconquence,关系,分类_mappings
2012-05-11 CWE内容团队 MITER
更新了示范示例,参考,关系
2012-10-30 CWE内容团队 MITER
更新的势_MINEIGATIONS
2014-07-30 CWE内容团队 MITER
更新的关系,分类_mappings
2019-01-03 CWE内容团队 MITER
更新的关系,分类_mappings
2020-02-24 CWE内容团队 MITER
更新的关系
+先前的输入名称
改变日期 先前的输入名称
2008-04-11 双检查锁定
提供更多信息 - 请选择其他过滤器。
页面最后更新:2022年10月13日