Apakah bug Shellshock memengaruhi ZSH?

38

Apakah bug Bash Shellshock memengaruhi ZSH?

Apakah memutakhirkan Bash adalah satu-satunya solusi?

marflar
sumber
menurut jawaban ini pada pertukaran yang berbeda, ZSH tidak mengekspor fungsi. Karena bug Shellshock disebabkan oleh fitur khusus bash ini, shell lain yang kurang mungkin tidak boleh terpengaruh.
lzam

Jawaban:

36

Tidak, itu tidak memengaruhi ZSH.

Anda masih HARUS memperbarui bash karena sebagian besar skrip sistem ditulis untuk bash dan rentan terhadap bug shellshock.

Untuk menguji ZSH Anda, lakukan ini:

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

Apa sebenarnya yang dilakukan kode ini?

  1. env x='() { :;}; echo vulnerable' membuat variabel lingkungan dengan bug yang diketahui menggunakan perintah di akhir variabel
  2. zsh -c 'echo hello'meluncurkan shell ZSH dengan hello sederhana (dan mengevaluasi semua variabel env termasuk x )

Jika Anda melihat output:

vulnerable
hello

Maka ZSH Anda rentan. Milik saya (5.0.2) tidak:

$ env x='() { :;}; echo vulnerable' zsh -c 'echo hello'
hello
mente
sumber
1
jika kita menggunakan zsh tapi masih ada bash di sistem kita! apakah kita perlu khawatir tentang itu? jika tidak mengapa?
Dineshkumar
16
@Dineshkumar: ya, Anda masih harus khawatir & tambalan. Alasannya adalah bahwa bahkan jika Anda menggunakan zsh, program lain (dhcp disebutkan, banyak aplikasi PHP mungkin akan melakukannya, dan banyak program dan skrip lain pada mesin Linux yang khas) masih akan memanggil bash. (Sebenarnya, mereka seharusnya tidak melakukannya, tetapi itu sudah menjadi kebiasaan buruk.)
hans_meine
2
@stephenmurdoch Ubuntu 10.10 sudah cukup tua dan belum didukung selama lebih dari 2 tahun ...
Izkata
2
@ Ganima: menelepon bashadalah kebiasaan buruk untuk utilitas sistem karena bash tidak dijamin diinstal; /bin/shadalah shell standar dan diperlukan untuk menjadi penerjemah shell POSIX yang benar.
phord
2
fwiw - Ketika bash dijalankan sebagai / bin / sh, bash dijalankan sebagai shell yang kompatibel dengan POSIX. Namun dalam mode ini, ia juga memiliki bug. env x='() { :;}; echo vulnerable' sh -c 'echo hello'
phord
6

Dari tautan ini :

Anda dapat menentukan apakah Anda rentan terhadap masalah asli di CVE-2014-6271 dengan menjalankan tes ini:

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

Jika Anda melihat kata rentan dalam output perintah itu, bash Anda rentan dan Anda harus memperbarui. Di bawah ini adalah versi yang rentan dari OS X 10.8.5:

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

Output berikut adalah contoh dari versi bash yang tidak rentan.

$ env x='() { :;}; echo vulnerable' bash -c 'echo hello'
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
hello
ukuran vektor
sumber
Perhatikan juga bahwa ketika menambal bash mengikuti petunjuk pada tautan zshell berhenti menjadi rentan, yang membuat saya berpikir bahwa zshell menggunakan bash pada intinya.
vectorsize
9
Perhatikan bahwa telah ada tindak lanjut : env X='() { (a)=>\' bash -c "echo date"akan, pada bash yang ditambal dan meskipun melemparkan banyak kesalahan, menghasilkan file bernama echoyang berisi tanggal. Saya tidak ingin tahu mengapa.
Jonas Schäfer
@Jonas Tunggu, buat file ?! Saya mengerti kerentanannya, tapi itu aneh.
Gagang pintu
5
@vectorsize zshtidak tidak menggunakan bashpada intinya. bashsecara eksplisit disebut dalam contoh Anda. Tidak masalah shell mana yang Anda gunakan untuk menjalankan baris ini. Kerentanan ini memengaruhi bash shell yang baru mulai, bukan shell yang dijalankannya.
Adaephon
2
@Adaephon Jadi seseorang ingin mengganti bashdalam contoh dengan $SHELL.
Jonas Schäfer
6

Biner tidak terpengaruh

Itu tidak mempengaruhi zshsebagai shell dieksekusi, karena kode sumbernya tidak pernah mengandung kesalahan.
Ada banyak kesamaan antara bashdan zsh, tetapi mereka tidak diterapkan secara independen satu sama lain. Fitur yang sama diimplementasikan dalam dua cara yang berbeda, dan - lebih penting dalam konteks ini - biasanya dengan kesalahan yang berbeda.

Tetapi penggunaan interaktif

Secara tidak langsung itu mempengaruhi bekerja secara interaktif dengan zshshell di terminal hampir sebanyak bekerja dengan bash.

Penggunaannya bashsangat umum sehingga orang hampir tidak bisa menghindarinya.

Terlalu banyak kegunaan untuk dihindari

  • skrip yang Anda tahu dan harapkan untuk digunakan zsh, tetapi sebenarnya mengandung bash.
  • banyak skrip shell yang digunakan #!/bin/bashuntuk menentukan bashsebagai penerjemah.
  • banyak perintah yang Anda anggap binari, tetapi skrip shell, beberapa di antaranya menggunakan bash.

  • di banyak tempat di mana shell dieksekusi secara eksplisit, bashdapat digunakan, dan mungkin diperlukan.

    • seperti xargsperintah yang rumit , atau gitalias yang melibatkan argumen
    • kerang standar dari emulator terminal
    • shell dari pengguna yang Anda sudo
    • dll.
Volker Siegel
sumber
4

Tidak, Shellshock tidak memengaruhi zsh secara langsung.

Namun banyak lingkungan yang menggunakan zsh sebagai shell default juga telah menginstal bash. Semua shell, termasuk zsh, dapat digunakan untuk menelurkan shell bash yang dikompromikan:

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

Untuk mempertahankannya, Anda harus menambal, mencopot atau menonaktifkan versi bash yang berlebihan. Anda dapat menonaktifkan instalasi sistem bash dengan chmod:

$ chmod a-x /bin/bash

Namun, biasanya skrip memanggil bash secara eksplisit. Skrip yang melakukan ini, dan yang menggunakan fitur skrip bash-spesifik, akan gagal jika bash tidak tersedia. Menambal adalah solusi terbaik.

joews
sumber
tampaknya zsh secara implisit menggunakan bash untuk " importing function definition"? Saya juga diuji dengan injeksi ssh-server: di ssh testuser@localhost '() { :;}; echo "$SHELL"'mana saya mengatur testusershell login /bin/zsh, dan itu bergema/bin/zsh
Bossliaw