Найти тему
Ф

Уязвимости СЭД Detrix - бесплатной программы автоматизации документооборота

Оглавление

В этой статье пойдет речь о уязвимостях в СЭД "Detrix", найденных мной во время тестирования на проникновения одного из заказчиков.

«Detrix» — Бесплатная программа автоматизации документооборота. Казахстанская разработка от основателя СЭД «Documentolog» Андрея Сурова. СЭД написана на языке PHP и по заявлению автора основана на исходном коде «Documentolog» версии 3.  

Судя по ныне заброшенному форуму (forum.detrix.kz) у программы когда-то было большое сообщество, и она была популярна за свою бесплатность и продвинутый функционал.

Официальная поддержка продукта прекращена минимум два года назад, но компании в Казахстане, России и даже на Украине продолжают её использовать. Так, по данным специализированных поисковиков за 2019 год (FOFA, BinaryEdge), таких компаний не менее двадцати, и это только те компании, которые опрометчиво выставили свой документооборот во внешнюю сеть и были проиндексированы поисковиками.

-2

Мы оповестили все компании, которые удалось идентифицировать, о проблемах с СЭД Detrix. Что касается остальных – будем надеяться, что производитель проявит инициативу и оповестит пользователей доступными ему способами.

УЯЗВИМОСТИ

В результате анализа было обнаружено несколько уязвимостей разного уровня критичности. Результаты сведены в таблицу, а подробное описание приведено ниже.

Найденные уязвимости
Найденные уязвимости

SQL-Инъекция

Этот класс уязвимостей, по данным OWASP, является самым опасным и самым распространенным для веб-приложений и Detrix не стал исключением.

При получении данных авторизации от пользователя, передаваемым в параметре “login” нет никакой фильтрации полученных данных. И данные, полученные от пользователя, передается прямиком в SQL-запрос к базе данных, предоставляя тем самым злоумышленнику создавать свои запросы.

Самым простым способом проверки на наличие уязвимости этого типа, является подстановка одинарной кавычки вместо обычных данных. Detrix услужливо выдаст нам диагностическое сообщение вместе с самим SQL-запросом.

Ошибка обработки запроса
Ошибка обработки запроса

Эту уязвимость можно использовать, например для получения пароля пользователя. Вот пример HTTP запроса:

POST / HTTP/1.1
Host: detrix.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 42
Connection: close
login=login%27+AND+99%3DCAST%28%27a__%27%7C%7C%28SELECT+COALESCE%28CAST%28password+AS+CHARACTER%2810000%29%29%2C%28CHR%2832%29%29%29++FROM+manuscript.ref_system_users+ORDER+BY+id+OFFSET+0+LIMIT+1%29%3A%3Atext%7C%7C%27__a%27+AS+NUMERIC%29+AND+%27a%27%3D%27a&password=

Послав этот запрос веб-серверу, на котором расположен Detrix мы получим пароль пользователя с индексом 0 – администратора системы.

Зашифрованный пароль пользователя
Зашифрованный пароль пользователя

Пароль пользователя зашифрован, но это не станет проблемой благодаря уязвимостям, описанным ниже.

Для подтверждения уязвимости был создан эксплойт, позволяющий получить пароль любого пользователя Detrix в открытом виде:

https://github.com/sadshade/Detrix-Passwords-PoC

Хранение паролей в восстанавливаемом формате

Для начала разберемся, что же это значит «Хранение паролей в восстанавливаемом формате». Для этого необходимо узнать немного о типах шифрования, используемых при построении веб-приложений.

Хеш-функция или хеширование – преобразования данных по определенному алгоритму, результатом которого является хэш-код (хэш-сумма). Проще говоря, такое преобразование работает только в одну сторону и исходную строку нельзя узнать имею хэш-сумму.

Это является распространенной практикой при работе с парольными фразами. PBKDF2, BCrypt и SCrypt являются рекомендованными алгоритмами для хеширования паролей.

Симметричное шифрование - способ шифрования, в котором для шифрования и расшифровывания применяется один и тот же криптографический ключ (wiki). Проще говоря, зная ключ шифрования можно получить исходную строку пароля. Ключ шифрования, криптографический ключ, секретная фраза, смысл один – хранить нужно в секрете.

В случае СЭД Detrix используется алгоритм симметричного шифрования Blowfish.

Таким образом, для корректной работы с паролями пользователей приложению необходимо постоянно иметь этот ключ. Узнав этот ключ, злоумышленник может легко расшифровать все пароли пользователей этого приложения.

Использование жестко-закодированных паролей

Хранение паролей в исходном коде, использующихся для авторизации либо шифрования, является плохой практикой. Этими паролями могут завладеть злоумышленники, а у администратора системы не будет возможности их сменить. Чаще всего администраторы даже не подозревают о наличии таких проблем. В случае со скриптовыми языками, такими как PHP, исходный код может быть доступен администратору и этот пароль можно будет сменить. А если это ключ шифрования, которым шифруются данные в базе? Этот ключ уже не сменишь, не зашифровав все данные заново.

В случае с СЭД Detrix пароль для шифрования парольных фраз пользователей хранится в исходном коде. Упоминания о том, что этот ключ хранится где-то в недрах программы нет. И по умолчанию все пароли: пароль пользователя, пароль для подключения к SMTP и POP3 шифруются одним и тем же ключом для всех копий Detrix, которые когда-либо устанавливались!

Ключ для дешифровки находится в файле system/utils/MSF_string.php в переменной с говорящим названием «sSuperDuperSecretKey».

Ключ шифрования
Ключ шифрования

Ключ очень сложный, но секретная фраза на то и секретная, чтобы ее не разглашать. С распространением ее в исходном коде вся секретность испаряется. Яркий пример тому MS14-025 хранение паролей в групповых политиках Active Directory.

Для демонстрации концепта была написана небольшая программа, исходный код которой доступен по ссылке:

https://github.com/sadshade/Detrix-Passwords-PoC

Таким образом, сложив вместе эти три уязвимости, обладая определенными знаниями и навыками, можно добыть все пароли пользователей открытым текстом.

Раскрытие данных

Составив HTTP-запрос определенным образом, злоумышленник может получить доступ к важным данным.

Так выглядит обычный запрос HTTP:

GET / HTTP/1.1
Host: detrix.example.com
User-Agent: Mozilla/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Connection: close

Изменив его следующим образом, в приложении возникнет исключительная ситуация (изменения отмечены красным):

GET /
HTTP/1.1
Host: detrix.example.com
User-Agent: Mozilla/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Connection: close

В выводе информации об ошибке можно увидеть много полезных данных, в том числе пароль администратора:

Раскрытие данных
Раскрытие данных

Хранение паролей открытым текстом

Злоумышленник получивший доступ к базе данных может прочитать конфигурационный файл, в котором хранятся учетные данные для доступа к серверу баз данных, подключения к LDAP (если настроено) и интеграции по протоколу SOAP.

Локальный файл конфигурации хранится на сервере в файле “settings.xml”, в тоже время его копия в формате JSON хранится в БД в таблице «sys_cache».

Использование компонентов с известными уязвимостями

В составе приложения есть своя копия набора библиотек для PHP – PEAR версии 1.4.11. Эта версия имеет известные уязвимости: CVE-2011-1144 и CVE-2011-1072

Межсайтовая подделка запроса (CSRF)

Злоумышленник, заманивший жертву на подконтрольный ему сайт, может от его лица тайно отправить запрос на сайт с СЭД Detrix.

Например, администратор системы авторизовался в СЭД Detrix, а после перешел на сайт злоумышленника, то в такой ситуации возможно выполнять действия от лица администратора. Например, создать в системе еще одного администратора с известным паролем, для последующего использования злоумышленником.

Демонстрация описанного примера доступна в видео по ссылке https://youtu.be/FMHo_llF3Wg

РЕКОМЕНДАЦИИ И МЕРЫ ПРОТИВОДЕЙСТВИЯ

Закрытие уязвимостей

На данный момент производитель полностью прекратил поддержку ПО и вероятнее всего исправлений не будет. По крайней мере об этом можно судить по реакции производителя.

Поэтому есть несколько вариантов решения проблем с устаревшим ПО:

  • Вариант первый - мигрировать на новый продукт от того-же производителя – «Documentov». Информация доступна на сайте www.documentov.com.
  • Вариант второй - в частном порядке договориться с производителем об исправлении.
  • Вариант третий - исправить код самостоятельно или с привлечение специалиста.
  • Вариант четвертый - мигрировать на продукт другого производителя.

Снижение рисков

Для снижения рисков компрометации есть несколько рекомендаций.

Ограничение доступа

Если ваше приложение опубликовано во внешнюю сеть, это многократно повышает риск компрометации. Рекомендуется переместить приложение во внутреннюю сеть, а удаленным пользователя предоставлять доступ используя VPN

Защита сторонними средствами

Для защиты веб-приложений рекомендуется использовать решения класса Web Application Firewall (WAF). Решения этого класса способны защитить веб-приложение от большинства уязвимостей, при грамотной настройке. Существуют как платные коммерческие решения, так и бесплатные с открытым и закрытым исходном кодом.

Коммерческие WAF:

  • Positive Technologies Application Firewall
  • Citrix NetScaler Web Application Firewall (AppFirewall)
  • F5 BIG-IP 10050S Application Security Manager (ASM)
  • Radware AppWall
  • Symantec Blue Coat ProxySG

Так же существуют бесплатные решения:

  • ModSecurity
  • IronBee
  • NAXSI
  • WebKnight
  • Shadow Daemon

РЕАКЦИЯ ПРОИЗВОДИТЕЛЯ

Производитель ПО не выказал интереса к найденным уязвимостям ввиду окончания поддержки продукта. Поэтому ждать официальных исправлений не стоит.

ПРИЗНАКИ КОМПРОМЕТАЦИИ

Если вы хотите узнать скомпрометировано ли ваше приложение вам необходимо проанализировать журналы в самом СЭД Detrix. Сделать это можно перейдя в меню Администрирование > Журнал событий. Там можно проверить на наличие подозрительной активности.

Так же можно проверить журналы ошибок приложения, которые по умолчанию расположены в директории var/logs в папке с Detrix.

Наличие похожих записей говорит о попытке SQL-Инъекции:

Журнал Detrix
Журнал Detrix

В журналах веб-сервера также может быть полезная информация. В ОС семейства Linux они расположены в директории /var/log/apache2/.

В случае компрометации необходимо провести проверку всех смежных систем, информацию к которой злоумышленники могли получить. Также следует сменить пароли пользователей в других системах и ПО. Как показывает практика, пользователи очень часть используют один и тот же пароль там, где это возможно.

Константин Буров, 2019