Node inspector/CEF debug abuse
Last updated
Last updated
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Belgelerden: --inspect
anahtarı ile başlatıldığında, bir Node.js süreci bir hata ayıklama istemcisini dinler. Varsayılan olarak, 127.0.0.1:9229
adresinde dinleyecektir. Her sürece de benzersiz bir UUID atanır.
İnspektör istemcileri, bağlanmak için host adresini, portu ve UUID'yi bilmek ve belirtmek zorundadır. Tam bir URL şöyle görünecektir: ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e
.
Hata ayıklayıcı, Node.js yürütme ortamına tam erişime sahip olduğundan, bu porta bağlanabilen kötü niyetli bir aktör, Node.js süreci adına rastgele kod çalıştırma yeteneğine sahip olabilir (potansiyel ayrıcalık yükseltme).
Bir inspektörü başlatmanın birkaç yolu vardır:
When you start an inspected process something like this will appear: Bir denetlenen işlem başlattığınızda, şöyle bir şey görünecektir:
Processes based on CEF (Chromium Embedded Framework) gibi, debugger'ı açmak için --remote-debugging-port=9222
parametresini kullanmaları gerekir (SSRF korumaları çok benzer kalır). Ancak, NodeJS debug oturumu vermek yerine, tarayıcı ile Chrome DevTools Protocol kullanarak iletişim kuracaklardır, bu tarayıcıyı kontrol etmek için bir arayüzdür, ancak doğrudan bir RCE yoktur.
Bir debug edilmiş tarayıcı başlattığınızda, şöyle bir şey görünecektir:
Bir web tarayıcısında açılan web siteleri, tarayıcı güvenlik modeli altında WebSocket ve HTTP istekleri yapabilir. Benzersiz bir hata ayıklayıcı oturum kimliği edinmek için ilk bir HTTP bağlantısı gereklidir. Aynı köken politikası, web sitelerinin bu HTTP bağlantısını yapmasını engeller. DNS yeniden bağlama saldırılarına** karşı ek güvenlik için,** Node.js, bağlantı için 'Host' başlıklarının ya bir IP adresi ya da localhost
veya localhost6
olarak tam olarak belirtildiğini doğrular.
Bu güvenlik önlemleri, sadece bir HTTP isteği göndererek kod çalıştırmak için denetleyiciyi istismar etmeyi engeller (bu, bir SSRF açığını istismar ederek yapılabilir).
Çalışan bir nodejs sürecine SIGUSR1 sinyalini göndererek, denetleyiciyi varsayılan portta başlatmasını sağlayabilirsiniz. Ancak, yeterli ayrıcalıklara sahip olmanız gerektiğini unutmayın, bu nedenle bu, size süreç içindeki bilgilere ayrıcalıklı erişim sağlayabilir ama doğrudan bir ayrıcalık yükseltmesi sağlamaz.
Bu, konteynerlerde faydalıdır çünkü süreci kapatıp yeni bir tane başlatmak --inspect
ile bir seçenek değildir çünkü konteyner sürekle birlikte öldürülecektir.
Chromium tabanlı bir tarayıcıya bağlanmak için, Chrome veya Edge için sırasıyla chrome://inspect
veya edge://inspect
URL'leri erişilebilir. Yapılandırma düğmesine tıklanarak hedef ana bilgisayar ve port bilgilerin doğru listelendiğinden emin olunmalıdır. Görüntü, Uzaktan Kod Yürütme (RCE) örneğini göstermektedir:
Komut satırı kullanarak bir hata ayıklayıcıya/denetleyiciye şu şekilde bağlanabilirsiniz:
Aracın https://github.com/taviso/cefdebug, yerel olarak çalışan denetleyicileri bulmayı ve onlara kod enjekte etmeyi sağlar.
Not edin ki NodeJS RCE istismarları Chrome DevTools Protocol üzerinden bir tarayıcıya bağlı olduğunda çalışmayacaktır (bununla ilgili ilginç şeyler bulmak için API'yi kontrol etmeniz gerekir).
Eğer buraya Electron'da bir XSS'den RCE nasıl alınır diye bakmak için geldiyseniz, lütfen bu sayfayı kontrol edin.
Node denetleyici'ye bağlandığınızda RCE elde etmenin bazı yaygın yolları, (bu Chrome DevTools protokolüne bağlantıda çalışmayacak gibi görünüyor):
API'yi burada kontrol edebilirsiniz: https://chromedevtools.github.io/devtools-protocol/ Bu bölümde, bu protokolü istismar etmek için insanların kullandığı ilginç şeyleri listeleyeceğim.
CVE-2021-38112 Rhino güvenliği, CEF tabanlı bir uygulamanın sistemde özel bir URI (workspaces://) kaydettiğini ve tam URI'yi aldığı ve ardından bu URI'den kısmen yapılandırılan bir konfigürasyonla CEF tabanlı uygulamayı başlattığını keşfetti.
URI parametrelerinin URL çözümlemesi yapıldığı ve CEF temel uygulamasını başlatmak için kullanıldığı, kullanıcının --gpu-launcher
bayrağını komut satırına enjekte etmesine ve rastgele şeyler çalıştırmasına olanak tanıdığı keşfedildi.
Yani, şöyle bir yük:
Will execute a calc.exe.
İndirilen dosyaların kaydedileceği klasörü değiştirin ve uygulamanın sık kullanılan kaynak kodunu kötü niyetli kodunuzla üzerine yazmak için bir dosya indirin.
Bu gönderiye göre: https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148 RCE elde etmek ve iç sayfaları theriver'dan exfiltrate etmek mümkündür.
Gerçek bir ortamda ve bir kullanıcı PC'sini ele geçirdikten sonra Chrome/Chromium tabanlı bir tarayıcı kullanan, hata ayıklama etkinleştirilmiş ve hata ayıklama portunu yönlendirilmiş bir Chrome süreci başlatabilirsiniz. Bu şekilde, kurbanın Chrome ile yaptığı her şeyi inceleyebilir ve hassas bilgileri çalabilirsiniz.
Gizli yol, her Chrome sürecini sonlandırmak ve ardından şöyle bir şey çağırmaktır:
AWS Hacking öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Ekip Uzmanı (ARTE) GCP Hacking öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Ekip Uzmanı (GRTE)