2021 Owasp Top 10 逐个击破之A08:软件和数据完整性故障
字数 1689 2025-08-12 11:34:18
OWASP Top 10 2021 A08:软件和数据完整性故障详解
1. 漏洞概述
A08:软件和数据完整性故障是OWASP Top 10 2021新增的漏洞类型,主要关注软件更新、关键数据及CI/CD流程中未经完整性验证的问题。该漏洞类型在CVE/CVSS数据加权后具有最高影响之一。
1.1 关键CWE关联
- CWE-502: 不受信任数据的反序列化
- CWE-829: 包含来自不受信任控制领域的功能
- CWE-494: 下载未经完整性验证的代码
2. 漏洞描述
软件或基础设施未能保护软件及数据的完整性,导致可能被破坏的情况。主要表现形式包括:
- 不安全的反序列化:对象或数据经编码或序列化到攻击者可读写的结构中
- 依赖不受信任的组件:应用依赖来自不受信任来源的插件、库或模块
- 不安全的CI/CD流程:可能导致未授权访问、恶意代码或系统破坏
- 不安全的自动更新:缺乏完整性验证的自动更新机制可能被攻击者利用
3. 防御措施
3.1 数据完整性保护
- 确保不受信任的客户端不会收到未签名或未加密的序列化数据
- 使用完整性检查或数字签名来检测篡改或重放攻击
3.2 软件来源验证
- 使用数字签名或类似机制确保软件或数据来自预期提供者
- 确保库及依赖包(npm/Maven等)从受信任的仓库获取
3.3 供应链安全
- 使用软件供应链安全工具(如OWASP Dependency Check或CycloneDX)
- 确保组件没有已知漏洞
3.4 CI/CD流程安全
- 适当配置CI/CD流程的访问控制
- 确保代码在构建及部署流程中的完整性
4. 攻击场景示例
4.1 不安全的反序列化
- 场景:Spring Boot微服务在请求中包含序列化的用户状态
- 攻击:攻击者利用Java Serial Killer工具执行远程代码
4.2 未签名的更新
- 场景:家用路由器、机顶盒等设备使用未签名的固件更新
- 风险:攻击者可上传恶意更新,影响所有设备
4.3 SolarWinds攻击
- 案例:SolarWinds Orion的更新流程被破坏
- 影响:18,000+组织收到恶意更新,约100个组织受影响
5. 反序列化漏洞详解
5.1 基本概念
- 序列化:将数据结构转换为可传输的字节流
- 反序列化:将字节流还原为原始对象
5.2 不安全反序列化的定义
当网站对用户可控数据进行反序列化时,可能导致:
- 对象注入漏洞
- 意外类的对象实例化
- 在反序列化完成前即可发起攻击
5.3 漏洞产生原因
- 对反序列化危险性的认识不足
- 反序列化后验证的无效性
- 对反序列化对象的盲目信任
- 现代网站复杂的依赖关系
5.4 漏洞影响
- 远程代码执行(RCE)
- 权限提升
- 任意文件访问
- 拒绝服务(DoS)
6. 反序列化漏洞利用技术
6.1 识别序列化数据
- PHP格式:人类可读字符串,如
O:4:"User":2:{s:4:"name":s:6:"carlos";} - Java格式:二进制格式,以
ac ed(十六进制)或rO0(Base64)开头
6.2 操作序列化对象
-
修改对象属性
- 直接编辑字节流或编写脚本创建新对象
- 示例:修改
isAdmin属性实现权限提升
-
修改数据类型
- 利用松散类型比较(如PHP的
==) - 示例:将密码设为整数
0绕过认证
- 利用松散类型比较(如PHP的
7. 防御措施
7.1 基本原则
- 避免对用户输入进行反序列化
- 如必须反序列化,实施强验证措施
7.2 具体措施
-
数据完整性验证
- 使用数字签名验证数据完整性
- 在反序列化前完成验证
-
自定义序列化方法
- 避免使用通用反序列化功能
- 控制哪些字段可被序列化
-
不要依赖小工具链消除
- 漏洞根源是反序列化用户输入
- 消除所有潜在利用链不现实
8. 总结
A08漏洞类型强调了软件和数据完整性在现代应用安全中的重要性。反序列化漏洞尤其危险,因为它可以成为攻击的切入点,导致严重后果如RCE。开发者应当:
- 充分认识反序列化的危险性
- 实施严格的完整性验证机制
- 谨慎处理来自不受信任源的数据
- 确保整个软件供应链的安全
通过采取这些措施,可以显著降低软件和数据完整性故障带来的安全风险。