BOLABuster:使用AI大规模全自动无人值守检测越权漏洞

420 阅读5分钟

这篇文章介绍了 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 漏洞,原因如下:

  1. 逻辑复杂:BOLA 漏洞通常与应用程序的业务逻辑紧密相关,没有明显的特征。
  2. 状态依赖:现代 Web 应用是状态化的,API 调用之间存在依赖关系,增加了检测的难度。
  3. 无明显错误:BOLA 漏洞利用成功时,通常不会产生错误或异常,难以被发现。

BOLABuster如何利用AI检测BOLA?

BOLABuster 使用 LLM 来模拟人工测试,它可以:

  1. 理解应用逻辑:分析 API 接口文档,理解应用程序的功能和参数。
  2. 发现依赖关系:识别 API 接口之间的依赖关系,例如,先创建用户才能修改用户信息。
  3. 生成测试用例:自动生成测试用例,并分析测试结果。

BOLABuster 的工作流程主要包括以下几个步骤:

  1. 识别潜在漏洞接口: 找到那些带参数的、需要身份验证的API接口。例如,修改用户名、删除评论等接口。
  2. 挖掘接口依赖关系: 搞清楚哪些接口需要先运行,才能测试其他接口。例如,要测试“删除评论”接口,得先有用户、文章和评论。
  3. 生成执行路径和测试计划: 针对每个潜在的漏洞接口,生成一个测试步骤的计划。
  4. 创建测试脚本: 利用 LLM 把测试计划变成可以执行的脚本。
  5. 执行并分析: 运行脚本,然后用 AI 分析结果,看看有没有 BOLA 漏洞。

下图展示了BOLABuster的工作流程:

BOLABuster Methodology

一个更具体的例子

假设我们要测试一个删除文章评论的 API 接口DELETE /comments/{comment_id}

  1. 识别:这个接口需要身份验证,并且有comment_id参数,可能存在 BOLA 漏洞。

  2. 依赖:要删除评论,首先需要创建用户、创建文章、创建评论。

  3. 计划

    • 用户 A 注册并登录。
    • 用户 A 创建一篇文章。
    • 用户 A 在该文章下创建一个评论。
    • 用户 B 注册并登录。
    • 用户 B 尝试删除用户 A 的评论。
  4. 脚本

    # 用户 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 漏洞
    
  5. 分析:如果用户 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 来保护系统安全。