MultiValuedProperty aracılığıyla Exchange PowerShell’in Kullanımı


Araştırmacı, MultiValuedProperty aracılığıyla Exchange PowerShell'in Kullanımını Ayrıntılarıyla Anlatıyor

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.

DÖRT

İ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 veya Microsoft.Exchange.Data.DagNetÇokDeğerliÖzellik Uzaktan kod çalıştırmak için deserialization kullanan genel sınıflar kullanılabilir.

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 tip.

Burada Çok DeğerliÖzellik Uzaktan kod yürütmeyi başarmak için herhangi bir XAML serileştirme aygıtı sağlanarak kötüye kullanılabilir.

Saldırı planı (Kaynak: ZDI)

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 izin listesinden ve dahili serileştirme mekanizmasında ek tip denetimi uygulandı Çok DeğerliÖzellikRaporda şöyle yazıyor.

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Özellikbir istisna atılıyor, çünkü tür XamlOkuyucu yeni doğrulama başarısız oldu.

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



Source link