CVE-2014-7169 için güncellenmiş Shellshock güvenlik açığı testi nasıl çalışır?


11

CVE-2014-6271 için orijinal testi anladım, ki:

$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

Ama güncellenmiş test ve CVE-2014-7169 için ilgili çıktı ile kafam karıştı:

$ env X='() { (a)=>\' sh -c "echo date"; cat echo
sh: X: line 1: syntax error near unexpected token `='
sh: X: line 1: `'
sh: error importing function definition for `X'
Thu 25 Sep 2014 08:50:18 BST

Birisi burada neler olduğunu ve CVE-2014-6271 için yamayı nasıl atladığını kısaca açıklayabilir mi?


Yanıtlar:


13

Bu soruyu ilk kez yayınladığımdan beri web'leri biraz araştırıyorum.

Hatanın orijinal keşfedicisine göre, CVE-2014-6271 yamasından önce bash aşağıdaki gibi bir işlevi içe aktardı:

foo=() {
  code
}

eşittir işaretini bir boşlukla değiştirerek ve yorumlayarak ... fonksiyon tanımının ötesinde yorum yapmak mümkün olmuştur.

Yama , SVO-2014-6271 için parse_and_execute () işlevi özel bir modu kişiye fonksiyon tanımına sınır değerlendirilmesi, ve bunun ötesinde.

Bununla birlikte, bu iş parçacığında açıklandığı gibi , CVE-2014-7169 güvenlik açığı testinin özel hazırlanmış ortam değişkeni 1) ayrıştırıcıyı ölümle karıştırmak için tasarlanmıştır 2) arabellekte not bırakın 3) orijinal bash komutunun ne yaptığını tamamen değiştirin tamponda bulunan artıkları birleştirir.

Ortam değişkenini incelemek için:

X='() { (a)=>\'

  • Ayrıştırıcı analiz edecektir () { (a)=>\. \Dizenin bir parçası olduğunu unutmayın ; Bu edilir değil arka tek tırnak kaçan.

() {

  • Ayrıştırıcı bunu bir işlev tanımı olarak tanımlar.

(a)=

  • Bu ayrıştırıcıyı ölümle karıştırır.

>\

  • Ayrıştırıcı, son iki karakteri arabellekte oturuyor.

>\[NEWLINE]

  • shKomut çalıştırılmadan önceki bir noktada , ara belleğe bir satırsonu yerleştirilir.

>\[NEWLINE]echo date

  • Ne zaman shçağrılırsa (muhtemelen bu durumda bash için bir sembolik bağlantıdır), komut argümanlarını echo datetamponda bulunan karakterlere ekler .

>echo date

  • Yeni satır kaçtığından, bash arabelleği ayrıştırır ve >echo datebu da aynı etkiye sahiptir date > echo. Adlı bir dosya echooluşturulur ve datekomutun stdout'u ona yönlendirilir.

; cat echo

  • İkinci komut sadece yeni oluşturulan dosyanın içeriğini görüntüler.


2

Size güzel bir temiz çıktı vermez, ancak hatayı gösterir.

Hata olmadan, ortam değişkeni Xyok sayılmalı, bash çalıştırılmalı echo dateve cat, echo adlı bir dosya olmadığından şikayet etmelidir. Örneğin, çizginin nasıl davrandığını düşünün:

me@myserver$ rm -f echo && env -i  X='() { (a)=>\' dash -c 'echo date'; cat echo
date
cat: echo: No such file or directory

Sorunuzda gösterdiğiniz çıktıyı tekrarlamayacağım ve nasıl çalıştığını anlamayacağım, ancak bash çalışıyor dateve çıktıyı 'echo' adlı bir dosyaya koyuyor. dateKendinizi bunun kullanılabilir ve tehlikeli olduğuna ikna etmek için alternatiflerle oynayabilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.