描述
产品不正确获取或释放资源的锁,导致意想不到的资源状态和行为变化。
扩展描述
锁是一种类型的同步行为,确保多个独立运行的进程或线程不互相干扰,当访问相同的资源。所有进程/线程锁定将遵循相同的步骤。如果不采取这些步骤精确——或者如果没有锁定,然后另一个进程/线程可以修改共享资源的方式是不可见的或可预测的原始流程。这可能会导致内存数据或腐败、拒绝服务等。
的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
自然
类型
ID
的名字
ChildOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
662年
不同步
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
412年
无限制的外部访问的锁
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
413年
不恰当的资源锁定
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
414年
失踪的锁止
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
609年
双重检查锁定
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
764年
一个关键资源的多个锁
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
765年
多个打开的关键资源
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
832年
解锁不锁定的资源
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
833年
死锁
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
1232年
电源状态转换后锁不当行为
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
1233年
丢失的安全敏感的硬件控制锁保护
ParentOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
1234年
硬件锁的内部或调试模式允许覆盖
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然
类型
ID
的名字
ChildOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
662年
不同步
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”方案及质量的措施(2020)”(CWE-1305)
自然
类型
ID
的名字
ChildOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
662年
不同步
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”方案及数据保护措施”(cwe - 1340)
自然
类型
ID
的名字
ChildOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
662年
不同步
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围
影响
可能性
可用性
锁定纪律不一致会导致死锁。
示范例子
示例1
在接下来的Java代码片段中,方法是获取和设置一个长字段定义在一个类的实例,多个线程共享。因为双和长时间的操作原子在Java中,并发访问可能会引起意想不到的行为。因此,所有操作在长和双字段应该是同步的。
私人长someLongValue;
公共长getLongValue () {
返回someLongValue;
}
公共空间setLongValue(长l) {
someLongValue = l;
}
示例2
这段代码文件试图获得一个锁,然后写入。
函数writeToLog(美元消息){
日志文件=美元fopen(“日志文件。日志”、“一个”);
/ /试图获取日志文件锁
如果(群(日志文件,LOCK_EX)) {
写入文件(日志文件,消息美元);
/ /打开日志文件
群(日志文件,LOCK_UN);
}
其他{
在日志文件打印”不能获得锁。没有记录的日志、消息\ n”;
}
}
文件关闭($日志文件);
PHP默认情况下将无限期等待,直到文件释放锁。如果攻击者能够获得文件锁,这段代码将暂停执行,可能导致拒绝服务的其他用户。注意,在这种情况下,如果攻击者可以执行一个群()文件,他们可能已经摧毁日志文件的特权。然而,这还影响其他项目的执行,取决于群()。
示例3
以下函数试图获得一个锁,以执行操作在一个共享资源。
空白f (pthread_mutex_t *互斥){
pthread_mutex_lock(互斥);
/ * * /访问共享资源
pthread_mutex_unlock(互斥);
}
然而,代码不检查pthread_mutex_lock()返回的值的错误。如果pthread_mutex_lock()由于任何原因无法获得互斥锁,功能可能引入竞争条件和导致未定义行为的程序。
为了避免数据竞争,正确的写程序必须检查的结果线程同步功能和妥善处理所有错误,通过试图恢复他们或报告他们更高的水平。
int f (pthread_mutex_t *互斥){
int结果;
结果= pthread_mutex_lock(互斥);
如果(0 ! =结果)
返回结果;
/ * * /访问共享资源
返回pthread_mutex_unlock(互斥);
}
示例4
看起来,以下的代码实现线程安全,同时避免不必要的同步……
如果(辅助= = null) {
同步(){
如果(辅助= = null) {
辅助= new助手();
}
}
}
返回助手;
程序员想要保证只有一个助手()对象被分配,但不希望支付的成本同步每次调用这个代码。
假设助手是没有初始化。然后,线程看到助手= = null和进入同步块,开始执行:
如果另一个线程,线程B,接管的这个调用和助手没有完成运行构造函数,然后在辅助线程B可能打电话而字段持有错误的值。
观察到的例子
参考
描述
攻击者提供了无效的地址能够背诵功能,导致一个互斥锁两次
功能操作系统内核解锁互斥锁,是锁着的,以前没有引起恐慌或任意内存的覆盖。
操作系统内核执行的解锁一些不正确的情况下,导致恐慌。
操作系统死锁
操作系统死锁涉及3个单独的功能
僵局在图书馆
僵局引发的力量碰撞在路由表的信息包
读/写web服务器和脚本之间的僵局
web服务器僵局涉及多个监听连接
多个同步调用同一个函数引发死锁。
僵局时在资源上执行一个操作被删除。
僵局引发的设备驱动程序使用文件句柄的相关设备。
死锁时,大量的小消息不能足够迅速地处理。
操作系统内核僵局引发的信号在核心转储。
竞态条件会导致死锁。
程序不能执行时,攻击者获得互斥锁。
程序不能执行攻击者获得一个锁在一个关键的输出文件。
程序不能执行攻击者获得一个锁在一个关键的输出文件。
重要文件可以打开的读访问用户,防止应用程序的安全策略。可能不当相关权限,大窗户竞态条件。
链:可预测的文件名用于锁定,允许攻击者事先创建锁。结果从权限和随机性。
链:锁文件和可预测的名称。从随机合成。
产品不检查是否可以写入一个日志文件,允许攻击者为了避免日志通过访问文件使用独占锁。不重叠错误条件。这不是很
cwe - 412 ,但很接近。
潜在的缓解措施
检测方法
自动静态分析
自动静态分析,通常被称为静态应用程序安全性测试(科协),可以找到一些实例的这个弱点分析源代码或二进制/编译后的代码,而不必执行它。通常情况下,这是通过建立一个模型的数据流和控制流,然后寻找潜在攻击模式,连接“源”与“下沉”(输入)的起源(目的地数据与外部组件交互,较低的层,如操作系统,等等)。
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然
类型
ID
的名字
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
748年
CERT C安全编码标准(2008)附录- POSIX (POS)
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
852年
CERT甲骨文安全Java编码标准(2011)第9章-可见性和原子性(VNA)
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
853年
CERT甲骨文安全Java编码标准(2011)第十章-锁定(LCK)
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
884年
CWE横截面
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
986年
SFP二级集群:失踪的锁
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1131年
方案》(2016)——安全质量措施
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1142年
SEI CERT甲骨文Java安全编码标准——08年指导方针。可见性和原子性(VNA)
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1143年
SEI CERT甲骨文Java安全编码标准——09年的指导方针。锁(LCK)
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1169年
SEI CERT 14 C编码标准指导方针。并发性(CON)
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1171年
SEI CERT 50 C编码标准指导方针。POSIX (POS)
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1401年
综合分类:并发性
脆弱性映射笔记
用法:Allowed-with-Review
(CWE ID可以用来映射到实际的漏洞在有限的情况下需要仔细审查)
原因: 抽象
理由是:
这个CWE条目是一个类并会基本的孩子可能更合适
评论:
检查这个条目的孩子是否有一个更好的选择
笔记
分类法映射
映射分类名称
节点ID
适合
映射节点名
CERT C安全编码
CON31-C
CWE更抽象
不销毁互斥锁时
CERT C安全编码
POS48-C
CWE更抽象
不要打开或破坏另一个POSIX线程的互斥
CERT甲骨文安全Java编码标准(2011)
VNA00-J
确保访问共享原始变量时能见度
CERT甲骨文安全Java编码标准(2011)
VNA02-J
确保共享变量的操作都是原子的化合物
CERT甲骨文安全Java编码标准(2011)
VNA05-J
保证原子性阅读和写作时64位值
CERT甲骨文安全Java编码标准(2011)
LCK06-J
不使用锁来保护实例共享静态数据
软件故障模式
SFP19
失踪的锁
OMG ASCSM
ASCSM -cwe - 667
引用
更多的信息是可用的,请编辑自定义过滤器或选择一个不同的过滤器。