Cadena de lectura de archivos a RCE en Telerik UI for ASP.NET AJAX (CVE-2026-18672)
Telerik UI for ASP.NET AJAX lee web.config sin autenticación y encadena con RCE en sitios con claves estáticas; ambos fallos están corregidos en 2026.3.812.
TL;DR
- Una lectura de archivos sin autenticación en Progress Telerik UI for ASP.NET AJAX, CVE-2026-18672, permite a cualquier atacante que alcance una página con RadImageEditor o RadEditor leer archivos bajo la raíz de la aplicación, incluido web.config. Tanto Security publicó la cadena completa, con peticiones funcionales, el 27 de octubre de 2026.
- La lectura se encadena con CVE-2026-19219, un fallo de manipulación de parámetros de diálogo, para lograr ejecución remota de código sin autenticación como la identidad del grupo de aplicaciones cuando web.config lleva un machineKey estático o un DialogParametersEncryptionKey personalizado. Progress califica la lectura como High 7.5 y la manipulación como High 8.1, y su boletín de cadena lo titula Critical Security Bulletin.
- Todas las versiones desde 2011.2.712 hasta 2026.2.708 están afectadas. No se conoce explotación, ninguno de los dos CVE figura en el catálogo KEV de CISA al 3 de noviembre de 2026, y el CISA ADP registró Exploitation «none» el 2 de septiembre de 2026.
- Actualice a 2026.3.812 o posterior. Ninguna configuración mitiga por completo la lectura de archivos antes de actualizar, así que trate todo sitio sin parchear que exponga los controles como expuesto. «¿Cómo lo corrijo?» lleva las medidas provisionales del fabricante.
¿Estoy afectado?
Está expuesto a la lectura de archivos cuando se cumplen todas estas condiciones:
- Su aplicación ejecuta Progress Telerik UI for ASP.NET AJAX de 2011.2.712 a 2026.2.708, cualquier versión de un rango de quince años.
- Una página alcanzable por visitantes sin autenticación renderiza RadImageEditor, sea como control autónomo o a través de la herramienta Image Editor integrada de RadEditor, que aloja un RadImageEditor internamente. Los handlers de la cadena se registran una vez para toda la aplicación, así que cualquier página que renderice RadEditor arrastra la maquinaria de diálogos.
- El atacante solo necesita esa página. La publicación reproduce la lectura con dos peticiones sin autenticación y un
__VIEWSTATEreenviado sin modificar, que va firmado por sí solo y no cubre los demás campos ocultos.
Además está expuesto a la mitad de RCE cuando se cumplen estas dos condiciones:
- RadEditor se usa con sus diálogos de navegador de archivos integrados habilitados, y la aplicación define un
Telerik.Web.UI.DialogParametersEncryptionKeypersonalizado en web.config o unmachineKeyestático en lugar del valor AutoGenerate por omisión. Progress recomienda configurar estas claves, pero ninguna está presente en una instalación por omisión, y Progress declara que los despliegues AutoGenerate no son falsificables en remoto por este vector. - El atacante ha recuperado la clave leyendo web.config mediante la lectura de archivos o por otros medios.
| Componente | Versiones afectadas | Versión corregida |
|---|---|---|
| RadImageEditor, autónomo o vía la herramienta Image Editor de RadEditor (CVE-2026-18672) | 2011.2.712 a 2026.2.708 | 2026.3.812 |
| RadEditor DialogHandler, navegador de archivos (CVE-2026-19219) | 2011.2.712 a 2026.2.708 | 2026.3.812 |
Compruebe el ensamblado desplegado y las claves de web.config:
# File version of the assembly the application deploys
Get-Item .\Bin\Telerik.Web.UI.dll |
Select-Object -ExpandProperty VersionInfo |
Format-List FileVersion, ProductVersion
# The two keys that turn the file read into RCE, if present
Select-String -Path .\web.config -Pattern "machineKey",
"DialogParametersEncryptionKey"
La ausencia de un elemento machineKey en web.config significa que rige el valor AutoGenerate por omisión, según el aviso del fabricante. Un machineKey estático o un DialogParametersEncryptionKey personalizado es lo que necesita la ruta de RCE, y una clave presente es un indicio que confirmar, no una intrusión en sí.
¿Cómo lo corrijo?
Actualice a la versión 2026 Q3 y luego confirme que las claves no quedaron expuestas mientras esperaba:
- Actualice cada aplicación que use la suite a 2026.3.812 o posterior mediante la documentación de actualización del fabricante. Progress publicó la versión corregida el 12 de agosto de 2026 e instó a los clientes a actualizar mediante este boletín de seguridad crítico.
- Rote las claves expuestas en todo sitio que haya ejecutado una versión vulnerable con un
machineKeyestático o unDialogParametersEncryptionKeypersonalizado y no pueda descartar la lectura. Trate las claves como recuperables por un visitante sin autenticación. - Aplique las medidas provisionales del fabricante donde la actualización no pueda implantarse de inmediato. Reducen el riesgo pero no cierran el fallo por completo. Confirme que la identidad del grupo de aplicaciones no tiene acceso de escritura a la raíz web de la aplicación. Deshabilite la ejecución de scripts en toda carpeta en la que pueda escribir.
- Si el navegador de archivos de RadEditor no es necesario, retire los controles RadEditor afectados o deshabilite sus diálogos de navegador de archivos, o retire el mapeo DialogHandler de web.config. El aviso del fabricante lleva las líneas
<httpHandlers>y<handlers>exactas que hay que retirar.
Filtrar la petición literal Telerik.Web.UI.WebResource.axd?type=iec no es una mitigación completa confirmada, según el fabricante. Mapeos de handler alternativos, formas de URL, codificaciones y un HttpHandlerUrl personalizado pueden eludir un filtro escrito contra una sola ruta. Ninguna configuración mitiga la lectura de archivos antes de actualizar.
¿Cuál es la causa raíz?
La ruta de imagen de RadImageEditor viaja al servidor en un campo de formulario oculto que no está cifrado ni firmado. El control la guarda en una caché de descargas que un segundo handler registrado globalmente lee después del disco. Los parámetros de diálogo de RadEditor van cifrados y firmados. Sin embargo, nada fuera del blob limita las carpetas que estos nombran.
RadImageEditor guarda su estado en un campo oculto de postback llamado <ClientID>_ClientState. La descompilación de Tanto Security, publicada con el análisis, muestra cómo la clase base lo carga:
// Telerik.Web.UI/RadWebControl.cs, decompiled by Tanto Security
// no message authentication code and no decrypt,
// so the whole dictionary is client-controlled
if ( !string . IsNullOrEmpty (text) &&
new JavaScriptSerializer (). DeserializeObject (text)
is Dictionary < string , object > clientState) {
LoadClientState (clientState);
}
La redefinición en RadImageEditor copia la clave imageUrl de ese diccionario a la propiedad ImageUrl del control. El control guarda luego esa ruta en una caché de descargas para servir el archivo en una petición posterior. Un campo de página que el servidor nunca autentica se convierte en una ruta de archivo del lado servidor.
La lectura de vuelta pasa por Telerik.Web.UI.WebResource.axd?type=iec, el ImageEditorCacheHandler registrado una vez para la aplicación. El handler descifra el token _downloadKey que recibe, busca la entrada en la caché, mapea la cadena guardada a una ruta y devuelve los bytes del archivo. Deduce el tipo de contenido de la respuesta desde la extensión del archivo y no restringe qué extensiones sirve, de modo que web.config vuelve como image/config.
La resolución de rutas relativas discrepa entre las dos etapas: la obtención que guarda la ruta en caché la resuelve desde la carpeta de la página, mientras que el handler la resuelve desde la raíz de la aplicación. Ninguna ruta relativa satisface ambas. Una ruta relativa a la aplicación sí lo hace: ~/web.config nombra el mismo archivo en ambas etapas, así que supera la comprobación de existencia de la obtención y la contención a la raíz del handler.
Para la mitad de RCE, los diálogos de RadEditor llevan un blob de parámetros cifrado y autenticado, SerializedParameters, que incluye los ViewPaths, UploadPaths y DeletePaths del navegador de archivos. La protección de integridad del blob prueba que el poseedor de la clave lo produjo, no que un desarrollador configurara esas carpetas, como concluye el análisis. Quien tenga la clave de cifrado acuña un blob válido que apunta las subidas a la raíz web.
¿Cómo se explota?
La prueba de concepto pública es la secuencia de peticiones publicada en el análisis de Tanto Security el 27 de octubre de 2026. Los pasos siguientes la siguen.
- El atacante envía un
GETsin autenticación a una página que renderiza RadImageEditor y conserva el__VIEWSTATEy el nombre del campo de estado cliente de la respuesta. - El atacante hace un POST a la misma página, reenviando el
__VIEWSTATEsin modificar para que su MAC pase, con el campo de estado cliente llevando la ruta envenenada:
{"currentCommand": null, "imageUrl": "~/web.config", "imageKey": null,
"height": null, "width": null, "enableResize": null,
"toolBarPosition": null, "isf": null}
- La respuesta trae un
_downloadKeynuevo, el GUID cifrado de la entrada de caché envenenada. En una página RadEditor el atacante alcanza el mismo control a través del diálogo ImageEditor. Recolecta el blob de parámetros emitido por el servidor en la página y aporta la ruta en el campo de formularioOriginalImageLocation. - El atacante envía la clave a
Telerik.Web.UI.WebResource.axd?type=iec&dkey=3, y el handler devuelve los bytes de~/web.config, el objetivo del PoC del análisis, comoimage/config. - Si el web.config recuperado contiene un
machineKeyestático, el atacante forja un__VIEWSTATEfirmado que lleva una cadena de gadget de deserialización. Esta es la técnica ViewState estándar de ASP.NET que construye ysoserial.net, y el análisis la reprodujo para escribir un webshell en la raíz web. - Si contiene un
DialogParametersEncryptionKey, el atacante forja en su lugar el blob de parámetros de diálogo conUploadPathsen la raíz web. El webshell se sube entonces por el navegador de archivos de RadEditor, la ruta que Progress asignó a CVE-2026-19219. - El código del webshell se ejecuta como la identidad del grupo de aplicaciones de IIS, y el atacante lo controla desde ese punto.
¿Cómo fluye el ataque?
Una secuencia de peticiones sin autenticación lee web.config, y las claves que este contiene, cuando están configuradas, convierten la lectura en ejecución de código en la raíz web.
página con RadImageEditor
o RadEditor"] --> B["El POST reenvía __VIEWSTATE
y envenena ClientState
con ~/web.config:
campo sin firma"] B --> C["La caché guarda la ruta,
la respuesta devuelve un
_downloadKey cifrado"] C --> D["El handler type=iec devuelve
los bytes de web.config
como image/config"] D --> E["web.config contiene un
machineKey estático o clave
de diálogo: recomendado
por el fabricante, no por omisión"] E --> F["Gadget ViewState forjado o
parámetros de diálogo que
apuntan las subidas a la raíz web"] F --> G["Webshell escrito en la raíz,
se ejecuta como la identidad
del grupo de aplicaciones"]
¿Qué puede hacer un atacante?
El boletín de cadena del fabricante enuncia el impacto combinado sin rodeos. Un atacante remoto sin autenticación que explote la cadena puede ejecutar código arbitrario en el servidor web con los privilegios de la identidad del grupo de aplicaciones. El boletín valora que esto puede derivar en compromiso total del servidor, exfiltración de datos o movimiento lateral en el entorno de alojamiento.
- La sola lectura de archivos, CVE-2026-18672, expone cada archivo bajo la raíz de la aplicación, y web.config es donde viven las cadenas de conexión y las dos claves. Funciona en instalaciones por omisión; no se necesita ninguna clave para leer.
- La cadena de RCE, vía CVE-2026-19219, necesita el material de clave: un
machineKeyestático o unDialogParametersEncryptionKeypersonalizado presente en web.config. Un sitio que quedó en el valor AutoGenerate sin clave de diálogo personalizada no es falsificable en remoto por este vector, según el aviso del fabricante. - La explotación es silenciosa. El boletín del fabricante señala que no hay síntomas visibles ni rastro evidente en los registros de errores ASP.NET estándar. Las dos rutas de RCE del análisis terminan cada una en un webshell funcional y no en una caída.
Las condiciones son la accesibilidad de red a una página que renderice los controles y, para la ejecución de código, la presencia de los ajustes de claves. No se requiere interacción del usuario ni autenticación en ningún paso.
¿Por qué funciona la corrección?
Progress distribuye un ensamblado de código cerrado, así que no hay diff de parche público que citar. El comportamiento de la corrección, tal como el análisis lo verificó contra 2026.3.812, cierra ambas mitades:
- El handler de caché comprueba ahora la ruta descifrada contra los directorios de imágenes configurados del control y aplica una lista de permitidos de extensiones de imagen:
jpg,jpeg,png,gifybmp. Cualquiera de las dos comprobaciones detiene la lectura deweb.config, y la entradaOriginalImageLocationdel diálogo pasa ahora por las mismas comprobaciones. - RadImageEditor guarda ahora su ubicación de imagen en el estado cliente como un valor cifrado bajo una clave del servidor, de modo que un cliente ya no puede sustituir su propia ruta sin esa clave.
- La ruta de subida de los diálogos aplica una lista de prohibidos de extensiones peligrosas al escribir archivos, rechazando
.aspx,.ashx,.config,.exey una larga lista de otros tipos, y añade un ajuste opcionalTelerik.Web.UI.FileBrowserAllowedPathsque restringe a qué carpetas puede listar y subir el navegador de archivos.
La corrección estrecha el problema en lugar de eliminar el patrón. El análisis observa que FileBrowserAllowedPaths es opcional. Cuando no se define, el navegador de archivos sigue confiando en las rutas que lleve un blob de diálogo válidamente cifrado. Un adversario con el DialogParametersEncryptionKey puede seguir subiendo a cualquier carpeta del sitio. La propia sección de mitigación del fabricante va en la misma línea: las medidas reducen el riesgo y solo la actualización lo resuelve por completo. Rote toda clave expuesta al actualizar, porque la clave, y no la versión, es lo que la segunda mitad necesita.
¿Cómo verifico si estuve comprometido?
No hay indicadores publicados, y el fabricante declara que la explotación no deja rastro evidente en los registros de errores ASP.NET estándar. Estas comprobaciones buscan en sus propios registros las formas de petición del análisis público; una coincidencia es un indicio que investigar, no una prueba.
- En los registros de IIS, busque la firma en dos pasos: un
POSTa una página con RadImageEditor o RadEditor seguido de una petición aTelerik.Web.UI.WebResource.axdcontype=iecy un parámetrodkey. La edición legítima de imágenes también usa este handler, así que pese el par de peticiones, no la petición aislada. - Busque peticiones
POSTaTelerik.Web.UI.DialogHandler.aspxdesde sesiones sin autenticar, el endpoint de diálogo para el que la ruta de RCE falsifica parámetros. - Compare
web.configy la raíz web con una copia de referencia: archivos.aspxinesperados, handlers nuevos o cambios demachineKeyson los artefactos posteriores a la explotación del análisis. - Trate las claves como expuestas en todo sitio que haya ejecutado una versión vulnerable con un
machineKeyestático o unDialogParametersEncryptionKeypersonalizado y no pueda descartar la lectura. No hay huella que distinga la lectura de una imagen de la lectura deweb.configen las respuestas del handler.
Cronología
- 2026-07-28: Tanto Security informa los hallazgos a Progress por su canal de divulgación de seguridad, con acuse de recibo el mismo día.
- 2026-07-31: Progress entrega un build corregido para validación y revisión.
- 2026-08-01: Tanto Security confirma la corrección de la lectura de archivos e informa de que la subida sigue siendo alcanzable con la clave de diálogo.
- 2026-08-12: Progress publica la versión corregida, 2026.3.812 (2026 Q3), instando a los clientes a actualizar mediante el boletín de seguridad crítico.
- 2026-09-02: Progress publica los CVE y los avisos de la base de conocimiento para ambos fallos.
- 2026-10-27: Tanto Security publica el análisis completo de la cadena con la secuencia de peticiones.
Preguntas frecuentes
El parche salió en agosto de 2026. ¿Por qué importa ahora?
La documentación pública de la cadena llegó el 27 de octubre de 2026. Todo sitio aún en 2026.2.708 o anterior se enfrenta ahora a una secuencia de peticiones publicada, sin autenticación, que lee web.config. El análisis demuestra la mitad de ejecución de código contra sitios con los ajustes de claves recomendados. Las versiones de la suite también son difíciles de marcar para los escáneres sin la versión de archivo del ensamblado, de modo que el inventario importa.
¿Una instalación por omisión está expuesta a ejecución remota de código?
No. La lectura de archivos funciona sin autenticación en una instalación por omisión, pero la mitad de RCE necesita un machineKey estático o un DialogParametersEncryptionKey personalizado en web.config, y ninguna instalación por omisión los lleva. Progress recomienda configurarlos, que es exactamente lo que deja expuesto a la cadena a un sitio que siguió la guía de endurecimiento.
¿Alguien explotó estos fallos?
No se conoce explotación. La evaluación del CISA ADP registró Exploitation «none» para ambos CVE el 2 de septiembre de 2026, y ninguno aparece en el catálogo Known Exploited Vulnerabilities de CISA al 3 de noviembre de 2026. La línea de productos tiene historial de explotación, eso sí: su fallo RadAsyncUpload CVE-2019-18935 figura en ese catálogo desde 2021.
¿Hay código de exploit público?
El análisis publica la secuencia de peticiones completa de la lectura, incluida la carga útil del estado cliente y la petición al handler de caché, y describe íntegras ambas rutas de ejecución de código. Tanto Security portó la generación del gadget ViewState a su exploit, pero no se ha publicado un script de exploit autónomo.
¿Importan los demás CVE de Telerik de esta serie?
Las dos publicaciones de la serie reportaron doce vulnerabilidades en la suite, y Progress las corrigió todas a lo largo de 2026.2.708 y 2026.3.812. Este artículo cubre los dos CVE que Progress encadena en RCE sin autenticación, y la base de conocimiento del fabricante lleva un aviso por cada uno de los demás.
¿Puedo bloquear los handlers en lugar de actualizar?
Puede reducir la exposición así, pero el fabricante declara que filtrar la petición literal no es una mitigación completa confirmada. Mapeos de handler alternativos, codificaciones de URL y un HttpHandlerUrl personalizado pueden eludir un filtro basado en rutas. Use las medidas provisionales de «¿Cómo lo corrijo?» y valide cualquier control de filtrado con el soporte de Telerik.
Mapee las superficies expuestas de sus aplicaciones con Ostorlab
El Web Agentic Deep Scan de Ostorlab recorre sus aplicaciones web y mapea las superficies que sus páginas exponen, incluidos los endpoints de handler y los diálogos que esta cadena alcanza. Ejecute un escaneo con Ostorlab para saber qué aplicaciones necesitan primero la actualización a 2026.3.812.
Referencias
- Tanto Security, Marcio Almeida, «From Arbitrary File Read to Shell: Yet Another RCE in Telerik», publicado el 27 de octubre de 2026, con la cadena completa, el código descompilado y la secuencia de peticiones: https://tantosec.com/blog/2026/10/telerik-file-read-to-rce/ (verificado el 3 de noviembre de 2026)
- Aviso de Progress Telerik, «RadImageEditor Path Traversal Vulnerability (CVE-2026-18672)», con la matriz de versiones, la ausencia de mitigación en configuración y la reserva sobre el filtrado: https://www.telerik.com/products/aspnet-ajax/documentation/knowledge-base/kb-security-rie-path-traversal-cve-2026-18672 (verificado el 3 de noviembre de 2026)
- Aviso de Progress Telerik, «DialogHandler UploadPaths Tampering Vulnerability (CVE-2026-19219)», con las condiciones de exposición, CWE-345 y CWE-434, y las mitigaciones provisionales: https://www.telerik.com/products/aspnet-ajax/documentation/knowledge-base/kb-security-dialoghandler-uploadpaths-tampering-cve-2026-19219 (verificado el 3 de noviembre de 2026)
- Progress Telerik, «Critical Security Bulletin - RadImageEditor and RadEditor CVE-2026-18672 and CVE-2026-19219 (2026 Q3)», el impacto de la cadena y la matriz corregida por componente: https://www.telerik.com/products/aspnet-ajax/documentation/knowledge-base/kb-security-radimageeditor-radeditor-rce-chain-bulletin-2026-q3 (verificado el 3 de noviembre de 2026)
- Registro CVE-2026-18672, CNA Progress, con CVSS v3.1 7.5 y el bloque SSVC del CISA ADP: https://www.cve.org/CVERecord?id=CVE-2026-18672 (verificado el 3 de noviembre de 2026)
- Registro CVE-2026-19219, CNA Progress, con CVSS v3.1 8.1 y el bloque SSVC del CISA ADP: https://www.cve.org/CVERecord?id=CVE-2026-19219 (verificado el 3 de noviembre de 2026)
- Panorama de los ajustes de web.config de Progress Telerik, la guía que recomienda configurar las claves de cifrado: https://www.telerik.com/products/aspnet-ajax/documentation/general-information/web-config-settings-overview (verificado el 3 de noviembre de 2026)
- ysoserial.net, la herramienta de deserialización de .NET que el análisis usó para el gadget ViewState: https://github.com/pwntester/ysoserial.net (verificado el 3 de noviembre de 2026)
- Fuente JSON del catálogo Known Exploited Vulnerabilities de CISA, buscada para ambos CVE sin coincidencia, y para el historial de CVE-2019-18935 de la línea de productos, al 3 de noviembre de 2026: https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json (verificado el 3 de noviembre de 2026)