Bash Shellshock güvenlik açığı arkasındaki davranış veya kasıtlı belgelenmiştir?
Yeni bir güvenlik açığı, CVE-2014-6271, Bash çevre değişkenleri was disclosed yorumlar. İstismar Bash fonksiyon tanımlaması olarak bazı ortam değişkeni tanımlamalar ayrıştırma, ama sonra tanımını aşağıdaki kodu çalıştırmak için devam dayanıyor:
$ x='() { echo i do nothing; }; echo vulnerable' bash -c ':'
vulnerable
Ama anlamıyorum. Fonksiyonları gibi ortam değişkenleri yorumlama hakkında Bash el kitabında bulmak mümkün oldum bir şey yok (hariçmiras fonksiyonlarıfarklı olan). Gerçekten de, uygun adında bir işlev tanımı sadece bir değer olarak kabul edilir:
$ x='y() { :; }' bash -c 'echo $x'
y() { :; }
Ama bozuk bir şey yazdırır:
$ x='() { :; }' bash -c 'echo $x'
$ # Nothing but newline
Bozuk işlev isimsiz ve sadece karar veremiyorum. Ben bunu göremiyoruz bu saf uygulama bir hata, güvenlik açığı, veya oraya yönelik bir özellik işte.
Güncelleme
Barmar yorum başına, ben öne işlev adı, parametre adı:
$ n='() { echo wat; }' bash -c 'n'
wat
Daha önce denedim yemin edebilirim, ama yeterince çalışmadım sanırım. Tekrarlanabilir. Burada biraz daha test edilmesi
$ env n='() { echo wat; }; echo vuln' bash -c 'n'
vuln
wat
$ env n='() { echo wat; }; echo $1' bash -c 'n 2' 3 -- 4
wat
...görünüşe göre argümanlar istismar yürütür zamanda ayarlanmamış.
Benim için temel soru cevap . her neyse, ^em>evet, bu Bash uygular fonksiyonları miras kaldı.
CEVAP
Bu uygulama, bir hata gibi görünüyor.
Görünüşe göre, ihraç fonksiyonları bash
çalışma şeklinizi, özel olarak biçimlendirilmiş ortam değişkenleri kullanırlar. Eğer bir fonksiyon verme:
f() { ... }
bir ortam değişkeni tanımlar:
f='() { ... }'
Muhtemelen neler olduğunu yeni kabuk ()
ile başlayan bir ortam değişkeni gördüğünde değişken adı başa ve sonuç dizesi yürütür. Hata bu her şeyi yürütme içerirsonrabu da fonksiyon tanımlama.
Düzeltme görünüşe göre eğer geçerli bir işlev tanımı diye sonuç ayrıştırmak için açıklanmıştır. Değilse, geçersiz fonksiyon tanımlama girişimi hakkında uyarı yazdırır.
This article hatanın nedenini açıklamamı doğruluyor. Ayrıca düzeltme çözümler hakkında biraz daha detaya gider: sadece değerleri daha dikkatli ayrıştırma yapıyorlar, ama geçiş için kullanılan değişkenler fonksiyonlar özel bir adlandırma kuralı takip et ihraç etti. Bu adlandırma bu ortam değişkenleri, CGI betikleri için oluşturulan için kullanılan farklı bir HTTP istemci asla bu kapı kendi ayak almak gerekir.
Java Güvenlik: Geçersiz anahtar boyutu...
Ekle " nasıl Bash, emin [E/H]"...
Windows için Git: .bashrc veya eşdeğer...
Ne kadar ciddi bu yeni ASP.NET güvenli...
Ne varsayılan MySQL davranış KATILMAK,...