[하루한줄] 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로 권한 상승하는 방법은 다음과 같습니다.
- v-list-user 스크립트에
source $VESTA/func/main.sh
가 존재하므로/tmp/func
폴더에/bin/bash
쉘 스크립트를 생성합니다. - 패스워드 입력 없이 스크립트를 실행할 수 있으므로 환경 변수
$VESTA
를/tmp
로 overwrite 합니다. - v-list-user를 실행하면, root 권한을 획득할 수 있습니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.