Electron contextIsolation RCE via preload code
Приклад 1
Цей код відкриває http(s) посилання у браузері за замовчуванням:
Щось на зразок file:///C:/Windows/systemd32/calc.exe
може бути використано для запуску калькулятора, але SAFE_PROTOCOLS.indexOf
цьому заважає.
Отже, зловмисник може впровадити цей JS-код через XSS або довільну навігацію сторінками:
Оскільки виклик SAFE_PROTOCOLS.indexOf
завжди повертає 1337, зловмисник може обійти захист та виконати калькулятор. Кінцевий експлойт:
Перевірте оригінальні слайди для інших способів виконання програм без запиту на дозвіл.
Здається, інший спосіб завантаження та виконання коду - це доступ до чогось на зразок file://127.0.0.1/electron/rce.jar
Приклад 2: RCE додатку Discord
Приклад з https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1
Під час перевірки скриптів попереднього завантаження я виявив, що Discord викриває функцію, яка дозволяє викликати деякі дозволені модулі через DiscordNative.nativeModules.requireModule('MODULE-NAME')
, на веб-сторінці.
Тут я не міг використовувати модулі, які можуть бути використані для RCE безпосередньо, такі як модуль child_process, але я знайшов код, де RCE можливо досягти, перевизначаючи вбудовані методи JavaScript та втручаючись у виконання викритого модуля.
Наведений нижче PoC. Я підтвердив, що додаток calc з'являється при виклику функції getGPUDriverVersions
, яка визначена в модулі з назвою "discord_utils" з devTools, тоді як перевизначаючи RegExp.prototype.test
та Array.prototype.join
.
Функція getGPUDriverVersions
намагається виконати програму, використовуючи бібліотеку "execa", наступним чином:
Зазвичай execa намагається виконати "nvidia-smi.exe", який вказаний у змінній nvidiaSmiPath
, однак через перевизначення RegExp.prototype.test
та Array.prototype.join
, аргумент замінюється на "calc" у внутрішній обробці _execa_**.
Зокрема, аргумент замінюється шляхом зміни наступних двох частин.
Last updated