CWE

普遍的弱点

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

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

CWE-667:锁定不当

弱点ID:667
抽象:班级
结构:简单的
查看自定义信息:
+描述
该软件无法正确获取或释放资源上的锁,从而导致意外的资源状态变化和行为。
+扩展描述

锁定是一种同步行为,可确保在访问相同资源时多个独立运行的过程或线程不会相互干扰。所有过程/线程都预计将遵循相同的锁定步骤。如果没有精确地遵循这些步骤 - 或根本没有完成锁定,则另一个进程/线程可以以不可见或无法预测的原始过程来修改共享资源。这可能导致数据或内存损坏,拒绝服务等。

+关系
部分帮助该表显示了与该弱点相关的弱点和高级类别。这些关系定义为childof,parentof,ementof,并深入了解可能存在于较高和较低抽象水平的类似项目。此外,定义了诸如Peerof和Canalsobe之类的关系,以显示用户可能想要探索的类似弱点。
+与观点“研究概念”相关(CWE-1000)
自然 类型 ID 姓名
Childof 班级班级 - 以非常抽象的方式描述的弱点,通常与任何特定的语言或技术无关。比支柱弱点更具体,但比基本弱点更一般。班级弱点通常用以下维度的1或2来描述问题:行为,属性和资源。 662 同步不当
父母 根据基础 - 仍然主要独立于资源或技术的弱点,但有足够的细节来提供特定的检测和预防方法。基本水平的弱点通常用以下维度的2或3来描述问题:行为,财产,技术,语言和资源。 412 无限制的外部锁定锁
父母 根据基础 - 仍然主要独立于资源或技术的弱点,但有足够的细节来提供特定的检测和预防方法。基本水平的弱点通常用以下维度的2或3来描述问题:行为,财产,技术,语言和资源。 413 资源锁定不当
父母 根据基础 - 仍然主要独立于资源或技术的弱点,但有足够的细节来提供特定的检测和预防方法。基本水平的弱点通常用以下维度的2或3来描述问题:行为,财产,技术,语言和资源。 414 缺少锁检查
父母 根据基础 - 仍然主要独立于资源或技术的弱点,但有足够的细节来提供特定的检测和预防方法。基本水平的弱点通常用以下维度的2或3来描述问题:行为,财产,技术,语言和资源。 609 双检查锁定
父母 根据基础 - 仍然主要独立于资源或技术的弱点,但有足够的细节来提供特定的检测和预防方法。基本水平的弱点通常用以下维度的2或3来描述问题:行为,财产,技术,语言和资源。 764 关键资源的多个锁
父母 根据基础 - 仍然主要独立于资源或技术的弱点,但有足够的细节来提供特定的检测和预防方法。基本水平的弱点通常用以下维度的2或3来描述问题:行为,财产,技术,语言和资源。 765 多次解锁关键资源
父母 根据基础 - 仍然主要独立于资源或技术的弱点,但有足够的细节来提供特定的检测和预防方法。基本水平的弱点通常用以下维度的2或3来描述问题:行为,财产,技术,语言和资源。 832 解锁未锁定的资源
父母 根据基础 - 仍然主要独立于资源或技术的弱点,但有足够的细节来提供特定的检测和预防方法。基本水平的弱点通常用以下维度的2或3来描述问题:行为,财产,技术,语言和资源。 833 僵局
父母 根据基础 - 仍然主要独立于资源或技术的弱点,但有足够的细节来提供特定的检测和预防方法。基本水平的弱点通常用以下维度的2或3来描述问题:行为,财产,技术,语言和资源。 1232 电力状态过渡后的锁行为不当
父母 根据基础 - 仍然主要独立于资源或技术的弱点,但有足够的细节来提供特定的检测和预防方法。基本水平的弱点通常用以下维度的2或3来描述问题:行为,财产,技术,语言和资源。 1233 对安全敏感的硬件控件缺少锁定位保护
父母 根据基础 - 仍然主要独立于资源或技术的弱点,但有足够的细节来提供特定的检测和预防方法。基本水平的弱点通常用以下维度的2或3来描述问题:行为,财产,技术,语言和资源。 1234 硬件内部或调试模式允许卸载锁
部分帮助该表显示了与该弱点相关的弱点和高级类别。这些关系定义为childof,parentof,ementof,并深入了解可能存在于较高和较低抽象水平的类似项目。此外,定义了诸如Peerof和Canalsobe之类的关系,以显示用户可能想要探索的类似弱点。
+与“简化已发表漏洞的简化映射”(CWE-1003)相关的视图相关(CWE-1003)
自然 类型 ID 姓名
Childof 班级班级 - 以非常抽象的方式描述的弱点,通常与任何特定的语言或技术无关。比支柱弱点更具体,但比基本弱点更一般。班级弱点通常用以下维度的1或2来描述问题:行为,属性和资源。 662 同步不当
部分帮助该表显示了与该弱点相关的弱点和高级类别。这些关系定义为childof,parentof,ementof,并深入了解可能存在于较高和较低抽象水平的类似项目。此外,定义了诸如Peerof和Canalsobe之类的关系,以显示用户可能想要探索的类似弱点。
+与“ CISQ质量措施(2020)”相关(CWE-1305)
自然 类型 ID 姓名
Childof 班级班级 - 以非常抽象的方式描述的弱点,通常与任何特定的语言或技术无关。比支柱弱点更具体,但比基本弱点更一般。班级弱点通常用以下维度的1或2来描述问题:行为,属性和资源。 662 同步不当
部分帮助该表显示了与该弱点相关的弱点和高级类别。这些关系定义为childof,parentof,ementof,并深入了解可能存在于较高和较低抽象水平的类似项目。此外,定义了诸如Peerof和Canalsobe之类的关系,以显示用户可能想要探索的类似弱点。
+与“ CISQ数据保护措施”(CWE-1340)有关
自然 类型 ID 姓名
Childof 班级班级 - 以非常抽象的方式描述的弱点,通常与任何特定的语言或技术无关。比支柱弱点更具体,但比基本弱点更一般。班级弱点通常用以下维度的1或2来描述问题:行为,属性和资源。 662 同步不当
+介绍模式
部分帮助引言的不同模式提供了有关如何以及何时引入这种弱点的信息。该阶段识别可能发生介绍的生命周期中的一个点,而音符提供了与给定阶段中引言有关的典型情况。
阶段 笔记
建筑和设计
执行
+常见后果
部分帮助该表指定与弱点相关的不同个人后果。该范围确定了违反的应用程序安全区域,而影响描述了如果对手成功利用这一弱点,就会产生负面的技术影响。其可能性提供了有关预期相对于列表中其他后果的特定后果的可能性的信息。例如,可能会利用弱点来实现一定的影响,但很可能会利用它来实现不同的影响。
范围 影响 可能性
可用性

技术影响:DOS:资源消耗(CPU)

不一致的锁定学科会导致僵局。
+示例的例子

示例1

在以下Java片段中,定义方法是在跨多个线程共享的类的实例中获取并设置一个长字段。因为在Java中对双重和长期的操作是非原子的,因此并发访问可能会导致意外行为。因此,应同步长和双字段上的所有操作。

(不良代码)
示例语言:爪哇
私人长somelongvalue;
公共长getlongvalue(){
返回somelongvalue;
}

public void setlongvalue(long l){
somelongvalue = l;
}

示例2

该代码试图获取文件锁,然后写入文件。

(不良代码)
示例语言:php
函数writogolog($ message){
$ logFile = fopen(“ logfile.log”,“ a”);
//尝试获取logfile锁
if(flock($ logFile,lock_ex)){
fwrite($ logFile,$消息);
//解锁logfile
羊群($ logfile,lock_un);
}
别的 {
打印“无法在logfile.log上获取锁,消息未记录\ n”;
}
}
fclose($ logFile);

默认情况下,PHP将无限期等待直到释放文件锁。如果攻击者能够获得文件锁定,则此代码将暂停执行,可能会导致其他用户拒绝服务。请注意,在这种情况下,如果攻击者可以在文件上执行羊群(),则他们可能已经有特权来销毁日志文件。但是,这仍然会影响依赖Flock()的其他程序的执行。

示例3

以下功能试图获取锁定以在共享资源上执行操作。

(不良代码)
示例语言:C
void f(pthread_mutex_t *mutex){
pthread_mutex_lock(Mutex);

/ *访问共享资源 */


pthread_mutex_unlock(mutex);
}

但是,该代码未检查PTHREAD_MUTEX_LOCK()返回的错误是否是否有错误。如果PTHREAD_MUTEX_LOCK()由于任何原因无法获得Mutex,则该功能可以将竞赛条件引入程序中,并导致不确定的行为。

为了避免数据竞赛,正确编写的程序必须检查线程同步函数的结果,并通过尝试从它们恢复或将其报告到更高级别来适当处理所有错误。

(好代码)
示例语言:C
int f(pthread_mutex_t *mutex){
int结果;

结果= pthread_mutex_lock(mutex);
如果(0!=结果)
返回结果;


/ *访问共享资源 */


返回pthread_mutex_unlock(mutex);
}

示例4

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

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

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

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

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

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

+观察到的例子
参考 描述
链:锁定不当(CWE-667)导致比赛状况(CWE-362),如野外Cisa Kev所利用的。
攻击者为内存阅读功能提供无效的地址,导致两次解锁mutex
OS内核中的功能解锁以前未锁定的静音,导致恐慌或覆盖任意内存。
链:OS内核无法正确处理函数调用的故障(CWE-755),导致未锁定的资源解锁(CWE-832),导致崩溃。
OS内核在某些不正确的情况下进行解锁,导致恐慌。
操作系统僵局
OS僵持涉及3个单独功能
图书馆的僵局
僵硬的僵局触发了路由表中的碰撞
在Web服务器和脚本之间读取/写僵局
Web服务器僵持涉及多个听力连接
多个同时调用相同功能触发僵局。
链:其他弱点会导致无效指针解除(CWE-476)或僵局(CWE-833)。
当操作在资源上执行时进行僵局。
通过使用相关设备的文件句柄触发的设备驱动程序中的僵局。
当大量小消息无法迅速处理时,僵局。
OS内核在核心转储过程中由信号触发。
种族状况导致僵局。
链:数组索引错误(CWE-129)导致僵局(CWE-833
当攻击者获得静音时,程序将无法执行。
当攻击者在关键输出文件上获得锁定时,程序将无法执行。
当攻击者在关键输出文件上获得锁定时,程序将无法执行。
可以使用用户独家读取访问打开关键文件,从而阻止安全策略的应用。可能与不当权限,大窗口竞赛条件有关。
链:可预测的文件名,用于锁定,允许攻击者事先创建锁。由许可和随机性产生。
链:具有可预测名称的锁定文件。由随机性产生。
产品不检查是否可以写入日志文件,从而允许攻击者通过使用独家锁定访问文件来避免记录。重叠未检查的错误条件。这还不是CWE-412,但是关闭。
+潜在的缓解

阶段:实施

策略:图书馆或框架

使用行业标准API来实施锁定机制。
+会员资格
部分帮助此成员关系表显示了其他CWE类别和视图,将此弱点称为成员。该信息通常可用于理解弱点适合外部信息源的何处。
自然 类型 ID 姓名
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 748 CERT C安全编码标准(2008)附录-POSIX(POS)
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 852 Java(2011)第9章的CERT ORACLE安全编码标准 - 可见性和原子性(VNA)
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 853 Java的Cert Oracle安全编码标准(2011)第10章 - 锁定(LCK)
成员 看法查看 - CWE条目的子集,提供了一种检查CWE内容的方法。两个主视图结构是切片(平面列表)和图(包含条目之间的关系)。 884 CWE横截面
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 986 SFP辅助群集:缺失锁
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 1131 CISQ质量措施(2016年) - 安全性
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 1142 Java的SEI CERT ORACLE SECURE编码标准 - 指南08.可见性和原子性(VNA)
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 1143 Java的SEI CERT ORACLE SECURE编码标准 - 指南09.锁定(LCK)
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 1169 SEI CERT C编码标准 - 指南14.并发(CON)
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 1171 SEI CERT C编码标准 - 指南50. POSIX(POS)
+笔记

维护

更深入的研究对于同步和相关机制是必需的,包括锁,静音,信号量和其他机制。多个条目取决于这项研究,其中包括与并发状况,种族条件,重进入功能等的关系。CWE-662及其孩子 - 包括CWE-667,,,,CWE-820,,,,CWE-821,以及其他人 - 可能需要对其关系进行重大修改。
+分类映射
映射的分类名称 节点ID 合身 映射的节点名称
证书C安全编码 CON31-C CWE更抽象 锁定时不要销毁静音
证书C安全编码 POS48-C CWE更抽象 不要解锁或销毁另一个posix线程的静音
Java(2011)的CERT ORACLE SECURE编码标准 VNA00-J 访问共享原始变量时可见性
Java(2011)的CERT ORACLE SECURE编码标准 VNA02-J 确保共享变量的复合操作是原子
Java(2011)的CERT ORACLE SECURE编码标准 VNA05-J 在阅读和写入64位值时确保原子能
Java(2011)的CERT ORACLE SECURE编码标准 LCK06-J 请勿使用实例锁来保护共享静态数据
软件故障模式 SFP19 缺少锁
OMG ASCSM ASCSM-CWE-667
+参考
[Ref-962]对象管理组(OMG)。“自动源代码安全度量(ASCSM)”。ASCSM-CWE-667。2016-01。<http://www.omg.org/spec/ascsm/1.0/>。
+内容历史记录
+提交
提交日期 提交者 组织
2008-04-11 CWE内容团队 MITER
+修改
修改日期 修饰符 组织
2008-07-01 Sean Eidemiller 雪茄
添加/更新的示例
2008-07-01 埃里克·达奇(Eric Dalci) 雪茄
更新的势_METIGATIONS,time_of_introduction
2008-09-08 CWE内容团队 MITER
更新的关系
2008-11-24 CWE内容团队 MITER
更新的关系,分类_mappings
2009-03-10 CWE内容团队 MITER
更新相关的_attack_patterns
2009-05-27 CWE内容团队 MITER
更新的关系
2009-07-27 CWE内容团队 MITER
更新的common_cconsquences
2010-09-27 CWE内容团队 MITER
更新的关系
2010-12-13 CWE内容团队 MITER
更新的描述,名称,关系
2011-06-01 CWE内容团队 MITER
更新的common_conconquence,关系,分类_mappings
2012-05-11 CWE内容团队 MITER
更新了示范示例,观察_ examples,关系
2012-10-30 CWE内容团队 MITER
更新的势_MINEIGATIONS
2014-07-30 CWE内容团队 MITER
更新的关系,分类_mappings
2017-05-03 CWE内容团队 MITER
更新相关的_attack_patterns
2017-11-08 CWE内容团队 MITER
更新的分类法_ mappings
2019-01-03 CWE内容团队 MITER
更新的参考,关系,分类_mappings
2019-09-19 CWE内容团队 MITER
更新的关系
2019-09-23 CWE内容团队 MITER
更新的描述,维护_notes,关系
2020-02-24 CWE内容团队 MITER
更新的关系,类型
2020-08-20 CWE内容团队 MITER
更新的关系
2020-12-10 CWE内容团队 MITER
更新的关系
2021-03-15 CWE内容团队 MITER
更新了示范_examples
2022-06-28 CWE内容团队 MITER
更新了观察到的examples
+先前的输入名称
改变日期 先前的输入名称
2010-12-13 锁定不足
提供更多信息 - 请选择其他过滤器。
页面最后更新:2022年10月13日