ServiceNow ACL范围查询漏洞导致未授权数据泄露 - CVE-2025-3648深度分析

本文详细分析了ServiceNow平台中的ACL配置漏洞CVE-2025-3648,该漏洞允许攻击者通过范围查询绕过访问控制获取敏感数据。文章包含技术细节、修复方案和验证步骤,帮助管理员加强系统安全防护。

未授权数据泄露:ServiceNow ACL范围查询漏洞分析 - CVE-2025-3648

漏洞概述

ServiceNow平台中发现了一个安全漏洞,可能允许未经认证或已认证用户推断其不应访问的数据。这种情况发生在特定配置错误或过于宽松的访问控制列表(ACL)条件下,特别是涉及范围查询请求时。

受影响系统和应用

所有受支持的ServiceNow平台版本,包括:

  • Washington DC及更早版本(不支持Deny-Unless ACL)
  • Xanadu及以上版本(包含增强安全机制)

存在以下情况的实例特别容易受到影响:

  • 自定义表或字段未受字段特定ACL保护
  • 停用或修改了默认ACL
  • 无限制使用public角色

技术细节

在特定ACL配置下,用户可以对未受保护的字段或表执行范围查询(例如返回记录子集的查询)。即使没有完全读取权限,攻击者也可能推断出数据值。

ServiceNow修复措施

截至2025年5月,ServiceNow实施了全平台更新,包括:

默认拒绝行为

  • 全局*.* query_range ACL现在默认拒绝访问,除非被更具体的ACL覆盖

自动生成ACL

  • 基于当前用户权限创建新的query_range和read ACL,在保持功能的同时强制执行安全性

公共角色变更

  • 更新或修改了先前通过public角色向未经认证用户授予有限访问权限的某些ACL
  • 在适当时将角色更改为nobody

新脚本工具

  • 在所有实例中安装了QueryRangeACLAuditor脚本包含
  • 管理员可以使用此工具将ACL逻辑重新应用到新字段或表

读取ACL调整

  • 部署了额外的ACL,即使在收紧query_range逻辑的情况下也能保持预期功能

字段类型例外

  • 某些字段(如short_description、html、ip_address)继续基于现有规则允许访问
  • 如果这些字段中存储了敏感数据,客户应手动审查

缓解措施

立即验证步骤

验证安全属性(sys_security_attribute表) 确保以下属性存在并设置为True:

1
2
3
4
Attribute Name                  sys_id
HasRightsToRead                 7e1a0927930102102504ff92f1891826
HasRightsToReadIsTrue           ddb311e3930102102504ff92f18918c9
UserIsAuthenticatedAndHasRightsToRead 30b1557ea3dc6210103da1fdc31e6128

验证sys_security_acl表中的ACL 查找应用新规则的ACL,关键条目包括:

1
2
3
4
ACL Name        sys_id                          OperationType  角色
*.*             5c3e8c50935502102504ff92f189187c query_range    Deny-Unless(修改为nobody角色)
*.*             7fce54b64ff42210ee1a3c11b1ce0b97 query_range    Allow-if
*.*             373e8c50935502102504ff92f1891889 query_match    Allow-if

ACL和访问审查

  • 审查任何ACL中public角色的使用
  • 移除public角色或应用UserIsAuthenticated安全属性
  • 始终在非生产环境中测试更改以避免影响功能

其他建议

  • 检查任何新的或非标准表或字段上的自定义ACL逻辑
  • 评估从自动ACL更改中排除的数据类型(包括但不限于):html、css、ip_address、date、glide_date_time、short_description、translated_html等
  • 如果敏感数据驻留在这些字段中,创建自定义查询ACL进行保护

支持

如果在验证过程中发现问题,请开设ServiceNow支持案例。参考ServiceNow知识库文章获取详细指导(例如KB0695271用于管理公共ACL角色)。

参考资料

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计