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. 漏洞描述

软件或基础设施未能保护软件及数据的完整性,导致可能被破坏的情况。主要表现形式包括:

  1. 不安全的反序列化:对象或数据经编码或序列化到攻击者可读写的结构中
  2. 依赖不受信任的组件:应用依赖来自不受信任来源的插件、库或模块
  3. 不安全的CI/CD流程:可能导致未授权访问、恶意代码或系统破坏
  4. 不安全的自动更新:缺乏完整性验证的自动更新机制可能被攻击者利用

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 漏洞产生原因

  1. 对反序列化危险性的认识不足
  2. 反序列化后验证的无效性
  3. 对反序列化对象的盲目信任
  4. 现代网站复杂的依赖关系

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 操作序列化对象

  1. 修改对象属性

    • 直接编辑字节流或编写脚本创建新对象
    • 示例:修改isAdmin属性实现权限提升
  2. 修改数据类型

    • 利用松散类型比较(如PHP的==)
    • 示例:将密码设为整数0绕过认证

7. 防御措施

7.1 基本原则

  • 避免对用户输入进行反序列化
  • 如必须反序列化,实施强验证措施

7.2 具体措施

  1. 数据完整性验证

    • 使用数字签名验证数据完整性
    • 在反序列化前完成验证
  2. 自定义序列化方法

    • 避免使用通用反序列化功能
    • 控制哪些字段可被序列化
  3. 不要依赖小工具链消除

    • 漏洞根源是反序列化用户输入
    • 消除所有潜在利用链不现实

8. 总结

A08漏洞类型强调了软件和数据完整性在现代应用安全中的重要性。反序列化漏洞尤其危险,因为它可以成为攻击的切入点,导致严重后果如RCE。开发者应当:

  1. 充分认识反序列化的危险性
  2. 实施严格的完整性验证机制
  3. 谨慎处理来自不受信任源的数据
  4. 确保整个软件供应链的安全

通过采取这些措施,可以显著降低软件和数据完整性故障带来的安全风险。

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 绕过认证 7. 防御措施 7.1 基本原则 避免 对用户输入进行反序列化 如必须反序列化,实施强验证措施 7.2 具体措施 数据完整性验证 使用数字签名验证数据完整性 在反序列化前完成验证 自定义序列化方法 避免使用通用反序列化功能 控制哪些字段可被序列化 不要依赖小工具链消除 漏洞根源是反序列化用户输入 消除所有潜在利用链不现实 8. 总结 A08漏洞类型强调了软件和数据完整性在现代应用安全中的重要性。反序列化漏洞尤其危险,因为它可以成为攻击的切入点,导致严重后果如RCE。开发者应当: 充分认识反序列化的危险性 实施严格的完整性验证机制 谨慎处理来自不受信任源的数据 确保整个软件供应链的安全 通过采取这些措施,可以显著降低软件和数据完整性故障带来的安全风险。