Shellshock'u önlemek için Bash'i nasıl yeniden derlerim (uzaktan yararlanma CVE-2014-6271 ve CVE-2014-7169)?


368

Bash 3.2'nin ( OS X tarafından gönderilen sürüm) "Shell Shock" ( CVE-2014-6271 ve CVE-2014-7169 ) olarak bilinen uzaktan yürütme açıklarına karşı savunmasız olduğu göz önüne alındığında, Bash'i yeniden nasıl kurarım ve Resmi Apple yaması?

GÜNCELLEME: Apple'ın artık resmi resmi yayınladığını unutmayın. Detaylar için aşağıya bakınız.


5
Elma bir düzeltme yayımladı: support.apple.com/kb/DL1769
AT

1
Yukarıda belirtilen OS X bash Güncelleme 1.0 yaması, OS X 10.9.5 ya da sonraki sürümlerine özgüdür - İşte hepsi: OS X 10.7.5 (Aslan), OS X 10.8.5 (Dağ Aslanı), OS X 10.9.5 ( Mavericks).
Ben

Evet, bağlantıları 9 saat önce ekledim ama yanlış silindiler. apple.stackexchange.com/revisions/146849/10
AlBlue

adımların çoğunu içeren ve zaten eklenmiş yamaları içeren bir gist.github.com/dnozay/395dcdef05c6b4b1836a yarattı (ve OSX 10.6'da çalışması gerekiyor).
dnozay

@dnozay Oyunuz için teşekkürler! Lütfen 55 ve 56 (zaten çıkmış) ve 57 (yakında çıkacak) yamaları içerecek şekilde güncelleyin.
Eski Pro

Yanıtlar:


429

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 bashversiyonun bir örneğidir . Bu vulnerablekomutun çı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:

10.8.5’te güvenlik açığı gösteren bash terminalinin ekran görüntüsü

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 bashversiyonun 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 Overbeklediğ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-functionseski 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 lsadı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 xcodebuildlisansı 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 -xtekrar 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.


18

MacPorts

Bu size hem güvenlik açıklarını (CVE-2014-6271 hem de CVE-2014-7169) hem de daha sonra keşfedilenleri yayan yamulma bir bash sürümü kazandırır. Bu, sürüm 4 özelliklerini elde etmek için Macports bash kullanmak için mermileri değiştirdiyseniz kullanışlıdır.

Standart işletim sistemi komut dosyaları sorununu ilk satır olarak #!/bin/shveya sahip olarak çözmeyecektir #!/bin/bash. Bu tür bir sorun Macports'un Macports daha hızlı güncellenme eğiliminde olduğu için Apple'ın programların sürümlerini kullanmamaya çalışmasının nedenidir.

Bunu terminalin Homebrew cevabındaki gibi kullanmasını sağlayabilirsiniz.

MacPorts izleyin yüklemek için bu talimatları vardır
: 1. Yükleme Xcode ve Xcode Komut Satırı Araçları
2. Terminalinde Xcode lisansı kabul edin: sudo -Lisans xcodebuild
OS X sürümü için 3. İndir MacPorts pkg: bağlantılar sayfasında yer alır
4. Pkg'yi çalıştır

Macport yüklü olduğunda en son sürümlere ihtiyacınız var, bu çalıştırılarak yapılır

sudo port selfupdate

ve derlemek veya en son ikili dosyaları almak

sudo port upgrade outdated

5
Bu, mevcut ikili dosyalardaki bir güvenlik açığını düzeltmekle ilgili olduğundan ve bu güvenlik açığı bulunan ikili dosyaları değiştiremez / düzeltmez, bunun sorunun nasıl çözüldüğünü göremiyorum.
AlBlue

Macports versiyonunu yükseltir - ve IanC'nin yorumuna gerçekten istekliydi
Mark

Evet. bashGenelde OS X'ten gelen tüm yerler için düzeltmeleri listelememiz gerekir - bu nedenle sistem düzeltmesi, Homebrew ve MacPorts düzeltmesi. Muhtemelen Fink de. @ AlBlue'nun cevabına bir düzenleme olarak yapılmışsa, şahsen tercih ederim. Yani hepsi bir, en doğru cevap.
Ian C.

2
@Bu cevaplar farklılık gösterdiğinden ve büyük bir kontrol edilemeyeceğinden bunlar ayrı olmalıdır - örneğin, bunun Apple'ın bash ve Homrewrew bash'ın OSX üzerinden kopyalanmasını sağlamadığını söyledi. Aslında bunlar ayrı sorulardır
Mark

@ AlBlue'nun cevabındaki düzenlememe bakın. Bunların ayrı olması gerektiğine katılmıyorum.
Ian C.

17

Resmi Apple OS X bash Güncelleme 1.0 ile ilgili not: Bu yazılım güncellemesi sadece resmi Apple bash sürümünü 3.2.53'e getirir. 3.2.54 yama revizyonu aşağıdaki değişiklikleri sunar:

Bu düzeltme eki, dışa aktarılan işlevlerde, kabuk değişkenleriyle çakışmayı önlemek ve bir kabuk işlevi olarak yorumlanıp yorumlanmayacağını belirlemek için yalnızca bir ortam değişkeninin içeriğine bağlı kalmaktan kaçınmak için kullanılan kodlama bash'ını değiştirir.

Sistemi zaten 3.2.54 ikili dosyayla ekleyen kullanıcılar için, derlenmiş ikili dosyalarınızı Apple yamasıyla değiştirebilir veya bir şeyleri olduğu gibi bırakabilirsiniz ancak tavsiye edilmez. Her ne kadar Apple 3.2.53'te ikili sürümlerini bırakmış olsa da , Apple yaması DOES aşağıdaki açık artırma testi için düzeltmeyi içermektedir:

env X='() { (a)=>\' sh -c "echo date"; cat echo

Bu, Apple resmi 3.2.53 ikili dosyasının, vanilya GNU 3.2.54 ikili için eşdeğer güvenlik içerdiği anlamına gelir. Talihsiz bir karışıklık noktası, ama budur. Apple'ın düzeltme yarı pişmiş değil. Sorun için tam bir düzeltme gibi görünüyor. Bu nedenle, vanilyayı derlemekte bashve shGNU kaynağından gelen yol haritası, tarihi bir eser olarak değerlendirilmeli ve gelecekte yamalar yapılması gerektiğine dair bir şablon olarak danışılmalıdır.

NOT: Vanilya GNU kaynağında, shçeşitli yükleyicilerde, örneğin Adobe Flash'ta arızalara neden olan ayrıcalık yükseltme sorunları vardır. Apple yamalı ikili dosyalara bağlı kalmanızı şiddetle tavsiye ederim. Bu yama planının kullanımdan kaldırılması ve tavsiye edilmemesini düşünün.

Aşağıdaki düzeltmeyi açıklayan yeni bir GNU bash 3.2.55 yaması var:

Hata-Açıklama:

Parse.y dosyasında iki yerel arabellek taşması vardır, bunlar tek bir komuta eklenmiş çok sayıda belgeye veya iç içe geçmiş bir döngüye verildiğinde kabuğun çekirdek dökmesine neden olabilir.

Resmi Apple yamalı ikili dosyalarla oturup oturmama ya da yeni olası istismarlarla başa çıkmak için kendi yolunuzu açıp açmadığınızı belirlemek için nazik bir okuyucuya bırakıyoruz. Şahsen ben Apple ikili dosyalarına sadık kalacağım.


Bu yazı, bir vanilyanın nasıl derlenip kurulacağına bashve shOS X'e nasıl yükleneceğine dair ayrıntılı bilgi veriyor . Bu rotayı, Apple'a özel kaynak kullanarak detaylandırma örneklerinin beni doğru düzeltme eki düzeltmesine bırakmadığı için seçtim. YMMV. Bununla birlikte, bu vanilya kurulumunda, OS X ikili dosyalarının değiştirilmesi amaçlanmaktadır, böylece Apple nihayet bir güvenlik güncellemesi yayınladığında, bu vanilya değişikliklerinin uygun Apple muadilleri tarafından kullanılacağı öngörülmektedir.

Temel yapılandırmam:

Tüm komut satırı yardımcı programları yüklü olan OS X Lion 10.7.5 ve Xcode 4.6.3.

Bunu düzeltmek için attığım adımlar:

3.2.48 için bash kaynak kodunu aşağıdaki adresten indirin:

https://ftp.gnu.org/gnu/bash/bash-3.2.48.tar.gz

Bash3.2.49, .50, .51, .52, .53, .54 ve .55 yamaları indir:

https://ftp.gnu.org/gnu/bash/bash-3.2-patches/

Bunları $ dosyaadı.patch, örneğin, bash3.2.50.patch olarak kaydettim.

İndirme dizinine CD ve…

Ana kaynak şubesini ambalajından çıkarın:

tar xzvf bash-3.2.48.tar.gz

cd bash-3.2.48

İndirilen yama dosyalarınızı daha önce açıklandığı şekilde yeniden adlandırdığınızı varsayarak,

cp ../*.patch .

Sonra …

for file in *.patch ; do
  patch -p0 < $file
done

Bu, çeşitli dosyalardan başarılı yamalar göstermelidir. Değilse, bazı keşif ve soruşturma yapmaya hazır olun.

Sonraki:

sudo cp /bin/bash /bin/bash_old
sudo cp /bin/sh /bin/sh_old
sudo chmod -x /bin/bash_old
sudo chmod -x /bin/sh_old

Bu temelde, eski, savunmasız bash ve kabuklarınızı yedekledi ve çalıştırılabilir ayrıcalığını kaldırdı. Bu size komutları gerektiği gibi geri yükleme kapasitesini verir, ancak bu arada zarar verme yeteneklerini de ortadan kaldırır.

Sonraki:

./configure --prefix=/ ; make ; sudo make install

Bu, yeni bash binary'ini / bin içine doğru şekilde yapılandırmalı, derlemeli ve kurmalıdır. İşlem tamamlandıktan sonra Terminal'den çıkın ve tekrar açın.

Mutlu ve gülümseyerek her şeyi yapabilmeli bash --versionve şimdi 3.2.55'i görmelisin, örneğin:

Gaia:Downloads trane$ bash --version
GNU bash, version 3.2.55(1)-release (i386-apple-darwin11.4.2)
Copyright (C) 2007 Free Software Foundation, Inc.

Yukarıdaki komuttaki tam çıktı OS X sürümünüze bağlı olarak değişecektir.

Ayrıca, güvenlik açığınızı sınamaya karşı test edebilmeli bashve iyi olduğunu bulmalısınız.

NOT: Şimdiye kadar sadece bash'i düzelttik, ancak /bin/shçalıştırılabilir durum hala savunmasız durumda. Sadece bashüstüne kopyalamak shişleri yapmak için Linux tarzıdır. OS X'in shuygulamasından bazı farklılıklar var bash, bu yüzden derleyiciyi tekrar çıkarmak isteyeceksiniz. OS X'te nasıl bashve shfarklı olduğu konusunda daha fazla bilgiyi burada bulabilirsiniz:

https://apple.stackexchange.com/a/89327/91441

İndirme dizininizde:

make clean

Favori düzenleyicisinde, dosyayı açmak Makefile.inve ikili biz çıkış olmasını sağlayacak şekilde Program çizgisini değiştirmesi için 99. sıraya ilerleyin shyerine bashşöyle:

Program = sh$(EXEEXT)

Kaydet ve sonra

./configure --prefix=/ --enable-xpg-echo-default --enable-strict-posix-default
make ; sudo make install

Şimdi shneredeyse aynen Apple'ın yapacağı gibi yaptınız .

Son bir not: Bazı (tümü?) Sistemlerde, Apple genellikle bashbugyürütülebilir dosyayı yerleştirir gibi görünmektedir /usr/bin. Derlememiz bunu koyacak /bin. Yani, burada son adımlar:

sudo mv /usr/bin/bashbug /usr/bin/bashbug_old
sudo chmod -x /usr/bin/bashbug_old
sudo mv /bin/bashbug /usr/bin/bashbug

1
Whine ya da hiçbir şey değil, ama soru "bash'ı nasıl derlerim" ve cevabım "soruyu cevaplamak için aşağıdaki linke tıkladığınızda, özet gereksinimlerinin geçerli olduğu görülüyor."
Trane Francks

2
Anladım: bash içindeki readline kütüphanesi 10.6 ile uyumlu değil. Bunun yerine GNU okuma satırını kurun ve ardından bash makefile dosyasını kullanmak için kesmek. Readline'ı kurun: ftp.cwru.edu/pub/bash/readline-6.3.tar.gz Bash'ta , config yaptıktan sonra Makefile'de READLINE_LIB = /usr/local/lib/libreadline.atemiz bir derleme yapın ve yapın. Ardından üzerine yeni bash /bin/bash/bin/sh
Seth Noble

2
Zeyilname: bash Makefile dosyasında ayarlamak da gereklidir HISTORY_LIB = /usr/local/lib/libhistory.a. Aksi takdirde bash, libhistory'nin / usr / yerel versiyonuna dinamik olarak bağlanacaktır.
Seth Noble

1
Apple açık kaynak sayfasından indirilebilir sürümün, OSX üzerinde çalışması için özel değişikliklere sahip olduğunu unutmayın. Vanilya giriş bashını kullanmanızı tavsiye etmem, aksi taktirde benzeri değiştirmeyi yapmazsınız.
AlBlue

1
Apple, sistemdeki açık kaynak kodlu programları optimize etmek için birçok değişiklik yapar. Bununla birlikte bash, çekirdeğin farklı olduğu için bir vanilin nerede bir şekilde kendi kendine davranamadığını göremiyorum . Her durumda, çözümümün geçici olduğunu düşünüyorum; Sonunda, Apple sorunu düzeltmek için etrafta dolanacak ve derlenmiş ikili dosyalarım değiştirilecek ( /binilk etapta derlememin temel sebebi bu.
Trane Francks

15

Kaynaktan derlemekle mücadele eden herkes için, 29 Eylül'den itibaren, Apple, Mac OS X 10.9.5, 10.8.5 ve 10.7.5 için resmi olarak yamalar yayınladı:


1
Teşekkürler! Bu, çoğu / çoğu için yeniden derlemekten daha kolay olabilir.
AlBlue

@AlBlue Anlaşıldı. Ayrıca, bazılarının işaret ettiği gibi, tamamen temiz olmamasına rağmen, bu hiç olmamasından çok daha iyidir. Ve bazı acemi bir panik içinde kaynak kodunu derleme daha güvenli.
JakeGould,

2
Her zaman olduğu gibi, Yazılım Güncellemesi yayılma gecikmesi tam etkilidir. Paketlerin ortaya çıkmasının ne kadar süreceğini merak ediyorum. Apple'ın bu soruna oldukça hızlı yanıt verdiğini görmek çok güzel!
Trane Francks,

2
@TraneFrancks “Her zamanki gibi, Yazılım Güncellemesi yayılma gecikmesi tam olarak etkin.” U2'nin tüm albümünü tüm iOS kullanıcılarına zorlayan ve bir şekilde 4 MB'lık bir güvenlik güncellemesinde boğulabilecek bir organizasyonun nasıl olduğunu gerçekten anlamıyorum.
JakeGould

@JakeGould: Heh. Evet, bu bir kıkırdama. Bu Lion sisteminde Yazılım Güncellemesini kontrol ettim ve sistemin güncel olduğunu iddia ediyor. Burada başka bir Mountain Lion sistemi ile aynı.
Trane Francks

5

Öncelikle, bu güvenlik açığı için bash ve sh eklenmesi Mac'inizdeki bazı komut dosyalarını kırabilir. Doğrudan Mac'inizden halka açık internete web hizmetleri sunmadığınız sürece, bunu gerçekten yapmanız gerekmez. Bu yüzden gerçekten gerekli değilse, Apple'dan resmi bir güvenlik güncellemesi yapılıncaya kadar bekleyin.

Uyarılırken, bu güncellemeyi Brew on Mavericks 10.9 kullanarak nasıl yapacağınızla ilgili bazı talimatlar verilmiştir.

Öncelikle eski bir bash kullandığınızı onaylayın:

$ which bash
/bin/bash
$ /bin/bash --version
GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.

En güncel bash 4.3.25

Yüklü Xcode'unuz yoksa, yükleyebileceğiniz Xcode komut satırı araçlarına ihtiyacınız olacaktır.

$ xcode-select --install

Veya geliştirici portalından .

Brew'u kurmak için ( http://brew.sh ):

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

O zaman yapın:

$ brew doctor

Herhangi bir sorun varsa talimatları izleyin. Burada birçok yaygın sorun ele alınmaktadır .

Ardından demiri en son paket listesine güncelleyin:

$ brew update

En son bash 4.3.25'i edinmek için:

$ brew install bash

Bu bash içine yükler /usr/local/Cellar/bash/4.3.25/bin/bash

Eski bashve shhala var /bin, bu yüzden kurduktan sonra eski çalıştırılabilir dosyaları yeni bir dosyaya değiştireceksiniz.

$ sudo mv /bin/bash /bin/bash_old
$ sudo mv /bin/sh /bin/sh_old

Çok paranoyaksanız, bilgisayardaki yürütme izinlerini kaldırabilirsiniz. bash_old

$ sudo chmod a-x /bin/bash_old /bin/sh_old

Sonra demlenecek olan yeni bash 4.3.25 ile sembolik bir bağlantı oluşturun.

$ sudo ln -s /usr/local/Cellar/bash/4.3.25/bin/bash /bin/bash
$ sudo ln -s /usr/local/Cellar/bash/4.3.25/bin/bash /bin/sh

Yeniden başlatın ve tamamlandı.

Bir uyarı - bu, bash 3.2'ye ya da Mac'in shlinux üzerindeki farklarına dayanabilecek varolan bazı kabuk komut dosyalarını kırabilir sh. Bu aynı konudaki @TraneFranks tarafından verilen bir cevaptan bash ve sh 'ı kaynaklardan değiştirmenin çok daha karmaşık bir cevabı var.


4
3.2.51'den 3.2.52'ye düzeltme eki, 4.3. 'E yükseltmekten çok daha az hasara yol açacaktır.
AlBlue

Bazı senaryoları kırabileceği konusunda uyarıyorum, ancak 4.3.25 Brew'un şu an yüklediği kurulum - Bu işlemi yapmak için sıfırdan başlaması kolay bir sürüm sunmaya çalışıyorum. Ve eski çalıştırılabilir dosyaları yeniden adlandırarak her zaman geri yükleyebilirsiniz.
Christopher Allen

2
Bu hata, kötü niyetli bir DHCP sunucusu (örneğin WiFi bağlantı noktası) tarafından kullanılabilir ve bilgisayarınızı tamamen delinebilir, bu yüzden en kısa sürede düzeltmeye değer. Diğer cevapların değiştirilmesi konusunda daha iyi talimatlar vardır /bin/bashve /bin/shbu, Brew’un en son bash’ına yükseltme yapmaktan daha az soruna neden olabilir.
Eski Pro

Mac, DHCP saldırısına açık olmayabilir.
Christopher Allen

10
DCHP sunucusu saldırısı yalnızca DHCP istemciniz OSX uygulamasının kullanmadığı Bash komut dosyaları kullanıyorsa mümkündür.
AlBlue

5

OS X 10.6.8 - Kar Leoparı

@AlBlue'nin gönderisi çok tamamlandı. Ancak, OS X 10.6.8 sunucumda düzeltmesi çalışmaz. Apple 10.6.8 için düzeltmeye sahip değil ve @AlBlue tarafından açıklanan adımlar Xcode 3.2.6 ile (Snow Leopard için en son sürüm) çalışmaz. Bir hata alıyorum:

** BUILD FAILED **

The following build commands failed:
sh:
    CodeSign /Users/bas/bash-fix/bash-92/build/Release/sh
bash:
    CodeSign /Users/bas/bash-fix/bash-92/build/Release/bash
(2 failures)

Bu sebepten dolayı brew.sh kullanıyorum . OS X 10.6.8 Snow Leopard için daha iyi bir çözüm olduğunda lütfen düşüncelerinizi yorumlayın. Ayrıca, @Jerome yorumuna, @ AlBlue'nun çözümünü kullanarak OS X 10.6.8 Snow Leopard'da başarılı bir yaması vardı. Neyse:

İlk önce demiri aşağıdaki oneliner ile kurun:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Güncelleme brew

brew update

Şimdi sadece en son sürümünü yükleyin bashve mevcut olanı değiştirin:

brew install bash
sudo sh -c 'echo "/usr/local/bin/bash" >> /etc/shells'
chsh -s /usr/local/bin/bash
sudo mv /bin/bash /bin/bash-backup
sudo ln -s /usr/local/bin/bash /bin/bash

Command (complete path)Terminal.app için varsayılan oturum açma kabuğunu ' ' tercihlerinde ( Command,) ayarlayabilirsiniz.görüntü tanımını buraya girin


not: Yorumlarda, bazı kullanıcılar bu yöntemin uygun olduğunu düşünmüyorlar. Ancak benim için, OS X 10.6.8 Snow Leopard'daki BASH'i yükseltmek için anlaşılabilir tek yöntem.


1
ayrıca bazı senaryolar bash 3'e güveniyor ve bash 4 ile çalışmaz (macport'lar, ev demiryolunun güncellediğini varsaydığım bash 4.3.25'i sabitledi
Mark

2
Siz de güncelleme yapmıyorsunuz sh- bunu da yapmanız gerekiyor. /bin/sh! = /bin/bash. /bin/shSistem komutlarını çalıştırdığınızda birçok araç çalıştırılır. system()Örneğin Ruby'nin çağrısı, /bin/shdizede genişletilmesi gereken bir kabuk genişletme karakteriniz olduğunda kullanır . Sistem ikili dosyalarınızı IMO'yu güncellemek için Homebrew kullanarak kaybedilen bir oyun oynuyorsunuz. Sistem ikili dosyalarını uygun şekilde güncellemenin bash yanı sıra Homebrew's'i de güncellemelisiniz .
Ian C.

1
OSX 10.8 ve 10.9'un Bash 3.2 kullandığını unutmayın, bu yüzden doğrudan tutarlılık için sürüm olarak 3.2 ile gittim. Bu aynı zamanda, Apple'ın önceki özellik için resmi özelliklerine dayanıyordu; bu özellik, genişletilmiş öznitelik farkındalığı vb. Gibi ekstralar içerebilir.
AlBlue

1
Tüm durumlarda kendime 3.2.6 koşuyorum. Yaparken derleme başarısız olur anlıyorum xcodebuild? Eğer öyleyse, bunu yaşamadım. Size bir kenara bırakacağım birkaç önerim var: birden fazla bash yapınız olup olmadığını kontrol edin, temizlemeyi (demeti kaldırmayı) ve muhtemelen xcode'u yeniden kurmayı düşünün ... sonra yama işlemini yeniden başlatın.
Jerome,

1
Snow Leopard'da elle yapılan stok bash-4.3 ile ilgili ciddi iş kontrolü sorunları yaşadım (Emacs başlatıp askıya alırsam, 'fg' ile devam ettiremem). Bash için Snow Leopard kaynağını opensource.apple.com/release/mac-os-x-1068 adresinden indirdim , yamaları ftp.gnu.org/gnu/bash/bash-3.2-patches adresinden uyguladım ve yeniden oluşturdum. çok daha iyi etki.
mormegil

-6

Talimatları buradan takip edebilirsiniz: https://github.com/tjluoma/bash-fix Temel olarak, bir Terminalde aşağıdakileri yapın:

curl -s https://raw.githubusercontent.com/tjluoma/bash-fix/master/bash-fix.sh | zsh -f

5
Rasgele github hesaplarından rasgele kabuk komut dosyalarının çalıştırılması, herhangi bir makinede daha güvenli bir duruma nasıl ulaşacağınızla ilgili değildir. Son noktaya güvenmek istiyorsun.
Ian C.

Burada Ian ile aynı fikirdeyim. Bu CVE'lerin tarif ettiği problemler gibi, güvenilmeyen kabuk betikleri vasıtasıyla bazı dramatik hasarlar vermek gerçekten kolaydır.
Trane Francks

Bu FUD yayılımına kesinlikle katılmıyorum. Tüm kabuk komut dosyalarını çalıştırmadan önce ve sadece https: // 'den OKUYUN
dhchdhd
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.