GnuTLS, bellek yanlış yönetimi hatasını düzeltir - şimdi güncelleyin!

Kaynak Düğüm: 1603833

Açık kaynak dünyasındaki en iyi bilinen kriptografik kitaplık neredeyse kesinlikle OpenSSL.

İlk olarak, en yaygın kullanılanlardan biridir, öyle ki çoğu platformdaki geliştiricilerin çoğu, doğrudan kullanmamış olsalar bile bunu duymuştur.

İkincisi, ne yazık ki bilinen oldukça kötü bir böcek yüzünden muhtemelen en yaygın olarak duyurulanıdır. Heartbleed sekiz yıldan fazla bir süre önce keşfedildi.

Derhal yama yapılmasına rağmen (ve savunmasız OpenSSL sürümlerini hızlı bir şekilde güncelleyemeyen veya güncellemeyen geliştiriciler için mevcut güvenilir geçici çözümlere rağmen), Heartbleed, en azından ilk hatalardan biri olduğu için bir tür “vitrin” hatası olmaya devam ediyor. kaşifleri tarafından agresif bir PR aracına dönüştü.

Etkileyici bir isim, tamamen kendine ait bir logo ve özel bir web sitesi ile Heartbleed, hızla küresel bir siber güvenlik haline geldi. süper hikayeve, iyi ya da kötü için, adın anılmasıyla ayrılmaz bir şekilde bağlantılı hale geldi. OpenSSL, sanki hatanın tehlikesi, koddan çıkarıldıktan sonra bile devam ediyormuş gibi.

OpenSSL'nin ötesinde yaşam

Ancak OpenSSL'nin yanı sıra veya onun yerine yaygın olarak kullanılan, özellikle Mozilla'nın da dahil olduğu birkaç açık kaynaklı şifreleme kitaplığı vardır. NSS (için kısa Network Güvenlik Hizmetleri) ve GNU projesinin GnuTLS kütüphane.

Olduğu gibi, GnuTLS olarak bilinen bir hatayı düzeltti. CVE-2022-2509, proje raporunda güvenlik danışma GNUTLS-SA-2022-07-07.

Bu düzeltme eki, olarak bilinen bir bellek yanlış yönetim hatasını düzeltir. çift ​​ücretsiz.

Çift serbest açıkladı

Basitçe söylemek gerekirse, bir programcı işletim sisteminden geçici olarak kullanmak üzere bir bellek bloğu tahsis etmesini istediğinde çift serbest bir güvenlik açığı oluşturulur…

…ve programın diğer bölümleri tarafından kullanılmak üzere serbest bırakılmak üzere ödünç verilen bloklar listesinden silinebilmesi için geri verir…

…ve sonra yanlışlıkla sistemden aynı bellek bloğunu yeniden boşaltmasını ister.

İdeal olarak, bellek ayırma yazılımı, bloğun artık programın onu "geri döndüren" kısmına ait olmadığını algılayacak, sorunlu bloğun zaten geri dönüştürüldüğünü anlayacak ve ikinci kez yeniden tahsis etmeyecek, böylece kenara atılacaktır. yeniden “serbest bırakma” riskleri.

Proaktif olarak tespit edilen bir çift serbestlik ile nazikçe ilgilenmek zor bir konudur. Belleği geri veren C işlevi şu şekilde prototiplenir: void free(void *ptr); böylece serbest bırakmak istediğiniz bir bloğun adresini girersiniz, ancak geri dönüş kodu almazsınız. (AC fonksiyonu ile bir void dönüş değeri, diğer programlama dillerinin a dediği şeydir. procedure: sizin için bir şey yapar, ancak bir sonucu bildirmenin bir yolu yoktur.) Bu nedenle, dikkatlice yazılmış C kodunun bile, bir şeylerin yanlış gittiğini tespit etmenin standart bir yolu yoktur. free()ve bu nedenle, düzgün bir şekilde kapatmaya çalışarak hatayı ele almanın bir yolu yoktur. Suçlu programı tek taraflı olarak sonlandırmak, sistem için tek güvenli çözümdür.

Ancak bellek tahsisi bunu fark etmezse (belki de aynı blok o zamandan beri aynı programın başka bir bölümüne dağıtıldığından, bu nedenle “ödünç verilenler” listesine daha önce olduğu gibi tamamen aynı biçimde geri döndüğü için) , o zaman kötü şeyler olması muhtemeldir.

Özellikle, bellek yöneticisi istemeden ve beklenmedik bir şekilde şu anda onu yasal olarak kullanan koddan çift serbest bırakılan bloğa "el koyabilir" ve onu programın başka bir bölümüne, hatta belki de bir saldırganın yararlanmak için dikkatlice zamanladığı kötü amaçlı koda yeniden atayabilir. yanlış yönetimden.

Böylece, aynı bellek yığınını manipüle eden aynı programın iki parçasına sahip olabilirsiniz.

Programın bir kısmı, kendisini bloğun meşru "sahibi" olarak gördüğünden, bellek içeriğine dolaylı olarak güvenebileceğini varsayar.

Aynı zamanda, programın başka bir kısmı, ilk kısmı kasıtlı olarak açmak için verilerle uğraşabileceğini (veya kandırılarak karıştırılabileceğini) biliyor.

Yanlış şeyi yapmak doğru şeyi yapar

İronik olarak, CVE-2022-2509 hatası, GnuTLS'deki sertifika doğrulama kodunda bulunur.

(Merak ediyorsanız, ironi, güvenilir TLS bağlantılarını kontrol etmeye zahmet etmediği için genel olarak güvensiz olan yazılımın bu özel güvenlik hatasına karşı bağışık olmasıdır.)

Örneğin, TLS ile güvence altına alınmış bir web sitesini (veya başka türde bir sunucuyu) ziyaret ettiğinizde, diğer uç genellikle size sunucunun gerçekten beklediğiniz kuruluşa ait olduğunu ve bu kuruluş tarafından işletildiğini iddia eden bir web sertifikası gönderir.

Elbette, herkesin istediği adla sertifika oluşturabileceği düşünüldüğünde, ham sertifika tek başına size pek bir şey söylemez, bu nedenle sertifika sahibi genellikle tarayıcınızın zaten güvendiği bir şirket tarafından dijital olarak imzalanır.

Uygulamada, sertifikalar genellikle bir sertifika tarafından imzalanır, bu da tarayıcınızın güvendiği bir sertifika tarafından imzalanır, ancak sonuç şu şekilde adlandırılır: güven zinciri olarak adlandırılan bir listeye zaten yüklenmiş olan bir sertifikaya kadar güvenli bir şekilde izlenebilen Güvenilir Yetkililer, Ayrıca şöyle bilinir Kökler, tarayıcınız veya işletim sisteminiz tarafından yönetilir.

Sertifika zincirini doğrulama sürecini basitleştirmek ve hızlandırmak için, birçok sunucu yalnızca kendi sertifikalarını gönderip güvenilen bir köke "zinciri kovalamak" için tarayıcıya bırakmaz.

Sunucu tipik olarak, yalnızca bir kez oluşturması gereken, güvendiği güven zincirini içerir, böylece tarayıcınız veya sertifikayı doğrulayan herhangi bir yazılım, zincirin dijital olarak geçerli olup olmadığını kontrol edebilir ve ardından son sertifikanın doğrulandığını doğrulayabilir. zincirde zaten güvenilir olanla eşleşir.

Bu durumda, GnuTLS, sadece depolamak için kullanılan bellek bloğunu boşaltmadan önce sağlanan sertifikayı doğru ve güvenli bir şekilde doğrulayacaktır.

Ancak diğer uç önceden oluşturulmuş bir sertifika zinciri sağlamıyorsa ve böylece GnuTLS'nin zinciri kendi başına oluşturmasına ve kontrol etmesine izin veriyorsa, GnuTLS kodu, zinciri başlatmadan önce sağlanan sertifikayı depolamak için kullanılan belleği yanlışlıkla boşaltır. kontrol süreci…

…ve kontrol tamamlandıktan sonra tekrar serbest bırakır.

Bu, bellek bozulmasına ve ardından bir program çökmesine yol açabilecek çift serbest bir aksiliğe neden olur.

Kötü amaçlı yazılım yerleştirmek için bir çöküşe öncülük etme

Genellikle veya en azından sıklıkla, çökmeler, işletim sisteminin sorunlu programın program yürütme akışı üzerindeki kontrolünü kaybettiğini algıladığı, örneğin program rastgele bir bellek adresine sıçrar ve bir hiç tahsis edilmemiş bellek bloğu.

Bu durumda, çökme bir sistem hatasına neden olur ve bu tür bir hata, Hizmet Reddi (DoS) saldırısı, tüm amacın basitçe saldırıya uğrayan programı bozmak olduğu durumlarda, Uzaktan Kod Yürütme (RCE), bunun yerine güvenilmeyen ve istenmeyen yazılım kodunun tetiklendiği yer.

Ancak, saldırganların kendi sağladıkları güvenilmeyen verilere dayanarak istedikleri zaman tetikleyebilecekleri bir program çökmesi olduğunda, çökmenin, kilitlenen programı yanlış yönlendirecek ve sağlanan yürütülebilir koda atlayacak şekilde yönlendirilme riski her zaman vardır. saldırganlar tarafından.

Tahmin edebileceğiniz gibi, saldırganlar, önce izin isteyen herhangi bir açılır pencere uyarısı üretmeden bilgisayarınıza güvenilmeyen kodu enjekte etmeleri koşuluyla, geçici veya kalıcı olarak kötü amaçlı yazılım yerleştirmek için genellikle bu tür güvenlik açıklarından yararlanabilir.

Ne yapalım?

Güncelle en son versiyon olan GnuTLS'nin 3.7.7 yazarken.

(Bu hata görünüşe göre GnuTLS 3.6.0'da tanıtıldı ve o zamandan bu yana 3.7.6 dahil olmak üzere her sürümde var.)

Pek çok popüler uygulamanın ve programlama araç setinin GnuTLS'yi içerdiğini veya GnuTLS'yi kullanmak için oluşturulabileceğini unutmayın, bunun farkında olmasanız bile: FFmpeg, GnuPG, Mplayer, QEMU, Rdesktop, Samba, Wget, Wireshark ve Zlib.

GnuTLS kullanan birçok Linux veya *BSD paketi, dağıtımınız tarafından yönetilen merkezi bir sürüme güvenecektir, bu nedenle, dağıtımınızda bu sürüm kullanılabilir olur olmaz güncelleme yaptığınızdan emin olun.

Mutlu yama!


Zaman Damgası:

Den fazla Çıplak Güvenlik