durum
Apple, Shellshock ve " OS X bash Update 1.0 " olarak ilgili güvenlik açıkları için Bash güvenlik düzeltmelerini yayımladı . OS X Mountain Lion v10.8.5 veya OS X Mavericks v10.9.5 ( Güvenlik Güncellemesi 2014-005'e dahil edilmiştir ) kullanan kişiler için normal sistem güncellemesiyle kurulabilirler ve manuel olarak da kurulabilirler. Resmi Apple düzeltmeleri ayrıca OS X Lion v10.7.5 ve OS X Lion Server v10.7.5 için de geçerlidir, ancak bunlar yalnızca manuel olarak indirilebilir. İşletim sistemi sürümüne bağlı olarak, güvenlik düzeltmeleri farklı URL'ler aracılığıyla sağlanır:
(Yeni yamalar yayınlandıysa, bunları buraya koyun ancak lütfen mevcut olanları referans için de saklayın.)
Apple yaması Shellshock ve diğer birkaç güvenlik açığına bakar ve çoğu insan için iyidir. Dr. insanlar burada okumayı bırakabilirler.
Ancak, Shellshock böceğinin bash'a verdiği dikkat, birçok araştırmacının bash'a sert bir şekilde bakmasına neden oldu ve gittikçe daha fazla (sömürülmesi zor) güvenlik açıkları bulunmaya devam etti. Güvenlik konusunda endişeleriniz varsa (belki de halka açık bir web sitesini barındırmak için OS X Server kullanıyorsanız), o zaman kendinizi derlemeye devam ederken güvenlik açığı ve yamaları takip etmeye (denemeye) devam etmek isteyebilirsiniz. Aksi takdirde, endişelenme.
Toz daha fazla güvenlik açığı bulmaya karar verdiğinde ileride bir süre bash yapmak üzere başka bir güncelleme yayınlamak için Apple'ı arayın.
Hem CVE-2014-6271 hem de CVE-2014-7169’u tespit eden bash 3.2, 52, 53 ve 54 numaralı yamalar (Bash 4.3, 25, 26 ve 27’deki yamaları) gösteren resmi bir yamalar seti mevcuttur. yanı sıra aşağıda gösterilen 'Oyun bitti'. Bu benim tarafımdan ( @alblue ) test edildi ve posta uygun şekilde güncellendi (ve daha sonra ek güncellemeler yapıldı: 54 numaralı yamada duran yazı için revizyon 41'e bakınız ).
Bash'a karşı birçok ek güvenlik açığı bildirildi. Michal Zalewski'nin görevine göre, 54 yamasını (ve muhtemelen de Apple'ın resmi yamasını) kullanıyorsanız, "bu bireysel hataların durumunu takıntı oluşturmanın bir anlamı yoktur, çünkü artık güvenlik riski taşımamalıdırlar:"
CVE-2014-6271 - Stephane tarafından bulunan orijinal RCE. Bash43-025 ve diğer sürümler için karşılık gelen 24 Eylül girişleri ile düzeltildi.
CVE-2014-7169 - Tavis tarafından bulunan dosya oluşturma / belirteç tüketimi hatası. Bash43-026 ve co (26 Eylül) tarafından düzeltildi
CVE-2014-7186 - Florian ve Todd tarafından tespit edilen olasılıkla sec-risksiz 10+ burada-doc kazası. Bash43-028 & co (1 Eki) tarafından düzeltildi.
CVE-2014-7187 - Florian tarafından tespit edilen çökmeyen, muhtemelen riskten korunma riski olmayan bir kişi. Bash43-028 & co (1 Eki) tarafından düzeltildi.
CVE-2014-6277 - başlatılmamış bellek sorunu, neredeyse kesinlikle RCE, Michal Zalewski tarafından bulundu. Henüz bir düzeltme eki yok.
CVE-2014-6278 - Michal Zalewski tarafından bulunan RCE komut enjeksiyonlu. Henüz bir düzeltme eki yok.
Kafa karıştırıcı olur. Neyse ki, resmi bash tutucusu Chet Ramey, yama haritalama için bir CVE gönderdi . Yazısı, bash 4.3 için yamalar anlamına geliyor, I (@OldPro), OS X için geçerli olan bash 3.2 için yamaları çevirdi. Ayrıca, bu yazı 57'den önce yayınlandığından beri, aşağıdakileri de ekledim:
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
Bir zaman çizelgesi ve daha fazla ayrıntı için David A. Wheeler'ın gönderisine bakın .
@alblue, yama 55 aracılığıyla derleme talimatları yayınladı.
Orijinal Güvenlik Açığı Testi
Bu testi uygulayarak CVE-2014-6271'deki orijinal soruna açık olup olmadığınızı belirleyebilirsiniz :
$ env x='() { :;}; echo vulnerable' bash -c 'echo hello'
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
hello
Yukarıdaki çıktı, savunmasız bir bash
versiyonun bir örneğidir . Bu vulnerable
komutun çıktısındaki kelimeyi görürseniz bash
, savunmasız ve güncelleme yapmalısınız. Aşağıda OS X 10.8.5’ten korunmasız bir versiyonu var:
Yeni Güvenlik Açığı Testi
Orijinal yayında bir güncelleme yapıldı ve Bash 3.2.52 (1), CVE-2014-7169'da tanımlanan güvenlik açığının bir çeşitliliğine karşı hala savunmasız
$ 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
Yukarıdaki çıktı, hassas bir bash
versiyonun bir örneğidir . Bu komutun çıktısında bir tarih görürseniz bash
, savunmasız kalırsınız .
"Oyun Sonu" nu önlemek için otomatik içe aktarma işlevlerini devre dışı bırakma
Araştırmacılar, bir güvenlik açığı olarak sınıflandırmadan, bir komut dosyasının otomatik içe aktarma işlevlerini kullanarak bir alt kabuktaki bir işlevi ele geçirebileceğini belirtti:
$ env ls="() { echo 'Game Over'; }" bash -c ls
Game over
Etkilenen bir sistemdeki yukarıdaki kod, Game Over
beklediğiniz dizinin yerine ekrana gelir ls
. Açıkçası, echo 'Game Over'
istediğiniz herhangi bir nefret kodu ile değiştirilebilir. Bu "Game Over" hatası olarak biliniyordu.
Yama 54 kullanılabilirliği önce hem NetBSD ve FreeBSD engelli oto ithal varsayılan olarak bash fonksiyonları kısmen "Game Over" önlemek için ancak esas (örneğin ayrıştırıcı herhangi başka hataların içermesi CVE-2014-7169 oldukları gibi) keşfedilmeyi sürdürmek ve yeni bir komut satırı bayrağı eklemek--import-functions
eski varsayılan davranışı yeniden etkinleştirmek için. I (@alblue), başkalarının da bu davranışı benimsemek ve kullanmaya devam etmeleri durumunda kullanmaları için bir yama hazırladım (3.2.53'e karşı). Varsayılan olarak bu düzeltme eki aşağıdaki derleme komut dosyasında etkin değildir. Ben (@OldPro) bu yamanın artık gerekli olmadığına ya da iyi bir fikir olduğuna inanıyorum, çünkü geriye dönük uyumluluktan kopuyor ve koruduğu güvenlik açıkları yama 54 ve daha önceki yamalar tarafından çok iyi ele alıyor ve bu resmi olmayan yamanın uygulanmasını önlüyor .
(Soru editörlerine not edin; lütfen resmi olmayan bir düzeltme eki olduğundan bunu varsayılan olarak etkinleştirmeyin.)
a0c5c4d66742fddd0a35001cb91798a5fbf8a2f5 import_functions.patch
Düzeltme eki export ADD_IMPORT_FUNCTIONS_PATCH=YES
, derlemeyi çalıştırmadan önce çalıştırılarak etkinleştirilebilir . Bu yamanın etkinleştirilmesinin yamayı (54) ve gelecekteki yamaları devre dışı bırakacağını unutmayın, çünkü gelecekteki yamalar resmi olmayan yamalar ile uyumlu olacağı garanti edilemez.
Apple Patch Oyun Aşırı güvenlik açığı içeriyor
Twitter'da @ake_____ tarafından işaret edildiği gibi , resmi Apple yaması hala çalıştırılabilir ortamların çevrelenmesine karşı hassastır:
$ env '__BASH_FUNC<ls>()'="() { echo Game Over; }" bash -c ls
Game Over
Kullanıcılar, bunun ne kadar önemli olduğuna kendileri karar vermelidir. Ben (@OldPro) endişelenecek bir şey olmadığını düşünüyorum çünkü bu davranış için bilinen bir istismar olmadı (hatta bir CVE tanımlayıcısı verilmedi), çünkü genel olarak imtiyazsız uzaktaki saldırganlar bir ortam değişkeninin adını belirleyemez ve ayrıcalıklara sahip saldırganlar Zaten sahip olmadıkları imtiyazları kazanmak için bunu kullanın (en azından ek bir güvenlik açığından yararlanmadan).
Küçük bir arka plan sağlamak için bash, işlevleri tanımlamanıza izin verir ve ayrıca bu işlevleriexport -f
komut aracılığıyla alt kabuklara vermenize izin verir . Bu, işlev tanımına ayarlanan değeri olan işlevle aynı ada sahip bir ortam değişkeni yaratılarak kullanılır. Yani
$ ls () { echo 'Game Over'; }
$ export -f ls
$ echo $ls
Game Over
Bu, export -f ls
adında bir ortam değişkeni yarattığı için oldu ls
. "Oyun Üstü" güvenlik açığı, ilk önce işlevi tanımlamak zorunda kalmadan doğrudan bu ortam değişkenini oluşturabilmenizdir; bu, doğru değişken adını enjekte ederseniz, bir komutu ele geçirebileceğiniz anlamına gelir. Apple, doğru ada sahip bir değişken oluşturmayı zorlaştırarak bunu düzeltmeye çalıştı. Resmi bash yaması (54) %
, dışa aktarılan işlev tanımlarını farklı, ayrılmış bir ad boşluğuna etkili bir şekilde koyarak, değişken bir adda izin verilmeyen bir karakter olan değişken adlarını kullanarak doğru adda bir değişken oluşturmayı imkansız kılar .
Yukarıdakilerin hiçbiri size mantıklı gelmiyorsa, endişelenmeyin. Şimdilik Apple yaması için iyisin.
Sistem İkilileri
OS X 10.9.5 (şu anda en son kararlı sürüm) Bash v3.2.51 ile birlikte geliyor:
$ bash --version
GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.
Bash'i aşağıdaki şekilde elde edip yeniden derleyebilirsiniz , Xcode'un kurulu olması şartıyla (ve xcodebuild
lisansı kabul etmek için en az bir kez çalıştırılmış olmanız şartıyla ):
$ # 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
(Not: Bunu yukarıdaki kod bloğunu kopyalayıp yapıştırarak, Terminal'e girip ardından çalıştırarak çalıştırabilirsiniz pbpaste | cut -c 2- | sh
. İnternetten rastgele komut dosyaları çalıştırırken her zaman dikkatli olun ...)
Bundan sonra Bash sürümü v3.2.57 olmalıdır:
$ bash --version
GNU bash, version 3.2.57-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.
Güvenlik ve testten sonra, chmod -x
tekrar kullanılmadıklarından emin olmak için eski sürümleri kullanmanızı veya bir yedekleme sitesine götürmelerini öneririm .
$ sudo chmod a-x /bin/bash.old /bin/sh.old
Diğer cevaplar MacPorts veya Homebrew kullananlar için çözümleri var; bunlar sorunu çözmez, sadece Bash'in ek versiyonlarını kurarlar. Bunları özellikle yükseltmek istiyorsanız lütfen bu cevaplara bakın.
Teşekkürler
Bash'a bakan ve bu yamaları hazırlayan Chet sayesinde. Bu konuda yorum yapan ve zaman içinde geliştiren herkese teşekkürler.
Şimdi Apple gerçek düzeltmeyi yayımladı, ancak bu hala faydalı olabilir. Çünkü sadece Lion ve üstü için bir düzeltme yayınladılar ve resmi yama GNU bash, 3.2.53 (1) sürümünü yayınladı (x86_64-apple-darwin13), ancak oyun bitti, hala biraz savunmasız. Bu noktada, kendi Bash sürümünüzü 3.2.57'ye göre yeniden inşa etmek, yanlış yapmadığınız sürece Apple'ın yamasına güvenmekten daha güvenlidir.