这篇文章介绍了 Palo Alto Networks 的 Unit 42 团队如何使用大型语言模型(LLM)来自动检测一种叫做 BOLA (Broken Object Level Authorization,失效的对象级别授权) 的安全漏洞,并将其命名为 BOLABuster。
什么是BOLA漏洞?
BOLA 漏洞就像是未经授权访问。想象一下,你去看病,你的病历只有你自己和医生可以看。但是,如果医院的系统存在漏洞,让其他人可以通过修改你的病历号码来查看你的信息,这就是 BOLA 漏洞。
更具体地说,BOLA 发生在应用程序的 API 接口没有正确验证用户是否有权限访问或修改某个数据对象时。比如,一个用户可以通过修改 API 请求中的visit_id参数,访问到其他用户的医疗记录。
举个例子:
假设一个电商网站,用户可以通过api.example.com/orders/{order_id}查看订单信息。如果网站没有验证用户是否有权查看order_id对应的订单,那么恶意用户就可以通过修改order_id来查看别人的订单信息,这就是一个 BOLA 漏洞。
# 这是一个简化的Python示例,展示了BOLA漏洞的可能存在方式
def get_order_details(order_id, user_id):
"""
获取订单详情,但没有进行权限验证。
"""
order = get_order_from_database(order_id)
# 缺少权限验证!应该检查user_id是否有权访问此order
# if order.user_id != user_id:
# return "没有权限"
return order.details
# 攻击者可以尝试修改order_id来访问其他用户的订单
order_details = get_order_details(other_users_order_id, attacker_user_id)
print(order_details) # 如果没有权限验证,攻击者将看到其他用户的订单信息
为什么BOLA难以检测?
传统的安全测试工具,例如静态分析和动态分析,很难检测到 BOLA 漏洞,原因如下:
- 逻辑复杂:BOLA 漏洞通常与应用程序的业务逻辑紧密相关,没有明显的特征。
- 状态依赖:现代 Web 应用是状态化的,API 调用之间存在依赖关系,增加了检测的难度。
- 无明显错误:BOLA 漏洞利用成功时,通常不会产生错误或异常,难以被发现。
BOLABuster如何利用AI检测BOLA?
BOLABuster 使用 LLM 来模拟人工测试,它可以:
- 理解应用逻辑:分析 API 接口文档,理解应用程序的功能和参数。
- 发现依赖关系:识别 API 接口之间的依赖关系,例如,先创建用户才能修改用户信息。
- 生成测试用例:自动生成测试用例,并分析测试结果。
BOLABuster 的工作流程主要包括以下几个步骤:
- 识别潜在漏洞接口: 找到那些带参数的、需要身份验证的API接口。例如,修改用户名、删除评论等接口。
- 挖掘接口依赖关系: 搞清楚哪些接口需要先运行,才能测试其他接口。例如,要测试“删除评论”接口,得先有用户、文章和评论。
- 生成执行路径和测试计划: 针对每个潜在的漏洞接口,生成一个测试步骤的计划。
- 创建测试脚本: 利用 LLM 把测试计划变成可以执行的脚本。
- 执行并分析: 运行脚本,然后用 AI 分析结果,看看有没有 BOLA 漏洞。
下图展示了BOLABuster的工作流程:
BOLABuster Methodology
一个更具体的例子:
假设我们要测试一个删除文章评论的 API 接口DELETE /comments/{comment_id}。
-
识别:这个接口需要身份验证,并且有
comment_id参数,可能存在 BOLA 漏洞。 -
依赖:要删除评论,首先需要创建用户、创建文章、创建评论。
-
计划:
- 用户 A 注册并登录。
- 用户 A 创建一篇文章。
- 用户 A 在该文章下创建一个评论。
- 用户 B 注册并登录。
- 用户 B 尝试删除用户 A 的评论。
-
脚本:
# 用户 A 注册 curl -X POST /register -d '{"username": "alice", "password": "password"}' # 用户 A 登录,获取 token token_alice=$(curl -X POST /login -d '{"username": "alice", "password": "password"}' | jq .token) # 用户 A 创建文章 article_id=$(curl -X POST /articles -H "Authorization: Bearer $token_alice" -d '{"title": "My Article"}' | jq .id) # 用户 A 创建评论 comment_id=$(curl -X POST /articles/$article_id/comments -H "Authorization: Bearer $token_alice" -d '{"content": "My Comment"}' | jq .id) # 用户 B 注册 curl -X POST /register -d '{"username": "bob", "password": "password"}' # 用户 B 登录,获取 token token_bob=$(curl -X POST /login -d '{"username": "bob", "password": "password"}' | jq .token) # 用户 B 尝试删除用户 A 的评论 curl -X DELETE /comments/$comment_id -H "Authorization: Bearer $token_bob" # 检查返回状态码,如果是 200 或 204,说明存在 BOLA 漏洞 -
分析:如果用户 B 成功删除了用户 A 的评论,说明存在 BOLA 漏洞。
BOLABuster的成果
Unit 42 团队使用 BOLABuster 发现了一些流行的开源软件中的 BOLA 漏洞,包括:
- Grafana (CVE-2024-1313): 低权限用户可以删除其他组织的仪表盘快照。
- Harbor (CVE-2024-22278): 具有 Maintainer 角色的用户可以创建、更新和删除项目元数据,这应该仅限于管理员。
- Easy!Appointments (CVE-2023-3285 - CVE-2023-3290, CVE-2023-38047 - CVE-2023-38055): 发现 15 个漏洞,低权限用户可以绕过授权控制,导致未经授权的访问和数据操作。
总结
BOLABuster 证明了 AI 在安全漏洞检测方面的潜力。通过自动化人工测试任务,AI 可以帮助安全团队更有效地发现和修复 BOLA 漏洞。当然,AI 也是一把双刃剑,攻击者也可以利用 AI 来发现新的漏洞,因此安全社区需要不断创新,利用 AI 来保护系统安全。