OffensiveCon 2024, Microsoft Exchange’i istismar etmek için birden fazla yöntem geliştirdi. Bir yöntem, bir araştırmacının Exchange PowerShell’i istismar edebildiği MultiValuedProperty’yi kullanmaktı. Dahası, bu istismar Microsoft’un güvenlik açıklarından biri için yamasını atlatıyor.
Exchange’de daha önce iki güvenlik açığı (CVE-2022-41040 ve CVE-2022-41082) tespit edilmişti ve bunların birleştirilmesi, kimliği doğrulanmış herhangi bir Exchange kullanıcısının uzaktan kod yürütmesine izin veriyordu.
İki güvenlik açığının zincirlenmesine “ProxyNotShell” adı verildi. Ayrıca, ProxyNotShell, yama yayınlanmadan önce bilgisayar korsanları tarafından vahşi doğada istismar edildi.
Ancak yeni bypass, CVE-2023-21529 ve CVE-2024-32031 olmak üzere iki RCE güvenlik açığını içeriyor. CVE-2023-21529, MultiValuedProperty sınıfının kötüye kullanımıyla ilişkilendirildi ve CVE-2023-32031, engellenmeyen Command sınıfının kötüye kullanımı olan CVE-2023-21529’un bypass’ıyla ilgiliydi.
Uyumluluğun Kodunu Çözme: CISO’ların Bilmesi Gerekenler – Ücretsiz Web Seminerine Katılın
Exchange PowerShell’in Kullanımı
ZDI makalesine göre Microsoft, ProxyNotShell zincirinin RCE kısmını düzeltmek için Microsoft.Exchange.Diagnostics.UnitySerializationHolderSurrogateSelector’ı tanıttı.
Bu fonksiyon, UnitySerializationHolder’ın deserializasyonu sırasında alınan tipleri izin verilenler listesi kullanarak doğrular.
Ayrıca, sömürüye ilişkin detaylı bilgi veren bir de tanıtım videosu yayınlandı.
CVE-2023-21529: Uzaktan Kod Çalıştırmaya Yol Açan İzin Verilen MultiValuedProperty
İzin verilen liste iki ana bölümden oluşuyordu: izin verilen normal tiplerin listesi ve izin verilen genel tiplerin listesi. Genel tipler, bir deserializasyon yoluyla da alınabilen keyfi, dahili tiplerin dahil edilmesine izin verir. UnitySerializationHolder.
Genel türler listesinin ilk kısmı özel Exchange türlerini içerir. Ancak, Microsoft.Exchange.Data.Çok DeğerliÖzellik
Bunun nedeni, “PowerShell Uzaktan Serileştirme, herhangi bir izin verilen türün tek argümanlı bir oluşturucusunu çağırmaya olanak tanır“.
Ayrıca, Çok DeğerliÖzellik nesne türünde argümanları kabul eder. Bu nedenle, bir saldırgan daha fazla sayıda argüman kabul eden farklı bir oluşturucuyu çağırmak için izin verilen herhangi bir PowerShell Remoting Deserializable sınıfını sağlayabilir.
Bunun bir örneği şudur: DeğerDönüştürücü.TryParseDönüştürme çağıran TryConstructorConversion.
Ayrıştırma, aşağıdaki gibi belirli argümanlarla sağlanabilir: orijinalDeğer, orijinalTür, sonuç türü Ve Çok DeğerliÖzellik
Burada Çok DeğerliÖzellik
CVE-2023-32031 – Komut Sınıfı ile Dahili Reddetme Listesini Atlatma
Bu, Microsoft tarafından CVE-2023-21529 için sağlanan yamanın atlatılmasıdır. Microsoft, Çok DeğerliÖzellik
public static object ConvertValue(object originalValue, Type resultType, IFormatProvider formatProvider)
{
ChainedSerializationBinder.ValidateResultType(resultType); // [1]
if (null == resultType)
{
throw new ArgumentNullException("resultType");
}
...
Ancak analiz edildikten sonra, şunun keşfedildiği ortaya çıktı: ZincirlenmişSerializationBinder.ValidateResultType Saldırganın belirtebileceği tipleri sınırlamak için bir yöntem tanıtıldı.
Bir saldırgan türü sağlayabilirse Çok DeğerliÖzellik
Ayrıca, tür doğrulaması herhangi bir dahili Exchange sınıfını içeremeyen bir reddetme listesine dayanıyordu. Kontrol edildiğinde, Microsoft.Tanılama.Çalışma Zamanı.Yardımcı Programlar.Komut Command(String, CommandOptions) kurucusunu çağıran sınıf bulundu.
Buna ek olarak, saldırgan tarafından kontrol edilen girdiden işlem adını ve argümanlarını alan yeni bir ProcessStartInfo da başlatır.
Bu sınıf reddetme listesine dahil edilmediğinden, araştırmacı bu çağrıları yürütmek için kullandı cmd.exe /c calc.exe Uzaktan kod yürütmenin bir parçası olarak.
Güvenlik Ekibiniz için Ücretsiz Olay Müdahale Planı Şablonunu İndirin – Ücretsiz İndirin