 描述
产品反序列化不可信数据不充分验证结果数据将是有效的。
 扩展描述
序列化对象往往是方便沟通或保存以备后用。然而,反序列化数据或代码往往可修改,无需使用提供的访问器功能如果它不使用加密来保护自己。此外,任何加密仍将客户端安全——这是一个危险的安全假设。
不可信的数据不能被信任是格式良好的。
当开发人员的地方没有限制工具链,或一系列的实例和方法调用可以self-execute反序列化过程中(即。对象返回给调用者之前),攻击者利用他们有时可能执行未经授权的操作,生成一个壳。
 替代条款
打包,包: |
打包和序列化和反序列化,实际上是同义词。 |
酸洗,unpickle: |
在Python中,“泡菜”功能是用于执行序列化和反序列化。 |
PHP对象注入: |
一些PHP应用程序研究人员使用这个术语时攻击unserialize()函数的不安全使用;但它也可以用于 cwe - 915。 |
 的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
 相关观点“软件开发”(cwe - 699)
自然 |
类型 |
ID |
的名字 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
399年 |
资源管理错误 |
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
 简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然 |
类型 |
ID |
的名字 |
ChildOf |
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 |
913年 |
不当的控制代码动态地管理资源 |
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
 相关视图”架构概念”(cwe - 1008)
自然 |
类型 |
ID |
的名字 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1019年 |
验证输入 |
 背景细节
序列化和反序列化的过程指特性采取program-internal上肢数据,包装的方式,允许外部存储或传输的数据(“序列化”),然后提取序列化数据重建原来的对象(“反序列化”)。
 模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 |
请注意 |
架构和设计 |
遗漏:这个弱点是由于缺少一个安全策略在体系结构和设计阶段。 |
实现 |
|
 常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围 |
影响 |
可能性 |
完整性
|
攻击者可以修改意想不到的对象或数据被认为是安全的修改。 |
|
可用性
|
如果一个函数在一个假设在终止时,基于一个哨兵在一个字符串,它可能永远不会终止。 |
|
其他
|
后果可能差别很大,因为它依赖于被反序列化对象或方法,以及如何使用它们。做一个假设反序列化对象中的代码是有效的是危险的,可以使剥削。 |
|
 利用的可能性
 示范例子
示例1
这个代码片段反序列化一个对象从一个文件中,并使用它作为一个UI按钮:
尝试{
文件文件=新文件(“object.obj”); ObjectInputStream =新ObjectInputStream(新FileInputStream(文件); javax.swing。JButton按钮= (javax.swing.JButton) in.readObject (); in.close (); }
这段代码不会尝试验证文件的源或内容之前反序列化。攻击者可以将目标文件替换为一个文件,其中包含任意恶意代码时将执行按钮被按下。
减轻,明确定义最终readObject()来防止反序列化。这方面的一个例子:
私人最终无效readObject (ObjectInputStream)抛出io。IOException { 把新的io。IOException(“不能反序列化”);}
示例2
在Python中,泡菜库处理序列化和反序列化过程。在这个例子中来自[ref - 467),代码接收并解析数据,然后试图验证一个用户基于验证令牌。
尝试{
类ExampleProtocol (protocol.Protocol): def dataReceived(自我、数据):
#代码会在这里将解析传入的数据 #接收头后,调用confirmAuth()进行身份验证
def confirmAuth(自我,标题): 试一试: 令牌= cPickle.loads (base64.b64decode(头[' AuthToken '])) 如果不是check_hmac(令牌“签名”,令牌(的数据),getSecretKey ()): 提高AuthFail 自我。secure_data =令牌(的数据) 除了: 提高AuthFail
}
不幸的是,代码不验证传入的数据是合法的。攻击者可以构造一个非法的、序列化对象“AuthToken”实例化一个Python的子流程执行任意命令。例如,攻击者可以构造一个泡菜,利用Python的子过程模块,生成新的流程和包括一个数量的参数为各种用途。自泡菜允许对象定义的过程如何应该未酸洗的,攻击者可以直接unpickle过程调用Popen /bin/sh.子过程模块和执行
 观察到的例子
参考 |
描述 |
|
|
|
反序列化问题常用的Java库允许远程执行。 |
|
反序列化问题常用的Java库允许远程执行。 |
|
使用PHP unserialize函数不受信任的输入允许攻击者修改应用程序配置。 |
|
使用PHP unserialize函数不受信任的输入的内容管理系统可能允许代码执行。 |
|
使用PHP unserialize函数不受信任的输入内容管理系统允许代码执行使用一个精心制作的饼干的价值。 |
|
用PHP编写的内容管理系统允许非系列化的任意对象,可能允许代码执行。 |
|
Python脚本允许本地用户通过腌数据执行代码。 |
|
不安全的反序列化使用Python脚本的泡菜。 |
|
Web浏览器允许执行本地方法通过精心字符串反序列化的字符串的JavaScript函数。 |
 潜在的缓解措施
阶段:体系结构和设计;实现
如果可用,使用编程语言的签字/密封特性以确保反序列化数据没有被污染。例如,一个基于散列的消息验证码(HMAC)可以用来确保数据没有被修改。 |
实施阶段:
当反序列化数据,填充一个新对象而不是反序列化。结果是,数据流经安全输入验证和功能是安全的。 |
实施阶段:
显式地定义最后一个对象()来防止反序列化。 |
阶段:体系结构和设计;实现
使保护他们免受反序列化字段瞬态。
尝试序列化并反序列化类包含瞬态字段将导致瞬态数据应该取消。这是一个很好的方法来防止时间,把环境相关,或敏感变量和使用不当。
|
实施阶段:
避免不必要的类型或设备可以被恶意利用的目的。这限制了潜在的意外或未经授权的类型和小玩意被攻击者利用。只添加接受allowlist类。注意:新产品不断被发现,这本身并不是一个充分的缓解。 |
 检测方法
自动静态分析
自动静态分析,通常被称为静态应用程序安全性测试(科协),可以找到一些实例的这个弱点分析源代码或二进制/编译后的代码,而不必执行它。通常情况下,这是通过建立一个模型的数据流和控制流,然后寻找潜在攻击模式,连接“源”与“下沉”(输入)的起源(目的地数据与外部组件交互,较低的层,如操作系统,等等)。
|
 会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 |
类型 |
ID |
的名字 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
858年 |
CERT甲骨文安全Java编码标准(2011)第十五章-序列化(SER) |
MemberOf |
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 |
884年 |
CWE横截面 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
994年 |
SFP二级集群:受污染的输入变量 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1034年 |
OWASP 2017年十大类别A8——不安全的反序列化 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1148年 |
SEI CERT甲骨文Java安全编码标准,准则14。序列化(SER) |
MemberOf |
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 |
1200年 |
弱点在2019 CWE最危险的软件错误 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1308年 |
方案及质量措施,安全 |
MemberOf |
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 |
1337年 |
2021 CWE最危险软件的弱点的弱点 |
MemberOf |
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 |
1340年 |
方案及数据保护措施 |
MemberOf |
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 |
1350年 |
2020 CWE最危险软件的弱点的弱点 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1354年 |
OWASP 2021年十大类别A08:2021——软件和数据完整性的失败 |
MemberOf |
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 |
1387年 |
2022 CWE最危险软件的弱点的弱点 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1415年 |
综合分类:资源控制 |
MemberOf |
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 |
1425年 |
2023 CWE最危险软件的弱点的弱点 |
 脆弱性映射笔记
用法:允许
(CWE ID可以用来映射到现实世界的漏洞) |
原因:可接受的使用 |
理由是: 这CWE条目底部的抽象级别,这是一个首选的抽象级别映射到漏洞的根本原因。 |
评论: 仔细阅读这两个名称和描述,以确保此映射是一个适当的配合。不要试图“力”映射到底层基础/变体只是遵守这首选的抽象级别。 |
 笔记
 分类法映射
映射分类名称 |
节点ID |
适合 |
映射节点名 |
扣 |
|
|
反序列化的数据不可信 |
CERT甲骨文安全Java编码标准(2011) |
SER01-J |
|
不偏离正确的序列化方法的签名吗 |
CERT甲骨文安全Java编码标准(2011) |
SER03-J |
|
不要序列化未加密,敏感数据 |
CERT甲骨文安全Java编码标准(2011) |
SER06-J |
|
反序列化期间私人可变的组件创建防御副本 |
CERT甲骨文安全Java编码标准(2011) |
SER08-J |
|
不要使用默认的序列化形式不变量定义的实现 |
软件故障模式 |
SFP25 |
|
受污染的输入变量 |
 引用
更多的信息是可用的,请编辑自定义过滤器或选择一个不同的过滤器。
|