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 şu şekilde 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ırabilir (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 elde etmek 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 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, şu anda işlemi kapatıp yeni bir tane başlatmak --inspect
ile bir seçenek olmadığı için konteynerlerde faydalıdır çünkü konteyner, işlemle 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 portun doğru bir şekilde listelendiğinden emin olunmalıdır. Görüntü, Uzaktan Kod Yürütme (RCE) örneğini göstermektedir:
Komut satırını kullanarak bir hata ayıklayıcıya/denetleyiciye şu şekilde bağlanabilirsiniz:
Araç 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 (onunla yapacak 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) bir şey kullanmaktır:
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 kodlaması yapılarak CEF temel uygulamasını başlatmak için kullanıldığı, bir kullanıcının komut satırında --gpu-launcher
bayrağını enjekte etmesine ve rastgele şeyler çalıştırmasına olanak tanıdığı keşfedildi.
Yani, şöyle bir yük:
calc.exe'yi çalıştıracak.
İ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ı Takım Uzmanı (ARTE) GCP Hacking öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)