Node inspector/CEF debug abuse
Temel Bilgiler
Dökümantasyondan: Bir Node.js işlemi --inspect
anahtarıyla başlatıldığında, bir hata ayıklama istemcisi dinler. Varsayılan olarak, host ve port 127.0.0.1:9229
adresinde dinleyecektir. Her işleme ayrıca benzersiz bir UUID atanır.
İnceleyici istemcilerin bağlanmak için host adresini, portu ve UUID'yi bilmeleri ve belirtmeleri gerekir. Tam bir URL şuna benzer bir şey olacaktır: ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e
.
Hata ayıklama aracının Node.js yürütme ortamına tam erişimi olduğundan, bu porta bağlanabilen kötü niyetli bir aktör, Node.js işlemi adına keyfi kodları yürütebilir (potansiyel ayrıcalık yükseltme).
İnceleyiciyi başlatmanın birkaç yolu vardır:
İncelenen bir işlem başlatıldığında şöyle bir şey görünecektir:
CEF (Chromium Embedded Framework) gibi CEF tabanlı işlemler, hata ayıklama aracını açmak için --remote-debugging-port=9222
parametresini kullanmalıdır (SSRF korumaları oldukça benzer kalır). Bununla birlikte, NodeJS hata ayıklama oturumu vermek yerine tarayıcı ile iletişim kurmak için Chrome DevTools Protocol kullanırlar, bu tarayıcıyı kontrol etmek için bir arayüzdür, ancak doğrudan bir RCE yoktur.
Hata ayıklanan bir tarayıcı başlattığınızda şöyle bir şey görünecektir:
Tarayıcılar, WebSoketler ve aynı köken politikası
Web siteleri bir web tarayıcısında WebSocket ve HTTP istekleri yapabilirler tarayıcı güvenlik modeli altında. Benzersiz bir hata ayıklayıcı oturum kimliği almak için başlangıçta 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
ya da localhost6
belirtmesini doğrular.
Bu güvenlik önlemleri, denetleyiciyi istismar etmeyi ve yalnızca bir HTTP isteği göndererek kod çalıştırmayı (bu, bir SSRF zafiyetini istismar etmek suretiyle yapılabilir) engeller.
Çalışan işlemlerde denetleyiciyi başlatma
Bir nodejs işlemine SINYAL SIGUSR1 gönderebilirsiniz ve bu işlemi varsayılan bağlantı noktasında denetleyiciyi başlatır. Ancak, yeterli ayrıcalığa sahip olmanız gerektiğini unutmayın, bu nedenle bu size işlem içindeki bilgilere öncelikli erişim sağlayabilir ancak doğrudan bir ayrıcalık yükseltme sağlamaz.
Bu, işlemi durdurup yeni bir tane başlatmak --inspect
ile bir seçenek olmadığı için konteynerlerde kullanışlıdır çünkü konteyner işlemle birlikte sonlandırılacaktır.
Denetleyiciye/hata ayıklayıcıya bağlanma
Bir Chromium tabanlı tarayıcıya bağlanmak için, sırasıyla Chrome veya Edge için chrome://inspect
veya edge://inspect
URL'lerine erişilebilir. Hedef ana bilgisayar ve bağlantı noktasının doğru bir şekilde listelendiğinden emin olmak için Yapılandır düğmesine tıklanmalıdır. Resim, Uzaktan Kod Yürütme (RCE) örneğini göstermektedir:
Komut satırı kullanılarak bir hata ayıklayıcıya/denetleyiciye bağlanabilirsiniz:
The tool https://github.com/taviso/cefdebug, yerel olarak çalışan denetleyicileri bulmayı ve bunlara kod enjekte etmeyi sağlar.
NodeJS RCE saldırıları, bir tarayıcıya Chrome DevTools Protocol aracılığıyla bağlandığınızda çalışmayacaktır (ilginç şeyler yapmak için API'yi kontrol etmeniz gerekmektedir).
NodeJS Hata Ayıklayıcı/İnceleyici'de Uzaktan Kod Çalıştırma
Eğer Electron'da XSS ile RCE almayı arıyorsanız, lütfen bu sayfaya bakınız.
Bir Node inceleyicine bağlandığınızda RCE elde etmenin bazı yaygın yolları şunları içerir (görünüşe göre bu, Chrome DevTools protokolüne bağlı bir bağlantıda çalışmayacaktır):
Chrome DevTools Protocol Payloads
API'yi buradan kontrol edebilirsiniz: https://chromedevtools.github.io/devtools-protocol/ Bu bölümde, bu protokolü kötüye kullanmak için insanların kullandığı ilginç şeyleri listeleyeceğim.
Derin Bağlantılar Aracılığıyla Parametre Enjeksiyonu
CVE-2021-38112 Rhino Security, CEF tabanlı bir uygulamanın sistemde özel bir URI (workspaces://) kaydettiğini keşfetti ve ardından tam URI'yi alan ve ardından o URI'den kısmen oluşturulan bir yapılandırmayla CEF tabanlı uygulamayı başlattığını tespit etti.
URI parametrelerinin URL çözümlendiği ve CEF temel uygulamasını başlatmak için kullanıldığı keşfedildi, bu da bir kullanıcının komut satırına bayrak --gpu-launcher
enjekte etmesine ve keyfi şeyler yürütmesine olanak tanıdı.
Bu nedenle, şu gibi bir yük:
Dosya Üzerine Yazma
İndirilen dosyaların kaydedileceği klasörü değiştirin ve sıkça kullanılan uygulamanın kaynak kodunu kötü amaçlı kodunuzla üzerine yazacak bir dosya indirin.
Webdriver RCE ve veri sızdırma
Bu yazıya göre: https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148 RCE elde etmek ve theriver'dan iç sayfaları sızdırmak mümkündür.
Saldırı Sonrası
Gerçek bir ortamda ve bir kullanıcının Chrome/Chromium tabanlı tarayıcı kullanan bir PC'sini ele geçirdikten sonra, Chrome işlemi başlatabilir ve hata ayıklama etkinleştirilmiş ve hata ayıklama bağlantı noktasını yönlendirerek hata ayıklama bağlantı noktasına erişebilirsiniz. Bu şekilde kurbanın Chrome'da yaptığı her şeyi inceleyebilir ve hassas bilgileri çalabilirsiniz.
Gizlilik sağlayan yol, her Chrome işlemini sonlandırmak ve ardından şuna benzer bir şey çağırmaktır:
Referanslar
Last updated