Status
Apple telah merilis perbaikan keamanan Bash untuk Shellshock dan kerentanan terkait sebagai " OS X bash Update 1.0 ". Mereka dapat diinstal melalui pembaruan sistem normal untuk orang yang menggunakan OS X Mountain Lion v10.8.5 atau OS X Mavericks v10.9.5 (mereka termasuk dalam Pembaruan Keamanan 2014-005 ) dan juga dapat diinstal secara manual. Perbaikan Apple resmi juga tersedia untuk OS X Lion v10.7.5 dan OS X Lion Server v10.7.5 tetapi hanya tersedia melalui unduhan manual. Perbaikan keamanan tersedia melalui berbagai URL berdasarkan versi sistem operasi:
(Jika tambalan baru dirilis, taruh di sini tapi tolong simpan tambalan yang ada ini juga untuk referensi.)
Patch Apple menangani Shellshock dan beberapa kerentanan lainnya dan baik untuk kebanyakan orang. tl; dr orang dapat berhenti membaca di sini.
NAMUN, perhatian yang ditarik ke bash oleh bug Shellshock telah menyebabkan banyak peneliti memperhatikan bash dan semakin banyak kerentanan (sulit dieksploitasi) terus ditemukan. Jika Anda sangat khawatir tentang keamanan (karena mungkin Anda menjalankan OS X Server untuk meng-host situs web yang tersedia untuk umum) maka Anda mungkin ingin (mencoba untuk) mengikuti kerentanan dan tambalan saat mereka terus bergulir dengan menyusun bash sendiri. Kalau tidak, jangan khawatir tentang itu.
Cari Apple untuk merilis pembaruan lain untuk bersenang-senang di masa depan ketika debu mulai menemukan kerentanan lebih lanjut.
Seperangkat tambalan resmi dari bash sendiri untuk bash 3.2, tambalan 52, 53, dan 54 (yang terkait dengan patch Bash 4.3 25, 26, dan 27) tersedia yang memperbaiki CVE-2014-6271 dan CVE-2014-7169, serta 'Game over' yang ditampilkan di bawah ini. Ini telah diuji oleh saya ( @alblue ) dan pos telah diperbarui sesuai (dan kemudian pembaruan tambahan dibuat: lihat revisi 41 untuk posting yang berhenti di patch 54).
Banyak kerentanan tambahan telah dilaporkan terhadap bash. Menurut posting Michal Zalewski jika Anda memiliki patch 54 (dan mungkin patch resmi Apple) "tidak ada gunanya terobsesi tentang status bug individu ini, karena mereka seharusnya tidak lagi menimbulkan risiko keamanan:"
CVE-2014-6271 - RCE asli ditemukan oleh Stephane. Diperbaiki oleh bash43-025 dan entri 24 Sep yang sesuai untuk versi lain.
CVE-2014-7169 - bug pembuatan file / token yang ditemukan oleh Tavis. Diperbaiki oleh bash43-026 & co (26 Sep)
CVE-2014-7186 - mungkin 10+ kecelakaan di sini-tanpa risiko yang ditemukan oleh Florian dan Todd. Diperbaiki oleh bash43-028 & co (1 Oktober).
CVE-2014-7187 - off-by-one yang tidak menabrak, mungkin tanpa risiko ditemukan oleh Florian. Diperbaiki oleh bash43-028 & co (1 Oktober).
CVE-2014-6277 - masalah memori tidak diinisialisasi, hampir pasti RCE ditemukan oleh Michal Zalewski. Belum ada tambalan spesifik.
CVE-2014-6278 - perintah injeksi RCE ditemukan oleh Michal Zalewski. Belum ada tambalan spesifik.
Itu jadi sangat membingungkan. Untungnya Chet Ramey, pengelola bash resmi, memasang CVE untuk memetakan pemetaan . Posnya merujuk ke tambalan untuk bash 4.3, I (@OldPro) telah menerjemahkannya ke tambalan untuk bash 3.2, yang merupakan apa yang berlaku untuk OS X. Juga, karena posting ini ia telah merilis tambalan 57, jadi saya menambahkannya di bawah:
bash32-052 CVE-2014-6271 2014-09-24
bash32-053 CVE-2014-7169 2014-09-26
bash32-054 exported function namespace change 2014-09-27 ("Game Over")
bash32-055 CVE-2014-7186/CVE-2014-7187 2014-10-01
bash32-056 CVE-2014-6277 2014-10-02
bash32-057 CVE-2014-6278 2014-10-05
Lihat posting David A. Wheeler untuk garis waktu dan detail yang lebih besar.
@alblue memposting instruksi pembangunan melalui patch 55. I (@OldPro) menambahkan patch 56 dan 57 pada instruksi tetapi belum mengujinya.
Menguji Kerentanan asli
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'
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
hello
Output di atas adalah contoh dari versi yang tidak rentan bash
. Jika Anda melihat kata vulnerable
dalam output dari perintah itu, Anda bash
rentan dan Anda harus memperbarui. Di bawah ini adalah versi yang rentan dari OS X 10.8.5:
Menguji Kerentanan baru
Telah ada pembaruan untuk posting asli dan Bash 3.2.52 (1) masih rentan terhadap variasi kerentanan, didefinisikan dalam CVE-2014-7169
$ rm -f echo
$ 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
Output di atas adalah contoh dari bash
versi yang rentan . Jika Anda melihat tanggal di output dari perintah itu, Anda bash
rentan.
Menonaktifkan fungsi yang diimpor otomatis untuk mencegah "Game Over"
Peneliti mencatat, tanpa mengklasifikasikannya sebagai kerentanan, bahwa skrip dapat membajak suatu fungsi dalam subkulit menggunakan fungsi yang diimpor otomatis:
$ env ls="() { echo 'Game Over'; }" bash -c ls
Game over
Kode di atas pada sistem yang terpengaruh akan menampilkan Game Over
alih-alih daftar direktori yang Anda harapkan ls
. Jelas, echo 'Game Over'
bisa diganti dengan kode jahat yang Anda inginkan. Ini menjadi dikenal sebagai bug "Game Over".
Sebelum ketersediaan patch 54, baik NetBSD dan FreeBSD menonaktifkan fungsi bash auto-importing secara default, sebagian untuk mencegah "Game Over" tetapi terutama untuk mengandung kesalahan lebih lanjut dalam parser (seperti CVE-2014-7169 ) karena mereka adalah terus ditemukan, dan menambahkan bendera baris perintah baru--import-functions
untuk mengaktifkan kembali perilaku default lama. Saya (@blue) telah menyiapkan tambalan (terhadap 3.2.53) untuk digunakan orang lain jika mereka juga ingin mengadopsi perilaku ini dan memasukkannya di bawah. Secara default tambalan ini tidak diaktifkan di skrip build di bawah ini. Saya (@ OldPro) percaya bahwa tambalan ini tidak lagi diperlukan atau merupakan ide yang baik, karena ia merusak kompatibilitas ke belakang dan kerentanan yang dilindunginya ditangani dengan sangat baik oleh tambalan 54 dan tambalan sebelumnya, dan memungkinkan tambalan tidak resmi ini mencegah tambalan di masa depan tidak diterapkan. .
(Catatan untuk mempertanyakan editor; harap jangan aktifkan ini secara default, karena ini merupakan patch tidak resmi.)
a0c5c4d66742fddd0a35001cb91798a5fbf8a2f5 import_functions.patch
Patch dapat diaktifkan dengan menjalankan export ADD_IMPORT_FUNCTIONS_PATCH=YES
sebelum menjalankan build. Perhatikan bahwa mengaktifkan tambalan ini akan menonaktifkan tambalan 54 dan tambalan di masa depan karena tambalan di masa depan tidak dapat dijamin kompatibel dengan tambalan tidak resmi.
Apple Patch memiliki kerentanan Game Over, semacam
Seperti yang ditunjukkan oleh @ake_____ di twitter tambalan resmi Apple masih rentan terhadap penghancuran lingkungan yang dapat dieksekusi:
$ env '__BASH_FUNC<ls>()'="() { echo Game Over; }" bash -c ls
Game Over
Pengguna harus memutuskan sendiri seberapa penting hal ini. Saya (@ OldPro) berpikir itu tidak perlu dikhawatirkan karena tidak ada eksploit yang diketahui untuk perilaku ini (bahkan tidak diberi pengenal CVE) karena pada umumnya penyerang jarak jauh yang tidak memiliki hak tidak dapat menetapkan nama variabel lingkungan dan penyerang dengan hak istimewa tidak dapat gunakan ini untuk mendapatkan hak istimewa yang belum mereka miliki (setidaknya tidak tanpa mengeksploitasi kerentanan tambahan).
Untuk memberikan sedikit latar belakang, bash memungkinkan Anda untuk mendefinisikan fungsi, dan selanjutnya memungkinkan Anda untuk mengekspor fungsi tersebut ke subkulit melalui export -f
perintah. Ini dulu diimplementasikan dengan membuat variabel lingkungan dengan nama yang sama dengan fungsi dengan nilainya diatur ke definisi fungsi. Begitu
$ ls () { echo 'Game Over'; }
$ export -f ls
$ echo $ls
Game Over
Ini terjadi karena export -f ls
menciptakan variabel lingkungan bernama ls
. Kerentanan "Game Over" adalah Anda dapat secara langsung membuat variabel lingkungan ini tanpa harus terlebih dahulu mendefinisikan fungsi, yang berarti jika Anda bisa menyuntikkan nama variabel yang tepat, Anda dapat membajak sebuah perintah. Apple mencoba untuk memperbaikinya dengan membuatnya sulit untuk membuat variabel dengan nama yang tepat. Patch bash resmi (54) sebenarnya membuat tidak mungkin untuk membuat variabel dengan nama yang tepat dengan menggunakan nama variabel yang menyertakan %
karakter yang tidak diizinkan dalam nama variabel, secara efektif menempatkan definisi fungsi yang diekspor di ruang nama yang berbeda, disediakan.
Jika tidak ada satu pun di atas yang masuk akal bagi Anda, jangan khawatir tentang hal itu. Anda baik-baik saja dengan patch Apple untuk saat ini.
Binari Sistem
OS X 10.9.5 (rilis stabil terbaru saat ini) dikirimkan bersama Bash v3.2.51:
$ bash --version
GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.
Anda dapat memperoleh dan mengkompilasi ulang Bash sebagai berikut , asalkan Anda telah menginstal Xcode (dan telah menjalankan xcodebuild
setidaknya satu kali sebelumnya untuk menerima lisensi):
$ # If you want to disable auto-imported functions, uncomment the following
$ # export ADD_IMPORT_FUNCTIONS_PATCH=YES
$ mkdir bash-fix
$ cd bash-fix
$ curl https://opensource.apple.com/tarballs/bash/bash-92.tar.gz | tar zxf -
$ cd bash-92/bash-3.2
$ curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-052 | patch -p0
$ curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-053 | patch -p0
$ # See note above about ADD_IMPORT_FUNCTIONS_PATCH
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] && curl http://alblue.bandlem.com/import_functions.patch | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-054 | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-055 | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-056 | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-057 | patch -p0
$ cd ..
$ # Note: DO NOT ADD SUDO TO XCODEBUILD HERE
$ xcodebuild
$ build/Release/bash --version # GNU bash, version 3.2.57-release
$ build/Release/sh --version # GNU bash, version 3.2.57-release
$ sudo cp /bin/bash /bin/bash.old
$ sudo cp /bin/sh /bin/sh.old
$ sudo cp build/Release/bash /bin
$ sudo cp build/Release/sh /bin
(Catatan: Anda dapat menjalankan ini dengan menyalin dan menempelkan blok kode di atas, masuk ke Terminal dan kemudian menjalankan pbpaste | cut -c 2- | sh
. Selalu berhati-hati saat menjalankan skrip acak dari internet ...)
Setelah ini, versi Bash harus v3.2.57:
$ bash --version
GNU bash, version 3.2.57-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.
Untuk keamanan, dan setelah pengujian, saya sarankan agar Anda chmod -x
menggunakan versi lama untuk memastikan mereka tidak digunakan kembali, atau memindahkannya ke situs cadangan.
$ sudo chmod a-x /bin/bash.old /bin/sh.old
Jawaban lain memiliki solusi untuk mereka yang menggunakan MacPorts atau Homebrew; ini tidak memperbaiki masalah, mereka hanya menginstal versi Bash tambahan. Silakan lihat jawaban-jawaban itu jika Anda ingin memutakhirkannya secara khusus.
Terima kasih
Terima kasih kepada Chet, yang menjaga bash, dan telah membuat tambalan ini tersedia. Terima kasih kepada semua orang yang telah mengomentari ini dan memperbaikinya seiring waktu.
Sekarang Apple telah merilis perbaikan nyata, meskipun ini mungkin masih berguna. Karena mereka hanya merilis perbaikan untuk Lion and up, dan tambalan resmi menyediakan GNU bash, versi 3.2.53 (1) -release (x86_64-apple-darwin13), namun, Game over bug masih agak rentan. Pada titik ini, membangun kembali versi Bash Anda sendiri terhadap 3.2.57 mungkin lebih aman daripada mengandalkan tambalan Apple, kecuali jika Anda salah melakukannya.