Shellshock hatası ZSH'yi etkiler mi?


38

Does Shellshock Bash hata zsh etkiler?

Bash'i yükseltmek tek çözüm mü?


Bu cevaba göre farklı bir borsada, ZSH fonksiyonları dışa aktarmaz. Shellshock böceğine bu bash özelliğine bağlı olduğu için, onu içermeyen diğer kabuklar muhtemelen etkilenmemelidir.
eylül

Yanıtlar:


36

Hayır, ZSH'yi etkilemez.

Hala GEREKİR sistem komut çoğu partisi yüzünden yazılı ve shellshock hatadan savunmasız olarak bash güncelleyin.

ZSH'nizi test etmek için şunu yapın:

env x='() { :;}; echo vulnerable' zsh -c 'echo hello'

Bu kod tam olarak ne yapar?

  1. env x='() { :;}; echo vulnerable' değişken sonunda komutu kullanarak bilinen hata ile bir ortam değişkeni yaratır
  2. zsh -c 'echo hello'ZSH kabuğunu basit merhaba ile başlattı (ve x dahil tüm env değişkenlerini değerlendiriyor )

Çıktı görürseniz:

vulnerable
hello

O zaman ZSH'niz korunmasızdır. Maden (5.0.2) değil:

$ env x='() { :;}; echo vulnerable' zsh -c 'echo hello'
hello

1
Eğer zsh kullanıyorsak ama yine de sistemimizde bash var! Endişelenmemize gerek var mı? eğer değilse neden?
Dineshkumar

16
@Dineshkumar: evet, hala endişelenmelisin ve yama. Bunun nedeni bile olduğunu sen hala olacaktır zsh, diğer programları (dhcp bahsedildi, birçok PHP uygulamalarının muhtemelen yapacak ve tipik bir Linux makine diğer programlar ve komut sürü) kullanıyorsunuz çağrı bash. (Aslında, yapmamalılar, ama kötü bir alışkanlık haline geldi.)
hans_meine

2
@stephenmurdoch Ubuntu 10.10 oldukça eski ve 2 yıldan beri desteklenmiyor ...
Izkata

2
@ Ganima: çağrı bash, sistem kurulumları için kötü bir alışkanlıktır çünkü bash'ın kurulması garanti edilmez; /bin/shstandart kabuktur ve doğru bir POSIX kabuk yorumlayıcısı olması gerekir.
phord

2
fwiw - bash / bin / sh olarak çalıştığında POSIX uyumlu bir kabuk olarak çalışır. Bu modda, ancak, aynı zamanda bir hata var. env x='() { :;}; echo vulnerable' sh -c 'echo hello'
phord

6

Gönderen bu bağlantı :

Bu testi uygulayarak CVE-2014-6271'deki orijinal soruna açık olup olmadığınızı belirleyebilirsiniz:

env x='() { :;}; echo vulnerable' bash -c 'echo hello'

Bu komutun çıktısında savunmasız kelimesini görüyorsanız, bashınız savunmasızdır ve güncellenmelisiniz. Aşağıda OS X 10.8.5’ten korunmasız bir versiyonu var:

env x='() { :;}; echo vulnerable' bash -c 'echo hello'
vulnerable
hello

Aşağıdaki çıktı, korunmasız bir bash versiyonunun bir örneğidir.

$ env x='() { :;}; echo vulnerable' bash -c 'echo hello'
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
hello

Ayrıca, zshell linkindeki yönergeleri izleyerek bash yama yapıldığında savunmasız kalmayı bıraktığını ve zshell'in özünde bash kullandığını düşünmemi sağladı.
vectorsize

9
Takip edildiğine dikkat edin : env X='() { (a)=>\' bash -c "echo date"yamalı bir bashta ve çok fazla hata atmasına rağmen echo, tarihi içeren bir dosya oluşturur. Nedenini bilmek istemiyorum.
Jonas Schäfer

@Jonas Bekle, bir dosya oluştur ?! Güvenlik açığını anlıyorum, ancak bu sadece tuhaf.
Doorknob

5
@vectorsize zshetmez olmayan kullanımı bashözünde. bashaçıkça örneklerde denir. Bu satırları çalıştırmak için hangi kabuğu kullandığınız fark etmez. Bu güvenlik açığı, yeni başlatılan bash kabuğunu etkiler, çalıştırıldığı kabuğu değil.
Adaephon

2
@Adaephon Yani bir bashörnek tarafından değiştirmek istiyorum $SHELL.
Jonas Schäfer

6

İkili etkilenmez

zshÇalıştırılabilir kabuğu etkilemez , çünkü kaynak kodu hiçbir zaman hatayı içermez .
Orada arasında birçok similaritys vardır bashve zshfakat birbirinden bağımsız hayata werer. Aynı özellik iki farklı şekilde uygulanır ve - bu bağlamda daha önemli - genellikle farklı hatalarla.

Ancak etkileşimli kullanım

Dolaylı olarak, zshneredeyse bir terminaldeki kabukla etkileşimli olarak çalışmayı etkiler bash.

Kullanımı basho kadar yaygındır ki, kişi onu aramaktan kaçınmaktan neredeyse kaçınıyor.

Kaçınılması gereken çok fazla kullanım

  • komut bildiğiniz ve kullanım bekliyoruz zsh, ama aslında içerirler bash.
  • tercüman olarak #!/bin/bashbelirtmek için kullanılan çok sayıda kabuk komut dosyası bash.
  • Tahmin ettiğiniz birçok komut ikiliktir, ancak bazıları tarafından kullanılan kabuk komut dosyalarıdır bash.

  • Bir kabuğun açıkça yürütüldüğü birçok yerde bashkullanılabilir ve muhtemelen gerekli olabilir.

    • karmaşık xargskomutlar veya gitargümanlar içeren takma adlar gibi
    • terminal emülatörlerinin varsayılan kabukları
    • bağımlı olduğunuz kullanıcı kabuğu
    • vb.

4

Hayır, Shellshock doğrudan zsh'yi etkilemez.

Ancak, varsayılan kabuk olarak zsh kullanan birçok ortamda bash yüklüdür. Zsh dahil olmak üzere herhangi bir kabuk, tehlikeye atılmış bir bash kabuğunun ortaya çıkarılması için kullanılabilir:

zsh  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'
Fri 26 Sep 2014 12:05:57 BST

Buna karşı savunmak için, bash'ın yedekli sürümlerini yama yapmanız, kaldırmanız veya devre dışı bırakmanız gerekir. Sistem bash kurulumunu şu şekilde devre dışı bırakabilirsiniz chmod:

$ chmod a-x /bin/bash

Ancak, betiklerin açıkça bash çağırması yaygındır. Bunu yapan komutlar ve bash'a özgü komut dosyası özelliklerini kullananlar, bash mevcut değilse başarısız olur. Yama en iyi çözümdür.


Öyle görünüyor ki zsh dolaylı olarak " importing function definition" için bash kullanıyor ? Ayrıca ssh-sunucu enjeksiyonu ile test: ssh testuser@localhost '() { :;}; echo "$SHELL"'belirlediğim yere testuserkadar 'nin giriş kabuğu /bin/zshve yankıları/bin/zsh
Bossliaw
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.