[하루한줄] CVE-2020-35606: Arbitrary Command Execution in Webmin

URL

Webmin-1962-PU-Escape-Bypass-Remote-Command-Exectuion

Target

  • Wemin 1.962 이하 버전

Explain

Webmin에서 Remote Command Execution 취약점이 발견되었습니다. 해당 취약점을 통해 패키지 업데이트 모듈을 사용할 수 있는 모든 유저가 root 권한으로 arbitrary command를 실행할 수 있습니다. CVE-2019-12840에 대한 필터링은 package name 변수가 system command 안에 직접적으로 들어가므로 URL encoding을 통해 우회할 수 있습니다.(ex. command line을 한 줄 아래에서 실행)

u 파라미터는 update.cgi에서 @pkgs 변수에 들어가서 여러 연산을 수행합니다. update.cgi의 함수들은 package-updates-lib.pl에서 호출되는데, 그중 package_install(package-name, [system], [new-install])은 update system이나 Wemin을 통해 패키지를 설치할 수 있고 업데이트된 패키지 목록을 반환합니다.

패지키를 설치할 때 CVE-2019-12840에 대한 조치로 s/\\(-)|\\(.)/string/g; 필터링이 걸려있습니다. 패키지 이름은 http request 변수이므로 %0a%0c 등을 통해 escape가 가능합니다. 패키지 이름 뒤에 %7c 등으로 pipe나 .을 추가하면 그 부분에 \ 백 슬래시가 추가되어 명령 실행이 불가능하지만 %0a%7c 등으로 새로운 command line에서 실행하면 \가 무시되고 정상적으로 arbitrary command execution이 가능합니다.

해당 취약점에 대한 Metasploit code