Chapter 02

OWASP Top 10 概览

Web 应用安全的行业标准参考——2021 版 10 大漏洞类型的全局视图与防御思路

OWASP Top 10(2021)

OWASP Top 10 是 Web 应用安全最具权威性的参考文档,每 3-4 年更新一次(最新版:2021年)。它不是"最严重的漏洞"列表,而是基于行业数据统计出的最普遍的安全风险。理解这 10 类风险,等于掌握了 Web 安全的核心骨架。

A01:访问控制失效(Broken Access Control)

A01 — 2021 年排名第 1(从 2017 年第 5 位升至榜首)

用户能够访问他们不应该访问的资源或功能。例如:访问其他用户的账户数据(IDOR)、以普通用户身份访问管理员功能、绕过 URL 检查直接访问需要授权的页面。94% 的被测应用存在某种形式的访问控制失效。

典型场景: GET /api/users/123/profile 改为 /api/users/124/profile 就能访问其他人的数据;删除 URL 中的 /admin/ 校验参数直接访问管理界面。

防御核心: 服务端对每个请求进行鉴权(不信任客户端),使用 RBAC 角色模型,默认拒绝访问。

A02:加密失败(Cryptographic Failures)

原名"敏感数据暴露",2021 年重新聚焦于加密根本原因。数据传输未加密(HTTP 明文)、使用弱哈希算法(MD5/SHA-1)存储密码、数据库中存储明文密码、密钥硬编码在代码中。

防御核心: 传输用 TLS 1.2+,密码用 bcrypt/Argon2,敏感字段存储用 AES-256,密钥用 Vault/KMS 管理。

A03:注入(Injection)

2017 年排名第 1,2021 年降至第 3(与 XSS 合并统计)。包含 SQL 注入、NoSQL 注入、OS 命令注入、LDAP 注入等。攻击者将恶意代码注入解释器,改变原有程序逻辑。

防御核心: 参数化查询/预处理语句,输入验证与白名单,最小权限原则。

A04:不安全设计(Insecure Design)

2021 年新增类别,关注架构和设计层面的根本性缺陷——即使代码实现完全正确,设计本身就存在安全问题。例如:没有限速的登录接口(允许暴力破解)、"找回密码"通过知道生日来重置(可猜测)、"安全问题"机制。

防御核心: 威胁建模(STRIDE)、安全需求评审、参考 OWASP ASVS(应用安全验证标准)。

A05:安全配置错误(Security Misconfiguration)

最常见的实际风险之一。使用默认密码(admin/admin)、开启调试模式暴露堆栈跟踪、不必要的端口开放、云存储桶(S3)设置为公开访问、详细错误信息暴露技术栈信息。

防御核心: 基础设施即代码(IaC)+安全扫描、最小化安装、定期配置审计。

A06:易受攻击和过时的组件(Vulnerable and Outdated Components)

使用含有已知漏洞的第三方库、框架或系统(包括操作系统、Web 服务器、数据库)。2021 年 Log4Shell 漏洞(CVE-2021-44228,CVSS 10.0 满分)影响了全球数亿个 Java 应用,仅仅因为使用了含漏洞的 Log4j 库。

防御核心: 定期运行 npm audit/pip-audit/cargo audit,维护 SBOM(软件物料清单),自动化依赖更新。

A07:认证和验证机制失效(Identification and Authentication Failures)

允许暴力破解(无限速/锁定机制)、弱密码策略、使用 MD5/SHA-1 存储密码、明文传输凭据、不安全的"记住我"功能实现。

防御核心: bcrypt/Argon2 密码哈希、登录限速与账号锁定、MFA 多因素认证、安全 Session 管理。

A08:软件和数据完整性失败(Software and Data Integrity Failures)

2021 年新增,包含供应链攻击和不安全的反序列化。使用未验证签名的软件更新包、自动安装来源不明的 CI/CD 依赖、反序列化用户可控数据导致任意代码执行(Java 的 Java Deserialization、PHP 的 unserialize())。

防御核心: 验证软件包签名(npm provenance、sigstore)、依赖锁定文件,避免反序列化不可信数据。

A09:安全日志和监控失败(Security Logging and Monitoring Failures)

安全事件发生后无法检测、无法分析、无法响应。不记录登录失败事件、不记录权限拒绝事件、日志中包含敏感信息(密码明文)、无告警机制。研究表明,平均漏洞发现时间超过 200 天。

防御核心: 记录所有安全相关事件(包括失败尝试),设置异常告警,日志集中存储(SIEM),定期演练响应流程。

A10:服务端请求伪造(Server-Side Request Forgery / SSRF)

2021 年新增。攻击者让服务器向任意 URL 发起请求,可用于探测内网服务(Redis、Elasticsearch)、访问云元数据接口(169.254.169.254 获取 IAM 凭证)。2019 年 Capital One 数据泄露事件(1 亿条信用卡信息)的根因就是 AWS 服务器的 SSRF 漏洞。

防御核心: URL 白名单验证,禁止访问内网地址段(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16、169.254.0.0/16),DNS 重绑定防护。

CVSS 漏洞评分详解

CVSS(Common Vulnerability Scoring System)是量化漏洞严重程度的标准。当前版本 CVSS v3.1 从三个维度评分:

维度评分因素说明
Base Score
基础分
攻击向量/复杂度/所需权限/用户交互/影响范围(CIA) 漏洞本身的固有属性,不随时间变化
Temporal Score
时间分
漏洞利用成熟度/修复状态/报告可信度 随补丁发布等情况变化
Environmental Score
环境分
针对特定组织的影响程度调整 由使用该软件的组织根据自身情况调整
0.0
无(None):无影响
0.1 – 3.9
低(Low):影响有限,通常需要特定条件
4.0 – 6.9
中(Medium):有一定影响,需要较多前提条件
7.0 – 8.9
高(High):严重影响,较易被利用
9.0 – 10.0
严重(Critical):最高级别,无需认证即可远程利用,影响完整 CIA 三要素

知名数据泄露事件回顾

Equifax(2017)—— Apache Struts 已知漏洞未及时修补

美国最大信用评分公司之一的 Equifax 遭遇了史上最严重的数据泄露事件之一:1.43 亿美国公民的姓名、社会安全号(SSN)、出生日期、地址、驾照号被窃取。根本原因是一个已有补丁 2 个月的 Apache Struts 漏洞(CVE-2017-5638,CVSS 10.0)未被修复。事件代价:总损失超过 7 亿美元,包括赔偿、罚款和系统加固费用。

教训: 依赖库的已知漏洞必须及时修复,建立自动化依赖扫描和修复流程。

Yahoo(2013-2014)—— 30 亿账号泄露,最大规模数据泄露

Yahoo 全部 30 亿用户账号数据被盗,包括姓名、邮箱、电话、出生日期,以及使用 MD5 弱哈希算法存储的密码(MD5 可通过彩虹表快速破解)。2016 年雅虎被收购时才完全披露事件规模,直接导致收购价格降低 3.5 亿美元。

教训: 密码必须使用 bcrypt/Argon2 等专用哈希算法,永远不要用 MD5/SHA-1 存储密码。

Capital One(2019)—— SSRF + 过度权限的 AWS IAM

一名前 AWS 员工利用 Capital One 服务器上的 SSRF 漏洞,访问 AWS 元数据服务(169.254.169.254)获取了 EC2 实例的 IAM 角色凭证。由于该 IAM 角色权限过大,攻击者进一步访问了 S3 存储桶,窃取了超过 1 亿条信用卡申请记录。

教训: SSRF 防护、IAM 最小权限原则、禁止元数据服务访问(或使用 IMDSv2 需要会话令牌)。

SolarWinds(2020)—— 供应链攻击,软件更新包投毒

俄罗斯 APT 组织(Cozy Bear)入侵 SolarWinds 的构建系统,将恶意代码植入网络管理软件 Orion 的正式更新包。约 18,000 个客户(包括美国多个政府机构、微软、英特尔)安装了含后门的更新,导致长达 9 个月未被发现的持续性入侵。

教训: 软件供应链安全(CI/CD 环境保护、构建产物签名验证 / Sigstore)、零信任架构、行为监控。

从案例中学习的核心规律
本章小结

OWASP Top 10(2021)按风险等级列出了当前 Web 应用最常见的 10 类安全问题。关键变化:访问控制失效升为第 1 位;新增"不安全设计"(A04)强调架构层面;新增"软件完整性失败"(A08)关注供应链;新增 SSRF(A10)反映云原生环境的新威胁。理解这 10 类问题的根本原因和防御思路,是后续各章深入学习的基础框架。