Jenkins RCE Güvenlik Açığının (CVE-2024-43044) Aracılar Aracılığıyla Kullanılması


Jenkins RCE Güvenlik Açığı

Yaygın olarak kullanılan bir otomasyon sunucusu olan Jenkins’te kritik bir güvenlik açığı tespit edildi. Daha fazla istismar edilirse, bu güvenlik açığı saldırganların Jenkins denetleyicisinden keyfi dosyaları okumasına olanak tanır. Daha fazla istismar edilirse, potansiyel olarak uzaktan kod yürütmeye (RCE) dönüşebilir.

Sağladığınız bu makale Jenkins’deki bir güvenlik açığının, özellikle CVE-2024-43044’ün ayrıntılı bir teknik analizidir.

DÖRT

“Jenkins ekibi bir uyarı yayınladı (GÜVENLİK-3430 / CVE-2024-43044) bir aracının denetleyiciden dosyaları okuyabilmesine izin veren keyfi bir dosya okuma güvenlik açığı için. Bu, denetleyicinin JAR dosyalarını aracılara iletmesine izin veren bir özellik nedeniyle gerçekleşir.

Jenkins bir denetleyici/aracı mimarisinde çalışır. Denetleyici, yazılım oluşturma ve test etme gibi görevleri yürüten aracıları yönetir. Denetleyici ve aracılar arasındaki iletişim, Gelen (JNLP) veya SSH gibi protokolleri kullanarak Uzaktan Erişim/Hudson kütüphanesi tarafından kolaylaştırılır.

Sağladığınız belge Jenkins’teki bir güvenlik açığının, özellikle CVE-2024-43044’ün kapsamlı bir teknik analizidir. İşte paragraf biçimindeki temel noktaların bir özeti:

Teknik Analiz: Jenkins Güvenlik Açığı CVE-2024-43044

Güvenlik açığı (CVE-2024-43044), Jenkins aracılarının denetleyiciden keyfi dosyaları okumasına olanak tanır. Bu, ClassLoaderProxy#fetchJar Ajanların denetleyiciden talep edebileceği dosya yollarını kısıtlamayan yöntem.

Yazılım geliştirme görevlerini otomatikleştirmek için yaygın olarak kullanılan bir araç olan Jenkins’in, Jenkins aracılarının denetleyiciden keyfi dosyaları okumasına olanak tanıyan CVE-2024-43044 adlı kritik bir güvenlik açığını içerdiği tespit edildi.

Bu güvenlik açığı, bir kusurdan kaynaklanmaktadır ClassLoaderProxy#fetchJar aracıların denetleyiciden talep edebileceği dosya yollarını kısıtlamayan yöntem. Bu gözetim, bir saldırgan Jenkins aracısını ele geçirirse potansiyel olarak uzaktan kod yürütmeye (RCE) dönüşebilir.

// hudson.remoting.RemoteClassLoader$ClassLoaderProxy.fetchJar
public byte[] fetchJar(URL url) throws IOException {
    return Util.readFully(url.openStream());
}

Bu kod, erişim sağlamak için tasarlanmıştır hudson.remoting.RemoteClassLoaderbir iletişim kanalı aracılığıyla uzak bir eşten sınıf dosyalarını yüklemekten sorumlu bir sınıf. Kod özellikle bir Proxy nesne bulundu proxy alan RemoteClassLoader. Bununla ilişkili işleyici Proxy nesne bir örneğidir hudson.remoting.RemoteInvocationHandler.

private static class Exploit extends MasterToSlaveCallable {
    private final URL controllerFilePath;
    private final String expectedContent;
 
    public Exploit(URL controllerFilePath, String expectedContent) {
        this.controllerFilePath = controllerFilePath;
        this.expectedContent = expectedContent;
    }
    @Override
    public Void call() throws Exception {
        final ClassLoader ccl = Thread.currentThread().getContextClassLoader();
        final Field classLoaderProxyField = ccl.getClass().getDeclaredField("proxy");
        classLoaderProxyField.setAccessible(true);
        final Object theProxy = classLoaderProxyField.get(ccl);
        final Method fetchJarMethod = theProxy.getClass().getDeclaredMethod("fetchJar", URL.class);
        fetchJarMethod.setAccessible(true);
        final byte[] fetchJarResponse = (byte[]) fetchJarMethod.invoke(theProxy, controllerFilePath);
        assertThat(new String(fetchJarResponse, StandardCharsets.UTF_8), is(expectedContent));
        return null;
    }
}

Jenkins, denetleyicinin görevleri yürüten aracıları yönettiği bir denetleyici/aracı mimarisinde çalışır. Denetleyici ve aracılar arasındaki iletişim, Remoting/Hudson kütüphanesi tarafından kolaylaştırılır.

Bu güvenlik açığı, yetkisiz erişimi engellemek için tasarlanan Agent -> Controller Erişim Kontrol sistemini ajanların atlatmasına olanak sağlıyor.

Bu güvenlik açığı, yetkisiz bağlantılar kurmak veya çalışan bir Uzaktan Erişim sürecine bağlanmak için aracı sırlarını kullanma dahil olmak üzere çeşitli yöntemlerle istismar edilebilir.

Dikkat çekici istismar tekniklerinden biri, bir yönetici hesabı için “beni hatırla” çerezi oluşturmayı içeriyor ve bu sayede saldırganların Jenkins Script Konsoluna erişip komutları yürütmesine olanak sağlıyor.

Conviso raporuna göre, bu teknik, geçerli bir çerez oluşturmak için belirli dosyaların okunmasını gerektiriyor ve bu güvenlik açığından yararlanılarak ikili dosyaları ve tüm dosya içerikleri okunabiliyor.

What Does MITRE ATT&CK Expose About Your Enterprise Security? - Watch Free Webinar!

Sömürü Yolu

  1. Keyfi Dosya Okuma: Saldırganlar, Jenkins denetleyicisindeki hassas dosyaları okumak için bu güvenlik açığını kullanabilirler.
  2. Uzaktan Kod Yürütme (RCE): Bir aracı ele geçirerek saldırganlar, Jenkins denetleyicisinde kod yürütme ayrıcalıklarını artırabilir. Bu, yetkisiz bağlantılar kurmak ve kötü amaçlı kod yürütmek için Uzaktan Erişim kitaplığını kullanarak gerçekleştirilebilir.

Jenkins ekibi, Java sistem özelliklerini ve doğrulayıcıyı kontrol eden bir yama yayınladı. fetchJar işlevsellik. Bu özellikler, URL’leri doğrulayarak ve yetkisiz JAR dosyalarını reddederek yetkisiz dosya erişimini kısıtlamaya yardımcı olur.

Faydalanmak Teknikler

  • Gelen Ajan Saldırısı: Saldırganlar, bağlantı kurmak ve güvenlik açığından yararlanmak için aracı sırlarını kullanabilirler.
  • SSH Bağlantısı Açığı: Çalışan bir Uzaktan Erişim sürecine bağlanarak, saldırganlar ajan sırlarına ihtiyaç duymadan kötü amaçlı kod enjekte edebilirler.
  • Remember-Me Kurabiye Sahteciliği: Saldırganlar, yönetici erişimi elde etmek için çerezleri taklit edebilir ve bunu Jenkins Script Konsolu aracılığıyla komutları yürütmek için kullanabilirler.

Bu güvenlik açığı, potansiyel veri ihlalleri ve operasyonel kesintiler dahil olmak üzere önemli riskler oluşturmaktadır. Jenkins kullanan kuruluşlar, istismarı önlemek için yamayı uygulamalı ve güvenlik önlemlerini gözden geçirmelidir.

Saldırganlar daha sonra Jenkins denetleyicisinde kötü amaçlı kod çalıştırabilir, hassas verileri tehlikeye atabilir ve işlemleri aksatabilir.

Aşağıdaki GIF görüntüsü Jenkins Docker sürüm 2.441’in başarılı bir şekilde kullanılmasını göstermektedir [9] gelen bir aracının adını ve gizli anahtarını kullanarak:

Jenkins ekibi bu sorunu gidermek için bir yama yayınladı ve bir doğrulayıcı ve Java sistem özelliklerini kontrol etmek için bir yama yayınladı. fetchJar işlevsellik. Bu önlemler, URL’leri doğrulayarak ve yetkisiz JAR dosyalarını reddederek yetkisiz dosya erişimini kısıtlamayı amaçlamaktadır.

Analiz, Jenkins kurulumlarının güvenliğini sağlamanın ve sağlanan yamanın uygulanmasının önemini vurgulamaktadır. Jenkins kullanan kuruluşlar, istismarı önlemek ve CI/CD boru hatlarını olası tehditlerden korumak için güvenlik yapılandırmalarını gözden geçirmelidir.

Bu analiz, CI/CD hatlarının güvenliğini sağlamanın ve ortaya çıkan tehditlere karşı tetikte olmanın önemini vurgulamaktadır.

Are You From SOC/DFIR Teams? - Try Advanced Malware and Phishing Analysis With ANY.RUN - 14 day free trial



Source link