macOS Electron Applications Injection
Last updated
Last updated
Вивчайте та практикуйте хакінг AWS: Навчання HackTricks AWS Red Team Expert (ARTE) Вивчайте та практикуйте хакінг GCP: Навчання HackTricks GCP Red Team Expert (GRTE)
Якщо ви не знаєте, що таке Electron, ви можете знайти багато інформації тут. Але наразі просто знайте, що Electron запускає node. І у node є деякі параметри та змінні середовища, які можна використовувати для виконання іншого коду, крім вказаного файлу.
Ці техніки будуть обговорені далі, але останнім часом Electron додав кілька прапорців безпеки для їх запобігання. Це Електронні плавки, які використовуються для запобігання додаткам Electron в macOS від завантаження довільного коду:
RunAsNode
: Якщо відключено, це запобігає використанню змінної середовища ELECTRON_RUN_AS_NODE
для впровадження коду.
EnableNodeCliInspectArguments
: Якщо відключено, параметри, такі як --inspect
, --inspect-brk
, не будуть враховуватися. Цим способом уникнуто впровадження коду.
EnableEmbeddedAsarIntegrityValidation
: Якщо ввімкнено, завантажений asar
файл буде перевірений macOS. Таким чином запобігається впровадженню коду шляхом зміни вмісту цього файлу.
OnlyLoadAppFromAsar
: Якщо це ввімкнено, замість пошуку для завантаження в такому порядку: app.asar
, app
і, нарешті, default_app.asar
. Він буде перевіряти та використовувати лише app.asar, тим самим забезпечуючи, що при комбінуванні з плавкою embeddedAsarIntegrityValidation
неможливо завантажити неперевірений код.
LoadBrowserProcessSpecificV8Snapshot
: Якщо ввімкнено, процес браузера використовує файл з назвою browser_v8_context_snapshot.bin
для свого знімка V8.
Ще одна цікава плавка, яка не буде запобігати впровадженню коду:
EnableCookieEncryption: Якщо ввімкнено, сховище файлів cookie на диску шифрується за допомогою ключів криптографії рівня ОС.
Ви можете перевірити ці прапорці з додатка за допомогою:
Як зазначено в документації, конфігурація Електронних Плавок налаштовується всередині бінарного файлу Електрона, який містить десь рядок dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX
.
У додатках для macOS це зазвичай знаходиться в application.app/Contents/Frameworks/Electron Framework.framework/Electron Framework
Ви можете завантажити цей файл на https://hexed.it/ та знайти попередній рядок. Після цього рядка ви можете побачити у коду ASCII число "0" або "1", що вказує, чи вимкнені або увімкнені кожен плавник. Просто змініть шістнадцятковий код (0x30
- це 0
, а 0x31
- це 1
) для зміни значень плавників.
Зверніть увагу, що якщо ви спробуєте перезаписати бінарний файл Electron Framework всередині додатка зі зміненими байтами, додаток не запуститься.
Можуть бути зовнішні файли JS/HTML, які використовує додаток Electron, тому зловмисник може впровадити код у ці файли, підпис яких не буде перевірений, та виконати довільний код в контексті додатка.
Однак на даний момент є 2 обмеження:
Для модифікації додатка потрібно дозвіл kTCCServiceSystemPolicyAppBundles
, тому за замовчуванням це більше не можливо.
Скомпільований файл asap
зазвичай має плавники embeddedAsarIntegrityValidation
та onlyLoadAppFromAsar
, які увімкнені
Це ускладнює (або робить неможливим) цей шлях атаки.
Зверніть увагу, що можливо обійти вимогу kTCCServiceSystemPolicyAppBundles
, скопіювавши додаток в інший каталог (наприклад, /tmp
), перейменувавши папку app.app/Contents
на app.app/NotCon
, змінивши файл asar за вашим зловмисним кодом, знову перейменувавши його на app.app/Contents
та виконавши його.
Ви можете розпакувати код з файлу asar за допомогою:
І запакуйте його назад після внесення змін за допомогою:
ELECTRON_RUN_AS_NODE
Згідно з документацією, якщо ця змінна середовища встановлена, вона запустить процес як звичайний процес Node.js.
Якщо функція RunAsNode
вимкнена, змінна середовища ELECTRON_RUN_AS_NODE
буде ігноруватися, і це не спрацює.
Як було запропоновано тут, ви можете зловживати цією змінною середовища в plist для збереження постійності:
NODE_OPTIONS
Ви можете зберегти вразливість у різному файлі та виконати її:
Якщо плавка EnableNodeOptionsEnvironmentVariable
вимкнена, додаток ігноруватиме змінну середовища NODE_OPTIONS при запуску, якщо змінна середовища ELECTRON_RUN_AS_NODE
не встановлена, що також буде ігноруватися, якщо плавка RunAsNode
вимкнена.
Якщо ви не встановите ELECTRON_RUN_AS_NODE
, ви отримаєте помилку: Більшість NODE_OPTIONs не підтримуються в упакованих додатках. Див. документацію для отримання додаткової інформації.
Ви можете зловживати цією змінною середовища в файлі Plist для збереження постійності, додавши ці ключі:
Згідно з цим, якщо ви запускаєте додаток Electron з прапорцями, такими як --inspect
, --inspect-brk
та --remote-debugging-port
, буде відкритий порт для налагодження, до якого ви зможете підключитися (наприклад, з Chrome за адресою chrome://inspect
) і ви зможете впроваджувати код в нього або навіть запускати нові процеси.
Наприклад:
Якщо плавник EnableNodeCliInspectArguments
вимкнено, додаток ігноруватиме параметри вузла (такі як --inspect
) при запуску, якщо змінна середовища ELECTRON_RUN_AS_NODE
не встановлена, яка також буде ігноруватися, якщо плавник RunAsNode
вимкнено.
Однак ви все ще можете використовувати параметр електрону --remote-debugging-port=9229
, але попередній вантаж не буде працювати для виконання інших процесів.
Використовуючи параметр --remote-debugging-port=9222
, можна вкрасти деяку інформацію з додатка Electron, таку як історію (з командами GET) або куки браузера (оскільки вони розшифровуються всередині браузера, і є кінцева точка json, яка їх надасть).
Ви можете дізнатися, як це зробити тут і тут та використовувати автоматичний інструмент WhiteChocolateMacademiaNut або простий скрипт, подібний до:
У цьому блозі, це використовується для виклику налагодження, щоб зробити headless chrome завантаження довільних файлів у довільні місця.
Ви можете використовувати цю змінну середовища в файлі plist для збереження постійності, додаючи ці ключі:
Демон TCC з macOS не перевіряє виконувану версію додатка. Тому, якщо ви не можете впровадити код в електронний додаток жодним із попередніх методів, ви можете завантажити попередню версію ДОДАТКА та впровадити код в нього, оскільки він все ще отримає привілеї TCC (якщо кеш довіри не запобігає цьому).
Попередні методи дозволять вам виконувати JS-код у процесі електронного додатка. Однак пам'ятайте, що дочірні процеси працюють під тим самим профілем пісочниці, що і батьківський додаток, та успадковують їх дозволи TCC. Отже, якщо ви хочете зловживати дозволами для доступу до камери або мікрофона, наприклад, ви можете просто запустити інший виконуваний файл з процесу.
Інструмент electroniz3r може бути легко використаний для пошуку вразливих електронних додатків, встановлених на комп'ютері, та впровадження коду в них. Цей інструмент спробує використати техніку --inspect
:
Вам потрібно скомпілювати його самостійно та використовувати його таким чином:
Вивчайте та практикуйте взлом AWS:Навчання HackTricks AWS Red Team Expert (ARTE) Вивчайте та практикуйте взлом GCP: Навчання HackTricks GCP Red Team Expert (GRTE)