Apa kerentanan bash CVE-2014-6271 (Shellshock) dan bagaimana cara memperbaikinya?

141

Baru-baru ini, ada berita seputar "CVE-2014-6271" (Lihat USN-2362-1 ), yang merupakan kerentanan di Bash. Bagaimana saya tahu jika saya terpengaruh oleh ini, bagaimana saya bisa memperbaikinya, dan mengapa saya harus peduli?

Ini dirancang sebagai jawaban kanonik untuk kerentanan ini, karena ruang lingkup dan tingkat keparahannya.

ζ--
sumber
18
"Bagaimana saya memperbaikinya?" -> jalankan pengelola upgrade Anda! Sungguh, Ubuntu merilis pembaruan keamanan, ada tim keamanan khusus. Tolong jangan posting jawaban tentang membangun Bash dari sumber! ; itu tidak perlu rumit dan sulit untuk mempertahankan sistem Anda di masa depan.
gertvdijk
5
Plus, juga CVE tambahan untuk perbaikan yang tidak lengkap. CVE-2014-7169
gertvdijk
18
Silakan lakukan posting jawaban tentang membangun dari sumber. Harus atau tidak, beberapa orang memiliki server Ubuntu kuno, dan membangun dari sumber mungkin satu-satunya pilihan mereka.
GaryO
3
oops, maaf saya baru sadar saya menaruh bash alih-alih berlari dalam ujian. Sudahlah tidak apa-apa.
Matt H
4
Baca: oss-dtk: Re: CVE-2014-6271: eksekusi kode jauh melalui bash . Bug Bash masih belum diperbaiki
blade19899

Jawaban:

126

Apa itu Bash?

Bash adalah shell interaktif bawaan di Ubuntu. Ketika Anda berinteraksi dengan terminal (baik melalui terminal emulator, lebih dari tty, atau ssh), Anda biasanya mengetik perintah yang bashakan membaca, dan mengeksekusi. Bahkan jika Anda tidak menggunakan terminal sama sekali, Anda masih memiliki Bash.

Di Ubuntu, /bin/shbukan bash (ini adalah tanda hubung). Hanya bash yang terpengaruh oleh kerentanan ini.

Bagaimana pengaruh eksploitasi terhadap saya?

Bash dan OS melacak serangkaian variabel lingkungan yang menggambarkan pengguna yang masuk saat ini, tempat mencari program pada hard disk, dan fungsi-fungsi lainnya. Dengan membuat variabel lingkungan dengan struktur tertentu, penyerang mungkin dapat mengeksekusi kode saat Bash dimulai.

Penyerang dapat mengatur variabel lingkungan itu beberapa cara:

  • Terhubung dari jarak jauh ke layanan seperti SSH dengan pengaturan khusus seperti git over ssh. Seperti Mitre memperingatkan, penggunaan ForceCommandopsi sshd adalah vektor serangan. Akun yang shellnya bukan bash tidak terpengaruh.
  • Menipu Anda untuk menetapkan variabel lingkungan.
  • Menyebabkan program lain untuk menetapkan variabel lingkungan agar memiliki nilai buatan itu. Misalnya, Anda mungkin memiliki server web dan skrip yang perlu mengatur variabel lingkungan dengan konten pengguna tertentu. Bahkan jika skrip itu membuat sendiri, dan tidak menyentuh variabel lingkungan lain, itu sudah cukup. Variabel lingkungan tunggal dengan nama apa pun dan nilai buatan cukup untuk eksploit agar berhasil .
  • Cara lain yang belum saya sebutkan di sini.

Begitu mereka mengatur variabel ini, waktu berikutnya bashterbuka karena alasan apa pun, kode penyerang Anda akan dijalankan. Ini sangat menakutkan sudo -s, karena memunculkan bash sebagai super-user (aturan pengguna administratif yang memiliki kontrol penuh atas data dan program komputer Anda). Bahkan jika Anda hanya memulai bash sebagai pengguna standar, file pengguna itu dapat dihapus.

Penting untuk dicatat bahwa bahkan jika Anda tidak menggunakan bash sendiri, banyak program akan menelurkan bash sendiri sebagai bagian dari operasi mereka. Bahkan dalam kasus ini, Anda rentan. Namun, Ubuntu /bin/shbukan bash, jadi hanya program yang secara eksplisit memanggil bash dan bukan shell skrip default yang terpengaruh.

Menurut Mitre:

vektor yang melibatkan fitur ForceCommand di OpenSSH sshd, modul mod_cgi dan mod_cgid di Apache HTTP Server, skrip yang dieksekusi oleh klien DHCP yang tidak ditentukan, dan situasi lain di mana pengaturan lingkungan terjadi melintasi batas hak istimewa dari eksekusi Bash.

Apakah saya rentan?

Gunakan dpkg untuk memeriksa versi paket yang Anda instal:

dpkg -s bash | grep Version

Ini akan mencari info pada bashpaket Anda , dan memfilter output untuk hanya menampilkan versi. Versi tetap adalah 4.3-7ubuntu1.4, 4.2-2ubuntu2.5, dan 4.1-2ubuntu3.4.

Sebagai contoh, saya melihat:

wlan1-loopback% dpkg -s bash | grep Version
Version: 4.3-7ubuntu1.4

dan dapat menentukan bahwa saya tidak rentan.

Bagaimana cara saya memperbarui?

Manajer pembaruan standar akan menawarkan pembaruan ini kepada Anda. Ini adalah contoh utama tentang bagaimana pembaruan keamanan penting, tidak peduli OS apa yang Anda gunakan atau seberapa baik pemeliharaannya.

The USN Bulletin menyatakan bahwa versi baru telah dirilis untuk Ubuntu 14.04 Trusty Tahr, 12.04 Precise Pangolin, dan 10.04 Lucid Lynx. Jika Anda tidak menggunakan salah satu versi LTS ini, tetapi menggunakan versi yang cukup baru, kemungkinan besar Anda akan dapat menemukan paket yang ditambal.

Pertama, periksa apakah Anda

Jika Anda rentan, Anda harus terlebih dahulu mengambil daftar paket terbaru:

sudo apt-get update && sudo apt-get install bash

Perintah pertama memastikan bahwa Anda memiliki daftar paket terbaru yang menyertakan versi tetap, dan perintah kedua menginstal versi bash terbaru (tetap).

Sementara bug hanya muncul untuk bermain ketika bash muncul, masih merupakan ide bagus untuk segera reboot jika memungkinkan.

ζ--
sumber
20
Maaf, Anda rentan . Patch asli tidak memperbaiki seluruh masalah. Lihat cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-7169 AFAIAA, saat ini tidak ada perbaikan yang tersedia untuk umum. Lihat misalnya people.canonical.com/~ubuntu-security/cve/pkg/bash.html
Mormegil
4
@hexafraction Di mana Anda membaca bahwa 12.10 menerima pembaruan untuk ini? Saya kira tidak, 12.10, 13.04, 13.10 adalah Akhir Hidup ! Dan juga, repositori backport tidak digunakan untuk pembaruan keamanan .
gertvdijk
2
@hexafraction Tidak, mereka tidak! Itulah inti dari Menjadi Akhir Kehidupan: tidak ada dukungan sama sekali lagi.
gertvdijk
1
@ MichaelHärtl Jika Anda pada Ubuntu 12.10, Anda dapat men-download 12,04 versi dari bash dari packages.ubuntu.com/precise/bash dan menginstalnya secara manual.
David
2
Perbaikan untuk CVE-2014-7169 tersedia di manajer pembaruan (untuk saya).
Calmarius
27

Curi ini dari cft di Hacker News . Jika Anda memiliki masalah dengan repo Anda seperti saya (Odroid-XU), maka ini akan berfungsi dengan baik jika Anda ingin menambal / membangun dari sumber.

TMPDIR=/tmp/bash-src
mkdir $TMPDIR
cd $TMPDIR
#download bash
wget http://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
#download all patches
for i in $(seq -f "%03g" 1 999); do 
  wget http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i
  if [[ $? -ne "0" ]]; then
    MAX=$(expr $i - 1)
    break;
  fi
done
tar zxf bash-4.3.tar.gz 
cd bash-4.3
#apply all patches
for i in $(seq -f "%03g" 1 $MAX);do
  echo apply patch bash43-$i
  patch -p0 < ../bash43-$i
done
#build and install
./configure && make
sudo make install
cd ../..
rm -r $TMPDIR

Lalu lari:

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

Dan jika Anda mendapatkan:

bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
this is a test

Maka kamu semua baik-baik saja!


PERINGATAN: make install akan menginstal bash in /usr/local/bin, jadi /bin/bashtidak dimodifikasi dan dapat dipanggil dari curl !!

Bobby Saget
sumber
1
Berikut ini cara membuat bash 3.2 dengan tambalan di debian lenny: gist.github.com/mattwhite/86de50d30134129e44ef
Matt White
13
-1. Tidak perlu membangun dari sumber. Ubuntu memiliki tambalan keamanan di repositori. Jika Anda memiliki "masalah dengan repo", perbaiki itu sebagai gantinya. Anda akan rentan dalam banyak hal jika Anda tidak menerima peningkatan keamanan!
gertvdijk
1
@ Matt Putih Terima kasih! Anda baru saja menyelamatkan saya beberapa jam :)
Florian Fida
5
@FlorianFida Ini AskUbuntu! Semua orang di situs ini diharapkan memposting jawaban dalam lingkup penggunaan Ubuntu.
gertvdijk
6
@ MichaelHärtl 12.10 adalah End-of-Life. Itu tidak menerima pembaruan keamanan lagi sejak lama. Meningkatkan!!!
gertvdijk
9

Catatan: Patch Keamanan untuk CVE-2014-7169 telah dirilis sebagai pembaruan keamanan standar. Tidak perlu menambahkan ppa tambahan untuk menerima tambalan ini. Hanya yang berikut ini yang dibutuhkan.

sudo apt-get update

sudo apt-get upgrade

Untuk memastikan Anda telah menambal bash dengan benar, jalankan perintah berikut

dpkg -s bash | grep Version

Jika Anda menggunakan 14,04 LTS, Anda akan melihat output dari:

Version: 4.3-7ubuntu1.4

Jika Anda menggunakan 12,04 LTS, output Anda harus:

 Version: 4.2-2ubuntu2.5
branch.lizard
sumber
1
Ini benar, tetapi tambalan resmi sekarang telah tersedia, sehingga pembaruan keamanan telah dirilis. Akibatnya langkah-langkah ini tidak lagi diperlukan.
Robie Basak
Ini benar. Saya akan mengedit posting di atas. Terima kasih.
branch.lizard
1

Jika Anda menggunakan 11,04: gunakan langkah-langkah di bawah ini (itu berhasil untuk saya)

cd ~/
mkdir bash
wget https://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
for i in $(seq -f "%03g" 0 25); do wget https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done

jika tidak diperlukan tambalan yang diperlukan maka instal paket ftp

apt-get install ftp
for i in $(seq -f "%03g" 0 25); do wget https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done
tar zxvf bash-4.3.tar.gz
cd bash-4.3
for i in $(seq -f "%03g" 0 25);do patch -p0 < ../bash43-$i; done
./configure && make && make install
apt-get install build-essential
./configure && make && make install

Untuk melihat apakah tambalan diterapkan:

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

Saya menggunakan Natty 11.04, yaitu EOL (dan saya telah memperbarui /etc/apt/sources.list untuk menggunakan old-releases.ubuntu.com), jadi saya harus membuat dari sumber. Saya ingin membangun .deb, jadi setidaknya paket kelola adalah "sadar" versi bash bukan yang default. Saya tidak 100% berhasil - namun, paket terdaftar sebagai "baru" dan bashbiner akhirnya diperbaiki, jadi inilah yang saya lakukan:

apt-get source bash
wget https://gist.githubusercontent.com/drj11/e85ca2d7503f28ebfde8/raw/31bd53ed2e47b220d3c728f5440758e0f76769de/gistfile1.c -O bash_CVE-2014-6271.patch
wget https://gist.githubusercontent.com/drj11/239e04c686f0886253fa/raw/046e697da6d4491c3b733b0207811c55ceb9d927/gistfile1.c -O bash_CVE-2014-6271_plus.patch
cd bash-4.2/

Sekarang, di direktori (sub) bash-4.2/, ada: file bash-4.2.tar.xz, yang perlu diurai untuk mendapatkan bashsumbernya; dan subdirektori bernama debian.

Saya membuat perubahan berikut untuk menghindari ketergantungan pada texlive: di bash-4.2/debian/control:

Source: bash
...
Build-Depends: autoconf, autotools-dev, patch, bison, libncurses5-dev,
# texinfo, debhelper (>= 5), texi2html, locales, gettext, sharutils, time, xz-ut
ils
 debhelper (>= 5), locales, gettext, sharutils, time, xz-utils
# Build-Depends-Indep: texlive-latex-base, ghostscript
Build-Depends-Indep: ghostscript

... dan di bash-4.2/debian/rules:

binary-doc: bash-install #bash-doc-build
        dh_testdir
        dh_testroot
        mkdir -p $(d_doc)/usr/share/doc/$(p)
        dh_installdocs -p$(p_doc) 
ifeq ($(with_gfdl),yes)
        #cp -p build-bash/doc/bashref.pdf $(d_doc)/usr/share/doc/$(p)/.
        #dh_link -p$(p_doc) \
        #    /usr/share/doc/$(p)/bashref.pdf /usr/share/doc/$(p_doc)/bashref.pdf
else
        rm -f $(d_doc)/usr/share/doc-base/bashref
endif
        rm -f $(d_doc)/usr/share/info/dir*
        #cp -p build-bash/doc/bash.html build-bash/doc/bash.pdf \
        #    $(d_doc)/usr/share/doc/$(p)/
        #dh_link -p$(p_doc) \
        #    /usr/share/doc/$(p)/bash.html /usr/share/doc/$(p_doc)/bash.html \
        #    /usr/share/doc/$(p)/bash.pdf /usr/share/doc/$(p_doc)/bash.pdf
        dh_installchangelogs -p$(p_doc) bash/CWRU/changelog
        ...

Untuk mengubah versi, di bash-4.2/direktori ini , lakukan:

bash-4.2$ dch --local patchCVE

... dan isi catatan di changelog saat ditanya. Ini akan memastikan bahwa .deb (dan metadata terkait) dipanggil (dalam kasus saya) bash_4.2-0ubuntu3patchCVE1_i386.deb.

Kemudian Anda dapat mencoba membangun dengan dpkg-buildpackage -us -ucatau debuildmemerintahkan. Catatan - salah satu dari ini akan membongkar kembali sumber dari zip - sehingga menimpa patch yang mungkin Anda miliki! Namun, jalankan salah satu dari ini sekali sehingga sumbernya dibongkar dan dibangun (catatan debuildmungkin masih gagal pada akhirnya karena texlive, tetapi harus membongkar dan membangun sumber).

Kemudian, terapkan tambalan; perhatikan Anda harus menggunakan di -p1sini, karena saat ini Anda berada di bash-4.2/direktori:

bash-4.2$ patch -p1 < ../bash_CVE-2014-6271.patch 
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271_plus.patch 

Kemudian bangun kembali versi yang ditambal dengan menjalankan:

bash-4.2$ fakeroot debian/rules build 

Ini akan membangun kembali executable; untuk mengujinya:

bash-4.2$ env VAR='() { :;}; echo Bash is vulnerable!' ./build-bash/bash -c "echo Bash Test"

Untuk membuat file .deb, jalankan:

bash-4.2$ fakeroot debian/rules binary

Ini akan menyimpan file deb di direktori induk; untuk daftar isinya:

bash-4.2$ dpkg -c ../bash_4.2-0ubuntu3patchCVE1_i386.deb

Untuk menginstal .deb:

bash-4.2$ sudo dpkg -i ../bash_4.2-0ubuntu3patchCVE1_i386.deb

Namun, untuk beberapa alasan, deb.

bash-4.2$ sudo cp bash-4.2/build-bash/bash /bin/

... dan setelah itu, tes mulai lulus dengan benar untuk saya:

$ env VAR='() { :;}; echo Bash is!' bash -c "echo Bash Test"
bash: warning: VAR: ignoring function definition attempt
bash: error importing function definition for `VAR'
Bash Test
sdaau
sumber
Pertanyaan: Pertanyaan Asli menyatakan 1 kemungkinan vektor serangan sebagai "skrip yang dijalankan oleh klien DHCP yang tidak ditentukan". Apa artinya ini? Apakah ini berarti bahwa / sbin / dhclient Ubuntu <- rentan?
Bran
Saya pikir mungkin klien yang tidak ditentukan berarti, bahwa Ubuntu memiliki terinfeksi / sbin / dhclient, yang kemudian menjalankan perintah yang mengarah ke bash script meluncurkan shellshock. Apakah itu yang Klien DHCP rentan terhadap shellshock? (Harapan itu masuk akal, lihat pesan saya di atas dari 10 Oktober)
Bran