未授权数据泄露: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:
|
|
验证sys_security_acl表中的ACL 查找应用新规则的ACL,关键条目包括:
|
|
ACL和访问审查
- 审查任何ACL中public角色的使用
- 移除public角色或应用UserIsAuthenticated安全属性
- 始终在非生产环境中测试更改以避免影响功能
其他建议
- 检查任何新的或非标准表或字段上的自定义ACL逻辑
- 评估从自动ACL更改中排除的数据类型(包括但不限于):html、css、ip_address、date、glide_date_time、short_description、translated_html等
- 如果敏感数据驻留在这些字段中,创建自定义查询ACL进行保护
支持
如果在验证过程中发现问题,请开设ServiceNow支持案例。参考ServiceNow知识库文章获取详细指导(例如KB0695271用于管理公共ACL角色)。