Объясненные эксплойты: поиск недостатков в программном средстве для банкоматов

Carding

Professional
Messages
2,831
Reputation
17
Reaction score
2,017
Points
113
Уязвимости CVE-2023-33871, CVE-2023-38257, CVE-2023-35763 и CVE-2023-35189 были обнаружены членами Synack Red Team (SRT) Нилом Грейвсом, Джорианом ван ден Хаутом и Малкольмом Стэггом в начале 2023 года. Французская компания-разработчик программного обеспечения Iagona исправила их в июле 2023 года с версией 2.1.38 своего веб-приложения ScrutisWeb.

Являясь частью Synack Red Team (SRT) глобальной сети исследователей безопасности, я регулярно нахожу уязвимости в инфраструктуре клиентов Synack и веб-серверах. При выполнении некоторых задач Synack участникам SRT разрешается сотрудничать, максимально используя наш широкий набор навыков.

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

По словам его разработчика Iagona, ScrutisWeb доступен из любого браузера и помогает организациям по всему миру отслеживать банкоматы и сокращать время отклика в случае возникновения проблем........... Парк банкоматов может включать в себя чувствительное оборудование, такое как автоматы для сдачи чеков, а также платежные терминалы в сети ресторанов.

ScrutisWeb обладает множеством возможностей:
  • Перезагрузка или завершение работы терминала или всего парка
  • Получение информации о банковских услугах
  • Мониторинг устройства считывания банковских карт (банкоматов)
  • Отправка и получение файлов (в банкоматы)
  • Удаленное изменение данных (в банкоматах)

Перечисление целей
Клиент Synack в этом задании имел более 1000 уникальных IP-адресов для оценки. Во время первоначальной разведки мы заметили, что веб-сервер отправляет посетителям исключительно большой файл JavaScript размером 23 МБ.

Мы обнаружили в файле функцию, которая позволяет клиенту загружать полные пути в webroot сервера:

Code:
this.window.location.href = "/Download.aspx?folder=" + name;

Мы определили, что указание имени папки “/” приводит к тому, что ScrutisWeb сжимает весь веб-корень и отправляет его в браузер в качестве загрузки. Мы использовали эту функцию в том качестве, в котором она была разработана, для загрузки webroot. При проверке Download.aspx мы обнаружили, что она вызывает библиотеку “Scrutis.Front.dll ”, который, по-видимому, обрабатывает большинство пользовательских функций.

CVE-2023-33871: абсолютный обход пути
Мы заметили, что “Download.aspx” принимает параметр либо “файл”, либо “папка”. Мы увидели, что делает “папка”, это здорово, но мы быстро переключились на действительно интересную часть - строку, которая обрабатывает загрузку отдельных файлов:

Code:
str = !path1.Contains(":") ? this.Server.MapPath(path1) : path1;

В этом фрагменте кода рассматривается переменная “path1”, которая передается методу в качестве параметра URL ”file". Мы обнаружили, что если параметр не содержит двоеточия, веб-сервер вернет файл в соответствии с веб-корнем, например “https://example.com/Download.aspx?file=thisfile.txt” загрузит файл, расположенный по адресу “https://example.com/thisfile.txt”. Однако веб-сервер вернул файл с двоеточием относительно системы, например: “https://www.example.com/Download.aspx?file=c:\file.txt” загрузил бы файл, расположенный на сервере по адресу “c:\file.txt”. Успех! Мы смогли загрузить конфигурации, журналы и базы данных с сервера.

CVE-2023-35189: удаленное выполнение кода
Дальнейшее изучение Scrutis.Front.dll показала метод addFile(). addFile() приняла запрос POST, состоящий из нескольких частей, и сохранила загруженный файл в веб-каталоге “/Files/telechar/”.

Это означало, что пользователь, не прошедший проверку подлинности, мог загрузить любой файл, а затем снова просмотреть его в веб-браузере. Одна из многих проблем заключается в том, что каталог, в котором в конечном итоге размещался загруженный файл, был настроен так, чтобы разрешать интерпретацию и выполнение загруженных сценариев. Мы создали proof of concept (poc.asp), который запускает простую команду “ipconfig / all” и загрузили ее на сервер. После этого мы посетили веб-сайт по адресу “https://[отредактировано]/poc.asp”, и сервер выполнил системную команду “ipconfig / all” и вернул ответ. Успех! Внедрение команды.

Обычно можно было бы ожидать, что RCE станет кульминацией цепочки эксплойтов. В этом случае еще большей вредоносной ценности можно достичь, используя оставшиеся уязвимости для получения доступа пользователя к контроллеру банкомата. Каждый из уязвимых вызовов может быть найден в Scrutis.Front.dll и использоваться без аутентификации.

CVE-2023-38257: Небезопасная прямая ссылка на объект
Мы обнаружили, что прототип метода GetUserDetails принимает одно целое число в качестве входных данных для HTTP-запроса POST.

Code:
[HttpPost]

    public UIUser GetUserDetails([FromBody] int idUser)

Мы заметили, что параметр idUser представляет собой последовательное целое значение, начинающееся с цифры 1. Отправив сообщение с номером 1 этой функции, сервис вернул информацию о пользователе “administrateur”, включая зашифрованный пароль. Успех! Произошла утечка информации об учетных записях всех пользователей в системе.

Жестко заданный ключ шифрования CVE-2023-35763
Поскольку пароль был явно зашифрован, мы решили попробовать перепроектировать механизм шифрования. Поиск в названиях методов по слову “crypt” показал функцию decrypt, которая принимает зашифрованный текст в качестве входных данных и возвращает строку открытого текста UTF8. Мы обнаружили, что функция включает строку, раскрывающую строку открытого текста, которая используется в качестве ключа шифрования для шифрования / дешифрования паролей пользователей:

public static string Decrypt(string cipherString, bool useHashing)

Code:
{

...

        numArray = cryptoServiceProvider.ComputeHash(Encoding.UTF8.GetBytes("ENCRYPTIONKEY"));

...

return Encoding.UTF8.GetString(bytes);

    }

Мы написали простой скрипт на python, который использует зашифрованный пароль, обнаруженный с помощью CVE-2023-38257, и расшифровывает пароль в виде открытого текста. Успех! Учетные данные администратора открытого текста. На этом этапе мы смогли войти в ScrutisWeb как администратор.

Влияние
Хотя CVE-2023-33871 описывает уязвимость при доступе к файлам за пределами webroot, именно эта функциональность позволила нам загрузить веб-приложение для проверки. CVE-2023-38257 и CVE-2023-35763 позволяют входить в консоль управления ScrutisWeb в качестве администратора. Отсюда злоумышленник сможет отслеживать действия на отдельных банкоматах в парке. Консоль также позволяет переводить банкоматы в режим управления, загружать в них файлы, перезагружать их и полностью отключать питание. Потребуется дальнейшее изучение, чтобы определить, можно ли загружать пользовательское программное обеспечение в отдельные банкоматы для выполнения эксфильтрации банковских карт, перенаправления Swift-переводов или других вредоносных действий. Однако такое дополнительное тестирование выходило за рамки оценки.

Наконец, CVE-2023-35189 можно использовать для очистки журналов на ScrutisWeb и удаления доказательств того, что там когда-либо был злоумышленник. Может произойти дополнительное использование этого узла в инфраструктуре клиента, что сделает его ориентиром для злоумышленника, ориентированного на Интернет.

Исправление уязвимостей
Обновите ScrutisWeb до версии 2.1.38!

Iagona очень серьезно относится к безопасности и оперативно смягчила четыре вывода, информируя исследователей о прогрессе. Мы хотели бы выразить особую благодарность Брэндону Тарру за координацию через Агентство кибербезопасности и инфраструктурной безопасности, которое выпустило собственную рекомендацию о рисках, связанных с этими недостатками программного обеспечения.

(с) Нил Грейвс
 
Top