我们的评估报告长这样
这是您在项目结束时收到的交付物的脱敏示例节选。下方每条发现均为合成内容,对应一个虚构目标,不含任何真实客户数据。
- 项目
- Web 应用与 API 渗透测试
- 目标
- Acme Cloud Platform(示意)
- 评估时间窗
- 为期两周的项目(相对时间,无固定日期)
- 密级
- 机密(示意样例)
- 报告版本
- 示例 v1.0
执行摘要
在为期两周的灰盒项目中,Vexaro 对 Acme Cloud Platform 可从外部访问的 Web 应用及其支撑 API 进行了评估。测试遵循 OWASP Web Security Testing Guide,并在自动化工具之外辅以人工验证。
整体风险态势:偏高。应用正确实施了身份认证与传输安全,但对象级授权的实施不一致。有两项发现各自均可被利用:计费 API 中的不安全直接对象引用(IDOR),以及文档导入功能中的服务端请求伪造(SSRF)。二者串联后,一名经过认证的低权限用户即可读取其他租户的发票并访问内部云元数据。强化访问控制层并限制出站请求,可消除大部分残余风险。
共 8 项发现,按 CVSS 3.1 评分
范围与方法
本项目涵盖生产环境的 Web 应用、其 REST API、承载它们的云账户,以及可从外部访问的网络边界。测试在限定时间内进行,分别从一个经过认证的低权限账户和一个未认证的基线状态执行。
- Web 应用:app.acme.example(认证与匿名流程)
- REST API:api.acme.example(v1 与 v2 端点)
- 云账户:对象存储、计算元数据与 IAM 审查
- 外部网络边界:暴露的服务与 TLS 配置
- 拒绝服务与大流量负载测试
- 社会工程与物理访问
- 非由目标方运营的第三方 SaaS
方法与参考
测试以人工为主,并对照业界公认框架进行映射,以确保发现可复现、覆盖可审计。
Web Security Testing Guide:驱动应用测试覆盖的测试用例。
Application Security Verification Standard:控制项级别的验证基线。
用于刻画真实攻击路径的攻击者战术与技术。
Penetration Testing Execution Standard:贯穿项目的整体流程。
每项发现均以 CVSS 3.1 评分,并转化为业务风险等级。严重程度反映在本环境上下文中的可利用性与影响,而非仅凭基础分。
发现
项目中八项有代表性的发现,按严重程度排序。第一项在下方完整展开,以呈现每条报告条目应有的详尽程度。
| 编号 | 发现 | 严重程度 | CVSS | 状态 |
|---|---|---|---|---|
| ACME-2024-001 | 计费 API 中的 IDOR 暴露其他租户的发票 | 高 | 8.1 | 待处理 |
| ACME-2024-002 | 文档导入中的 server-side request forgery | 高 | 7.7 | 待处理 |
| ACME-2024-003 | 管理端点上功能级授权被破坏 | 中 | 6.5 | 已修复,已复测 |
| ACME-2024-004 | 工单主题字段中的 stored XSS | 中 | 5.4 | 待处理 |
| ACME-2024-005 | 弱口令策略允许使用过于简单的凭据 | 低 | 3.7 | 待处理 |
| ACME-2024-006 | 冗长的 API 错误泄露堆栈跟踪与库版本 | 低 | 3.1 | 风险已接受 |
| ACME-2024-007 | 缺失安全响应头(HSTS、CSP、frame-ancestors) | 信息 | 2.4 | 已修复,已复测 |
| ACME-2024-008 | 会话 Cookie 在签发时缺少 Secure 属性 | 信息 | 2.0 | 待处理 |
完整展开的示例发现
一项发现,按真实报告中每条条目应有的深度展开:描述、影响、证据、复现、整改与参考。
计费 API 中的 IDOR 暴露其他租户的发票
- 发现编号
- ACME-2024-001
- CVSS 3.1
- 8.1(高)
- 向量
- AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
- CWE
- CWE-639:Authorization Bypass Through User-Controlled Key
描述
计费 API 通过请求路径中提供的顺序数字标识符返回发票文档。该端点会对调用方进行认证,但从不校验所请求的发票是否属于调用方所在的租户。因此,任何经过认证的用户都可以枚举该标识符,获取属于其他组织的发票,其中包括计费联系人姓名、金额与明细行。
影响
这是一起跨租户的机密性泄露。任一租户中经过认证的低权限用户,只需递增一个整数,便可读取其他所有租户的财务记录。所泄露的数据包含商务条款与个人联系信息,既构成隐私暴露,也构成竞争情报暴露。由于标识符是顺序的,整个发票库可在数分钟内被程序化抓取。
证据
示意性的请求与响应。主机、令牌与数值均为合成数据,并已脱敏。
GET /v2/invoices/10428 HTTP/1.1
Host: api.acme.example
Authorization: Bearer eyJhbGciOi...REDACTED.SAMPLE.TOKEN
Accept: application/jsonHTTP/1.1 200 OK
Content-Type: application/json
{
"invoice_id": 10428,
"tenant_id": 3304,
"bill_to": "[REDACTED], Northwind Trading",
"amount_due": "14,920.00 USD",
"status": "unpaid"
}'复现步骤
- 1使用任意有效的低权限账户登录应用,并捕获 bearer 令牌。
- 2请求您自己的发票,例如 GET /v2/invoices/10427,确认返回 200 响应。
- 3将数字标识符递减或递增(.../10428、.../10429),并用您自己的令牌重放该请求。
- 4观察到返回了 tenant_id 取值不同的发票,证实缺少对象级授权校验。
整改
在每个请求上强制执行对象级授权:先解析发票,再确认其 tenant_id 与已认证主体的租户一致,方可返回任何数据,否则返回 404。应在集中位置(例如策略层或查询作用域)而非逐个处理器实施该校验,并增加一条回归测试,断言跨租户请求会被拒绝。将顺序标识符替换为不可猜测的标识符可降低枚举风险,但属于纵深防御,不能替代授权校验。