[하루한줄] VestaCP Local Privilege Escalation 취약점

URL

SSD Advisory – VestaCP LPE Vulnerabilities

Target

  • VestCP 0.9.8-24 이하 버전

Explain

오픈소스 웹 호스팅 제어판인 VESTA Control Panel(VestaCP)에서 user가 admin으로 권한 상승할 수 있는 취약점이 발견되었습니다.

해당 취약점은 /add/web/index.php에서 호출되는 v-add-web-domain 쉘 스크립트에서 발생합니다. 해당 스크립트는 디렉터리나 파일의 내용이 존재하는지에 검사 없이 다음 명령어를 사용합니다.

88 : # Changing file owner & permission
89 : chown -R $user:$user $HOMEDIR/$user/web/$domain
90 : chown root:$user /var/log/$WEB_SYSTEM/domains/$domain.* $conf
91 : chmod 640 /var/log/$WEB_SYSTEM/domains/$domain.*
92 : chmod 751 $HOMEDIR/$user/web/$domain $HOMEDIR/$user/web/$domain/*
93 : chmod 551 $HOMEDIR/$user/web/$domain/stats $HOMEDIR/$user/web/$domain/logs
94 : chmod 644 $HOMEDIR/$user/web/$domain/public_*html/*.*

위의 명령어들은 $domain 폴더에서 사용되므로 94 줄의 명령을 통해 읽고 싶은 파일의 권한을 변경할 수 있고, 92 줄의 명령을 통해 폴더의 접근 권한을 변경할 수 있습니다.

또한 VestaCP는 사용자를 추가하거나 리스트 하는 등의 web-app의 모든 기능을 bash 스크립트에 의존합니다. 이러한 bash 스크립트들은 root 소유이며 변경할 수 없지만, sudo -l을 통해 패스워드 입력 없이 admin이 root 권한으로 이러한 스크립트를 실행할 수 있습니다. 이를 통해 root로 권한 상승하는 방법은 다음과 같습니다.

  1. v-list-user 스크립트에 source $VESTA/func/main.sh가 존재하므로 /tmp/func 폴더에 /bin/bash 쉘 스크립트를 생성합니다.
  2. 패스워드 입력 없이 스크립트를 실행할 수 있으므로 환경 변수 $VESTA/tmp로 overwrite 합니다.
  3. v-list-user를 실행하면, root 권한을 획득할 수 있습니다.