对 Cisco IOS XE 软件认证绕过漏洞的分析(CVE-2019-12643)

birdpwn 漏洞 2019年10月29日发布
Favorite收藏

导语:Cisco IOS XE软件的Cisco REST API虚拟服务容器中存在身份验证绕过漏洞。此漏洞是由于在REST API身份验证服务的管理中默认启用了调试API结点而导致的。

Cisco IOS XE软件的Cisco REST API虚拟服务容器中存在身份验证绕过漏洞。此漏洞是由于在REST API身份验证服务的管理中默认启用了调试API结点而导致的。

远程未经身份验证的攻击者可以通过向目标服务器发送特制的HTTP请求来利用此漏洞。成功利用此漏洞可以通过获取经过身份验证的用户的令牌ID来导致绕过身份验证。

0x01  漏洞分析

Cisco IOS XE是Cisco Internet操作系统(IOS)的一个版本,可在Linux操作系统上运行,并在单进程中运行IOS功能。IOS XE在各种物理硬件上运行,例如网络交换机,无线控制器,路由器和虚拟设备。从版本16.2开始,IOS XE支持使用“服务容器”,从而允许通过基于内核的虚拟机(KVM)使用Linux虚拟容器(LXC)和虚拟机,将应用程序直接托管在IOS XE平台上。这样的应用程序可以包括网络监视代理程序,其他有联网功能的程序或其他应用程序。

思科提供了一个服务容器,该服务容器向支持服务容器的特定IOS XE设备添加了代表状态传输(REST)API功能,从而允许通过基于HTTP的API对该设备进行管理,默认情况下,该端口可通过HTTPS在端口55443 / TCP上进行访问。

HTTP是RFC 7230-7237和其他RFC中描述的请求/响应协议。客户端将请求发送到服务器,服务器又将响应发送回客户端。HTTP请求由一个请求行,各种标头,一个空行和一个可选的消息正文组成:

其中CRLF表示新的行序列回车符(CR),后跟换行符(LF),SP表示空格字符。可以将参数作为名称/值键值对从客户端到服务器的参数传递到Request-URI或消息正文中,具体取决于所使用的方法和Content-Type标头。例如,param使用GET方法传递一个名为“ 1” 的参数的简单HTTP请求可能类似于:

 GET /my_webapp/mypaget.htm?param=1 HTTP/1.1
 Host: www.myhost.com

使用POST方法的类似请求可能类似于:

IOS XE REST API依赖于对令牌服务的身份验证,该令牌服务检查提供的凭据,然后返回令牌ID,这是一个短暂的标识符,用于后续请求。客户端使用HTTP基本身份验证对以下URI进行身份验证:

   /api/v1/auth/token-services

身份验证成功后,服务器将使用令牌ID JSON对象进行响应,然后在对API的进一步请求时,客户端会将其放置在X-auth-令牌 HTTP标头中。

IOS XE的REST API服务容器中存在身份验证绕过漏洞。该漏洞是由于在REST API Web应用程序的默认配置中启用了debug_tokens配置参数所致。REST API Web应用程序使用Flask WSGI Web应用程序框架以Python编写。Flask-RESTful扩展使用自定义ResourceRoute装饰器来定义API的终结点。该tokens.py模块包含代码来处理前面提到的令牌服务端点,并包含基于该值启用调试端点debug_tokens位于应用程序配置文件,参数API-的config.ini。默认情况下,debug_tokens设置为“ yes”,这使任何未经身份验证的用户都可以通过访问以下URI来查看服务器上所有当前有效的令牌:

 /api/v1/auth/token-services/debug

远程未经身份验证的攻击者可以通过访问令牌服务调试终结点来利用此漏洞。成功利用该漏洞可能会导致绕过身份验证,从而使攻击者能够以管理员身份在目标服务器上执行操作。

0x02 源码分析

以下代码段摘自Cisco REST API管理服务容器版本16.06.05。

在/opt/cisco/restful_api/src/api-config.iniiosxe-remote-mgmt.16.06.05.ova中:

在/opt/cisco/restful_api/src/crouter/api/resources/tokens.py:

0x03  漏洞利用

趋势科技安全研究部提供了PoC脚本poc.py,以证明此漏洞带来的风险。该脚本通过以下方法执行:

python poc.py client <host>

在<host>启用了REST API的情况下,目标主机在运行存在漏洞的IOS XE版本的位置。

设备必须按照此处 的说明配置REST API 。此外,应在设备上创建特权级别为15的用户。REST API运行并创建用户后,非特权用户应使用以下cURL命令请求身份验证令牌:

curl -v -X POST https://<host>:55443/api/v1/auth/token-services -H 。         "Accept:application/json" \ -u "<username>:<password>" -d "" –insecure

其中<host>是目标主机,<username>和<password>是用户名和与15。特权级运行命令后的用户的口令时,PoC就会执行。

默认情况下,PoC将检索所有当前活动的身份验证令牌,然后使用第一个令牌检索有关设备上配置的所有网络接口的信息。

PoC已在运行REST API管理服务容器版本16.06.05的思科云服务路由器1000V版本16.06.05上进行了测试。

0x04  补丁修复

思科已经修补了此漏洞,并于今年 8月28日发布了SA20190828。此漏洞报告中,他们发布了REST API虚拟服务容器的固定版本以及经过加固的Cisco IOS XE软件版本,以防止在设备上安装或激活存在漏洞的容器。他们还注意到,REST API默认情况下未启用,必须在IOS XE设备上单独安装和激活。

他们没有提供有关为修复此漏洞而进行的代码更改的详细信息。

本文翻译自:https://www.zerodayinitiative.com/blog/2019/10/17/cve-2019-12643-cisco-ios-xe-authentication-bypass-vulnerability如若转载,请注明原文地址: https://www.4hou.com/vulnerable/21125.html
点赞 0
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论