在Cisco IOS XE
操作系统的Cisco REST API
虚拟服务容器中存在一个认证绕过漏洞,是由于REST API
身份验证服务默认启用了一个API调试端点而导致的。
未经身份验证的远程攻击者可以通过向目标服务器发送精心设计的HTTP请求来获得id令牌,绕过身份验证。该漏洞被标记为CVE-2019-12643
。
Cisco IOS XE
是思科网络互联操作系统(IOS)的一个版本,它基于Linux操作系统,可在一个单独的进程中执行各种典型的IOS功能。IOS XE可以在各种物理硬件上运行,比如网络交换机、无线控制器、路由器以及虚拟化设备。从16.2版开始,IOS XE开始支持“服务容器”,通过使用Linux虚拟容器(LXC)和基于内核的虚拟机(KVM)技术,IOS XE平台可直接托管各种应用。这些应用包括网络监控代理以及各类网络管控功能。
思科提供了一个服务容器,可将REST API
功能添加到支持服务容器的IOS XE设备上,管理员可通过基于HTTP的API对设备进行管理(默认管理端口为HTTPS协议的55443)。
IOS XE REST API的身份验证功能依赖于令牌。身份验证服务会检查用户所提供的凭据,然后返回一个id令牌,用于后续请求的身份标识(短期)。客户端通过如下HTTP请求来执行身份验证:
/api/v1/auth/token-services
身份验证成功后,服务器将返回一个JSON格式的id令牌。在客户端后续请求API时会将该令牌放在报头X-auth-token
中。
IOS XE
的REST API
服务容器中存在一个身份绕过漏洞,这是由于在REST API web应用的默认配置中启用了debug_tokens
配置参数。REST API web应用是通过基于Python的Flask WSGI web应用框架编写的。其中Flask-RESTful
扩展使用一个自定义的ResourceRoute
装饰器来定义API端点。tokens.py
模块包含处理令牌服务端代码以及一个基于应用配置文件api-config.ini
中的debug_tokens
参数影响的调试端点。默认情况下,debug_tokens
被设置为yes
,这可让任何未经身份验证的用户通过访问以下URI来查看服务器上所有当前有效的令牌:
/api/v1/auth/token-services/debug
未经身份验证的远程攻击者可以通过访问令牌服务的调试端点来利用此漏洞。最终绕过身份验证,以管理员身份在目标服务器上登录。
下面的代码片段取自Cisco REST API管理服务容器的16.06.05版本,来自iosxe-remote-mgmt.16.06.05.ova
的/opt/cisco/restful_api/src/api-config.ini
文件:
而文件/opt/cisco/restful_api/src/crouter/api/resources/tokens.py
:
为了复现漏洞,你必须先按照官方文档设置好REST API,然后创建一个15级的用户,再通过一个无权限的用户执行以下请求:
curl -v -X POST https://:55443/api/v1/auth/token-services -H . "Accept:application/json" \ -u ":" -d "" –insecure
其中
为目标主机,
and
为15级用户的用户名和密码。在运行了该命令后,就可以正式攻击了。
默认情况下,以上这个PoC将检索目标服务器上的所有身份令牌,我们可以使用第一个令牌来获得设备上所有网络接口的信息。
我们已在Cisco云服务的路由器1000V的16.06.05版本上测试成功,其中运行REST API管理服务容器版本也为16.06.05。
思科在今年8月28日之前修复了这个漏洞(SA20190828)。他们发布了REST API虚拟服务容器的修复版本,同时指出REST API在默认情况下是不启用的,必须手动在IOS XE设备上进行安装和激活。
特别感谢趋势科技研究团队的John Simpson和Dusan Stevanovic为该漏洞进行的详尽分析。
本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场:https://nosec.org/home/detail/3070.html
来源:https://www.zerodayinitiative.com/blog/2019/10/17/cve-2019-12643-cisco-ios-xe-authentication-bypass-vulnerability