- 개요
Webmin은 Unix 계열 시스템을 위한 웹 기반 시스템 구성 도구 입니다.
Webmin user의 비밀번호 재설정 페이지에 Command Injection 취약점이 존재하여
인증되지 않은 사용자가 임의의 명령어를 실행할 수 있습니다.
- 취약한 버전
Webmin <= 1.920
- 취약점 설명 및 분석
우선 password_change.cgi 코드에 아래와 같이 password_mode의 설정이 2로 설정되어야
해당 페이지를 사용할 수 있습니다. 해당 설정은 기본적으로 2로 설정되어 있습니다.
먼저 password_change.cgi 페이지에 접근하면 아래와 같은 응답을 확인 할 수 있습니다.
new1과 new2에 대한 인자 값을 주어야 페이지가 작동하는것을 확인 할 수 있습니다.
new1, new2인자 값을 입력하여도 에러메세지를 확인할 수 있으며 현재 패스워드에 대한 검증도 있는 것을 확인 할 수 있습니다.
검증 로직을 확인해보면 old 파라미터에 입력한 값과 기존의 password가 같지 않다면 pass_error를 통해 에러
메세지를 띄우게 됩니다. pass_error 뒤에 qx라는 함수는 system 함수와 같은 기능의 함수이기 때문에
old 파라미터의 값을 shell command로 실행시켜주는 것을 알 수 있습니다.
pass_error 함수를 보면 인자로 들어온 값을 이어서 출력해주기 때문에 에러가 발생하더라도 명령어에 대한 결과값을 확인할 수 있습니다.
old 파라미터에 리버스 쉘 command를 입력하여 요청 시 server의 shell을 획득할 수 있습니다.
해당 취약점의 공격 시나리오는 아래와 같습니다.
이 취약점 같은 경우 qx함수의 사용이 문제가 되었기 때문에 패치 노트 또한 qx함수만 삭제하는 간단한 형태로 보안패치가 되었습니다.
- 위협요소
공격자에 의해 간단하게 Server의 shell을 탈취당할 수 있습니다.
해당 취약점의 경우 인증되지 않은 사용자도 공격이 가능하기 때문에 상당히 취약하므로 빠른 버전 업데이트가 필요합니다.
- 대응방안
1) Webmin 최신 버전 업데이트