Qualys'ten güvenlik araştırmacıları
Sorun, stralloc_readyplus() işlevindeki çok büyük bir ileti işlenirken ortaya çıkabilen bir tamsayı taşmasından kaynaklanmaktadır. İşlem, 64 GB'tan fazla sanal belleğe sahip 4 bitlik bir sistem gerektiriyordu. Güvenlik açığı ilk olarak 2005 yılında analiz edildiğinde Daniel J. Bernstein, koddaki tahsis edilen dizinin boyutunun her zaman 32 bitlik değer dahilinde olduğu varsayımının, hiç kimsenin her işleme gigabaytlarca bellek sağlamadığı gerçeğine dayandığını savundu. Son 15 yılda, sunuculardaki 64 bit sistemler 32 bit sistemlerin yerini aldı ve sağlanan bellek miktarı ve ağ bant genişliği önemli ölçüde arttı.
qmail paketi bakımcıları, Bernstein'ın notunu dikkate aldı ve qmail-smtpd işlemini başlatırken kullanılabilir belleği sınırladı (örneğin, Debian 10'da sınır 7MB olarak ayarlanmıştır). Ancak Qualys mühendisleri bunun yeterli olmadığını ve test edilen tüm paketlerde kısıtlamasız kalan qmail-smtpd'ye ek olarak qmail-local sürecine de uzaktan saldırı gerçekleştirilebileceğini buldu. Kanıt olarak, Debian paketine varsayılan konfigürasyonda qmail ile saldırmaya uygun bir istismar prototipi hazırlandı.
Bir saldırı sırasında uzaktan kod yürütülmesini organize etmek için sunucunun 4 GB boş disk alanına ve 8 GB RAM'e ihtiyacı vardır.
Bu istismar, “/home” dizininde kendi alt dizini olmayan kök ve sistem kullanıcıları hariç, sistemdeki herhangi bir kullanıcının haklarıyla herhangi bir kabuk komutunu çalıştırmanıza olanak tanır (qmail-local işlemi, haklarla başlatılır). Teslimatın gerçekleştirildiği yerel kullanıcıya ait).
Saldırı gerçekleştirilir
Birkaç başlık satırı içeren, yaklaşık 4 GB ve 576 MB boyutunda çok büyük bir posta mesajı göndererek. Böyle bir dizenin qmail-local'de işlenmesi, yerel kullanıcıya bir mesaj teslim edilmeye çalışıldığında tamsayı taşmasına neden olur. Tamsayı taşması, veri kopyalanırken arabellek taşmasına ve libc koduyla bellek sayfalarının üzerine yazılma olasılığına yol açar. İletilen verilerin düzenini değiştirerek, "open()" işlevinin adresini yeniden yazmak ve onu "system()" işlevinin adresiyle değiştirmek de mümkündür.
Daha sonra, qmail-local'da qmesearch() öğesinin çağrılması sürecinde, open() işlevi aracılığıyla “.qmail-extension” dosyası açılır ve bu, işlevin fiilen yürütülmesine yol açar.
system(".qmail-uzantısı"). Ancak dosyanın "uzantı" kısmı alıcının adresine göre oluşturulduğu için (örneğin, "yerelkullanıcı-uzantısı@yereletki alanı"), saldırganlar "localuser-;command" kullanıcısını belirterek gönderilecek komutun çalıştırılmasını ayarlayabilir. Mesajın alıcısı olarak ;@localdomain”.
Kod analizi sırasında Debian paketinin bir parçası olan ek qmail-verify yamasında da iki güvenlik açığı tespit edildi. İlk güvenlik açığı (
Soruna geçici bir çözüm bulmak için Bernstein, qmail işlemlerinin toplam kullanılabilir bellek sınırıyla ("softlimit -m12345678") çalıştırılmasını önerdi; bu durumda sorun engellenir. Alternatif bir koruma yöntemi olarak, işlenen mesajın maksimum boyutunun “kontrol/databytes” dosyası aracılığıyla sınırlandırılmasından da bahsediliyor (varsayılan olarak varsayılan ayarlarla oluşturulmaz, qmail savunmasız kalır). Ayrıca "kontrol/databaytlar", sınır yalnızca qmail-smtpd'de dikkate alındığından, sistem kullanıcılarının yerel saldırılarına karşı koruma sağlamaz.
Sorun paketi etkiliyor
Kaynak: opennet.ru