Apakah bug Bash Shellshock memengaruhi ZSH?
Apakah memutakhirkan Bash adalah satu-satunya solusi?
Apakah bug Bash Shellshock memengaruhi ZSH?
Apakah memutakhirkan Bash adalah satu-satunya solusi?
Jawaban:
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?
env x='() { :;}; echo vulnerable'
membuat variabel lingkungan dengan bug yang diketahui menggunakan perintah di akhir variabelzsh -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
bash
adalah kebiasaan buruk untuk utilitas sistem karena bash tidak dijamin diinstal; /bin/sh
adalah shell standar dan diperlukan untuk menjadi penerjemah shell POSIX yang benar.
env x='() { :;}; echo vulnerable' sh -c 'echo hello'
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
env X='() { (a)=>\' bash -c "echo date"
akan, pada bash yang ditambal dan meskipun melemparkan banyak kesalahan, menghasilkan file bernama echo
yang berisi tanggal. Saya tidak ingin tahu mengapa.
zsh
tidak tidak menggunakan bash
pada intinya. bash
secara 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.
bash
dalam contoh dengan $SHELL
.
Itu tidak mempengaruhi zsh
sebagai shell dieksekusi, karena kode sumbernya tidak pernah mengandung kesalahan.
Ada banyak kesamaan antara bash
dan 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.
Secara tidak langsung itu mempengaruhi bekerja secara interaktif dengan zsh
shell di terminal hampir sebanyak bekerja dengan bash
.
Penggunaannya bash
sangat umum sehingga orang hampir tidak bisa menghindarinya.
zsh
, tetapi sebenarnya mengandung bash
. #!/bin/bash
untuk menentukan bash
sebagai penerjemah.banyak perintah yang Anda anggap binari, tetapi skrip shell, beberapa di antaranya menggunakan bash
.
di banyak tempat di mana shell dieksekusi secara eksplisit, bash
dapat digunakan, dan mungkin diperlukan.
xargs
perintah yang rumit , atau git
alias yang melibatkan argumenTidak, 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.
importing function definition
"? Saya juga diuji dengan injeksi ssh-server: di ssh testuser@localhost '() { :;}; echo "$SHELL"'
mana saya mengatur testuser
shell login /bin/zsh
, dan itu bergema/bin/zsh