我们的 AI 引擎 Neutron 在加州大学伯克利分校的 CyberGym 基准测试中取得了 97.1% 的成绩。 了解更多

深度解析

深度解析

Telerik UI for ASP.NET AJAX 文件读取到 RCE 链 (CVE-2026-18672)

Telerik UI for ASP.NET AJAX 未经身份验证即可读取 web.config,并在带静态密钥的站点上链到 RCE;两个漏洞都已在 2026.3.812 中修复。

TL;DR

  • Progress Telerik UI for ASP.NET AJAX 中一个未经身份验证的文件读取漏洞 CVE-2026-18672,让任何能访问带有 RadImageEditor 或 RadEditor 页面的攻击者读取应用根目录下的文件,包括 web.config。Tanto Security 于 2026 年 10 月 27 日发布了完整攻击链和可用的请求序列。
  • 该读取与对话框参数篡改漏洞 CVE-2026-19219 相链,当 web.config 带有静态 machineKey 或自定义 DialogParametersEncryptionKey 时,攻击者可以应用池身份未经身份验证地远程执行代码。Progress 将读取漏洞评为 High 7.5,篡改漏洞评为 High 8.1,其链公告标题为 Critical Security Bulletin。
  • 从 2011.2.712 到 2026.2.708 的每个版本都受影响。没有已知的利用,截至 2026 年 11 月 3 日两个 CVE 都不在 CISA 的已知被利用漏洞目录中,CISA ADP 在 2026 年 9 月 2 日记录的 Exploitation 为「none」。
  • 升级到 2026.3.812 或更高版本。升级之前没有任何配置能完全缓解文件读取,因此把暴露这些控件的未修补站点视为已暴露。「我如何修复?」包含厂商的临时措施。

我受影响吗?

以下条件全部成立时,您暴露于文件读取:

  • 您的应用运行 2011.2.712 到 2026.2.708 之间的 Progress Telerik UI for ASP.NET AJAX,覆盖十五年间发布的任何版本。
  • 一个未认证访客可以访问的页面渲染了 RadImageEditor,无论是独立控件还是通过 RadEditor 内置的 Image Editor 工具(其内部承载一个 RadImageEditor)。链背后的处理器为整个应用注册一次,因此任何渲染 RadEditor 的页面都会引入对话框机制。
  • 攻击者只需要那个页面。该文章用两个未认证请求加一个原样重放的 __VIEWSTATE(只保护自身、不覆盖其他隐藏字段)复现了读取。

当以下两个条件都成立时,您还暴露于 RCE 部分:

  • RadEditor 启用了内置的文件浏览器对话框,且应用在 web.config 中设置了自定义 Telerik.Web.UI.DialogParametersEncryptionKey,或设置了静态 machineKey 而非 AutoGenerate 默认。Progress 建议配置这些密钥,但默认安装中两者都不存在,Progress 声明 AutoGenerate 部署无法通过此途径被远程伪造。
  • 攻击者通过文件读取或其他手段拿到了 web.config 中的密钥。
组件 受影响版本 修复版本
RadImageEditor,独立或经 RadEditor 的 Image Editor 工具 (CVE-2026-18672) 2011.2.712 至 2026.2.708 2026.3.812
RadEditor DialogHandler 文件浏览器 (CVE-2026-19219) 2011.2.712 至 2026.2.708 2026.3.812

检查部署的程序集和 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"

按照厂商公告,web.config 中没有 machineKey 元素即表示 AutoGenerate 默认生效。静态 machineKey 或自定义 DialogParametersEncryptionKey 正是 RCE 路径所需的,发现密钥存在是需要核实的线索,本身并不等于已被入侵。

我如何修复?

升级到 2026 Q3 版本,然后确认等待期间密钥没有暴露:

  1. 按照厂商的升级文档,将使用该套件的每个应用升级到 2026.3.812 或更高版本。Progress 于 2026 年 8 月 12 日发布修复版本,并通过该重大安全公告敦促客户升级。
  2. 对于运行过带静态 machineKey 或自定义 DialogParametersEncryptionKey 的受影响版本、且无法排除文件读取的站点,轮换已暴露的密钥。将这些密钥视为可被未认证访客恢复。
  3. 在无法立即升级的地方应用厂商的临时措施。这些措施降低风险但不能完全闭合漏洞。确认应用池身份对 Web 应用根目录没有写入权限。对其可写的每个文件夹禁用脚本执行。
  4. 如果不需要 RadEditor 的文件浏览器,移除受影响的 RadEditor 控件或禁用其文件浏览器对话框,或从 web.config 移除 DialogHandler 映射。厂商公告给出了需要移除的确切 <httpHandlers> 和 <handlers> 行。

按照厂商的说法,封锁字面请求 Telerik.Web.UI.WebResource.axd?type=iec 不是已确认的完整缓解。备用的处理器映射、URL 形式、编码和自定义 HttpHandlerUrl 可以绕过针对单一路由写的过滤器。升级之前没有任何配置能缓解文件读取。

根本原因是什么?

RadImageEditor 的图片路径通过一个既不加密也不签名的隐藏表单字段到达服务器。控件把它存入下载缓存,之后由一个全局注册的第二个处理器从磁盘读取。RadEditor 的对话框参数是加密并签名的,但 blob 之外没有任何东西约束它指向哪些文件夹。

RadImageEditor 把状态保存在名为 <ClientID>_ClientState 的隐藏回传字段中。Tanto Security 随文章发布的反编译代码展示了基类如何加载它:

// 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);
}

RadImageEditor 中的重写把该字典的 imageUrl 键复制到控件的 ImageUrl 属性。控件随后把该路径存入下载缓存,以便后续请求返回文件。一个服务器从不验证的页面级字段变成了服务器端文件路径。

读取回传经过 Telerik.Web.UI.WebResource.axd?type=iec,即整个应用注册一次的 ImageEditorCacheHandler。处理器解密收到的 _downloadKey 令牌,在缓存中查找条目,把存储的字符串映射为路径并返回文件字节。它从文件扩展名推导响应内容类型,且不限制可服务的扩展名,因此 web.config 以 image/config 返回。

相对路径的解析在两个阶段之间不一致:缓存路径的获取阶段从页面文件夹解析,而处理器从应用根解析。没有相对路径能同时满足两者。应用相对路径可以:~/web.config 在两个阶段指向同一个文件,因此既通过获取的存在性检查,也通过处理器的应用根包含检查。

在 RCE 部分,RadEditor 的对话框携带加密并认证的参数 blob SerializedParameters,其中包含文件浏览器的 ViewPaths、UploadPaths 和 DeletePaths。该 blob 的完整性保护只证明持钥者生成了它,不证明开发者配置了这些文件夹,这正是文章的结论。持有加密密钥的任何人都能铸造一个把上传指向 Web 根的有效 blob。

漏洞如何被利用?

公开的概念验证是 2026 年 10 月 27 日 Tanto Security 文章中发布的请求序列。以下步骤与之对应。

  1. 攻击者向渲染 RadImageEditor 的页面发送一个未认证的 GET,保留响应中的 __VIEWSTATE 和客户端状态字段名。
  2. 攻击者向同一页面回传 POST,原样重放 __VIEWSTATE 使其 MAC 通过,并在客户端状态字段中带上被投毒的路径:
{"currentCommand": null, "imageUrl": "~/web.config", "imageKey": null,
 "height": null, "width": null, "enableResize": null,
 "toolBarPosition": null, "isf": null}
  1. 响应带有一个新的 _downloadKey,即被投毒缓存条目的加密 GUID。在 RadEditor 页面上,攻击者通过 ImageEditor 对话框到达同一控件,从页面收集服务器签发的参数 blob,并在 OriginalImageLocation 表单字段中提供路径。
  2. 攻击者把密钥发送到 Telerik.Web.UI.WebResource.axd?type=iec&dkey=3,处理器以 image/config 返回 ~/web.config 的字节,即文章 PoC 的目标。
  3. 如果读到的 web.config 含有静态 machineKey,攻击者伪造一个带反序列化 gadget 链的签名 __VIEWSTATE。这是 ysoserial.net 构建的标准 ASP.NET ViewState 技术,文章复现了它以将 webshell 写入 Web 根。
  4. 如果含有 DialogParametersEncryptionKey,攻击者改为伪造把 UploadPaths 指向 Web 根的对话框参数 blob。webshell 随后通过 RadEditor 的文件浏览器上传,这是 Progress 归入 CVE-2026-19219 的路径。
  5. webshell 的代码以 IIS 应用池身份运行,攻击者从此控制它。

攻击流程是怎样的?

一个未经身份验证的请求序列读取 web.config,其中配置的密钥把读取变成 Web 根中的代码执行。

flowchart LR A["攻击者 GET 一个渲染
RadImageEditor 或
RadEditor 的页面"] --> B["POST 重放 __VIEWSTATE 并
把 ~/web.config 投入
ClientState:
字段没有
任何签名"] B --> C["缓存存储路径,
响应返回加密的
_downloadKey"] C --> D["type=iec 处理器以
image/config 返回
web.config 字节"] D --> E["web.config 含静态
machineKey 或对话框密钥:
厂商建议配置,
但非默认"] E --> F["伪造 ViewState gadget 或
把上传指向 Web 根的
对话框参数"] F --> G["webshell 写入 Web 根,
以应用池身份运行"]

攻击者能做什么?

厂商的链公告直白地陈述了组合影响。利用该链的未认证远程攻击者可以以应用池身份的权限在 Web 服务器上执行任意代码。公告评估这可能导致服务器完全沦陷、数据外泄或在托管环境内的进一步横向移动。

  • 仅文件读取 CVE-2026-18672 就暴露应用根下的每个文件,而 web.config 正是连接字符串和两个密钥所在。它在默认安装上有效,读取不需要任何密钥配置。
  • 经由 CVE-2026-19219 的 RCE 链需要密钥材料:web.config 中存在静态 machineKey 或自定义 DialogParametersEncryptionKey。按照厂商公告,留在 AutoGenerate 默认且无自定义对话框密钥的站点无法通过此途径被远程伪造。
  • 利用是安静的。厂商公告指出没有可见症状,标准 ASP.NET 错误日志中也没有明显痕迹。文章的两条 RCE 路径都以可用的 webshell 结束,而不是崩溃。

条件是渲染这些控件的页面的网络可达性,以及代码执行所需的密钥设置的存在。任何步骤都不需要用户交互或身份验证。

修复为何有效?

Progress 分发闭源程序集,因此没有可引用的公开补丁差异。按照文章对 2026.3.812 的验证,修复的行为闭合了两半:

  • 缓存处理器现在把解密后的路径与控件配置的图片目录比对,并强制 jpg、jpeg、png、gif 和 bmp 的图片扩展名白名单。任一检查都阻止 web.config 读取,且对话框的 OriginalImageLocation 输入现在经过同样的检查。
  • RadImageEditor 现在把图片位置以服务器密钥加密的值存入客户端状态,客户端没有该密钥就无法替换自己的路径。
  • 对话框上传路径在写入文件时强制一个硬编码的危险扩展名黑名单,拒绝 .aspx、.ashx、.config、.exe 和一长串其他类型,并新增可选的 Telerik.Web.UI.FileBrowserAllowedPaths 设置,限制文件浏览器可列出和上传的文件夹。

该修复收窄了问题,而不是消除这个模式。文章指出 FileBrowserAllowedPaths 是可选的:未设置时,文件浏览器继续信任有效加密对话框 blob 携带的任何路径。持有 DialogParametersEncryptionKey 的对手仍能上传到站点的任何文件夹。厂商自己的缓解一节与此一致:这些措施降低风险,只有升级才能完全解决。升级时轮换任何暴露的密钥,因为后半段需要的是密钥而不是版本。

我如何检查是否已被入侵?

没有公开的入侵指标,厂商声明利用不会在标准 ASP.NET 错误日志中留下明显痕迹。这些检查在您自己的日志中寻找公开文章的请求形状;命中是需要调查的线索,不是证据。

  • 在 IIS 日志中寻找两步特征:一个对带 RadImageEditor 或 RadEditor 页面的 POST,随后是对携带 type=iec 和 dkey 参数的 Telerik.Web.UI.WebResource.axd 的请求。合法的图片编辑也使用该处理器,因此应关注这对组合而非单个请求。
  • 寻找来自未认证会话的对 Telerik.Web.UI.DialogHandler.aspx 的 POST 请求,即 RCE 路径伪造参数的对话框端点。
  • 将 web.config 和 Web 根与已知正常的副本比较:意外的 .aspx 文件、新处理器或 machineKey 变更是文章中的入侵后痕迹。
  • 对于运行过带静态 machineKey 或自定义 DialogParametersEncryptionKey 的受影响版本、且无法排除读取的站点,把密钥视为已暴露。处理器响应中没有任何指纹能区分读取图片与读取 web.config。

时间线

  • 2026-07-28:Tanto Security 通过 Progress 的安全披露渠道报告这些发现,当日获得确认。
  • 2026-07-31:Progress 提供用于验证和审查的修补构建。
  • 2026-08-01:Tanto Security 确认文件读取已修复,并报告在持有对话框密钥时上传仍可达。
  • 2026-08-12:Progress 发布修复版本 2026.3.812(2026 Q3),通过重大安全公告敦促客户升级。
  • 2026-09-02:Progress 发布两个漏洞的 CVE 和知识库公告。
  • 2026-10-27:Tanto Security 发布带请求序列的完整攻击链文章。

从报告到修复发布 15 天,修复之后 76 天公开了攻击链文档
图 1:从 2026 年 7 月 28 日的报告到 8 月 12 日的修复发布共 15 天,9 月 2 日发布 CVE,10 月 27 日公开攻击链文章,即报告后 91 天、修复后 76 天。来源:Tanto Security 披露时间线,2026 年 11 月 3 日核对。

常见问题

修复在 2026 年 8 月就发布了。为什么现在重要?

公开的攻击链文档于 2026 年 10 月 27 日出现。仍停留在 2026.2.708 或更早版本的站点现在面对一个已公开的、未经身份验证的请求序列,它读取 web.config。文章针对按建议配置了密钥的站点演示了代码执行部分。此外,没有程序集文件版本,扫描器很难标记套件的版本,因此清点很重要。

默认安装会暴露于远程代码执行吗?

不会。文件读取在默认安装上无需身份验证即可工作,但 RCE 部分需要 web.config 中的静态 machineKey 或自定义 DialogParametersEncryptionKey,默认安装两者都没有。Progress 建议配置它们,而这恰恰让遵循加固指南的站点暴露于该链。

有人利用过这些漏洞吗?

没有已知的利用。CISA ADP 评估于 2026 年 9 月 2 日为两个 CVE 记录了 Exploitation「none」,截至 2026 年 11 月 3 日,两者都不在 CISA 的已知被利用漏洞目录中。不过该产品线有利用历史:其 RadAsyncUpload 漏洞 CVE-2019-18935 自 2021 年起就在该目录中。

有公开的漏洞利用代码吗?

文章发布了读取的完整请求序列,包括客户端状态载荷和缓存处理器请求,并完整描述了两条代码执行路径。Tanto Security 把 ViewState gadget 生成移植进了自己的利用,但没有发布独立的利用脚本。

这个系列的其他 Telerik CVE 重要吗?

系列的两篇文章报告了套件中的十二个漏洞,Progress 在 2026.2.708 和 2026.3.812 中全部修复。本文覆盖 Progress 链接为未经身份验证 RCE 的两个 CVE,其余每一个都有厂商知识库公告。

可以封锁处理器来代替升级吗?

这样可以降低暴露,但厂商声明过滤字面请求不是已确认的完整缓解。备用处理器映射、URL 编码和自定义 HttpHandlerUrl 可以绕过基于路由的过滤器。请使用「我如何修复?」中的临时措施,并与 Telerik 支持确认任何过滤控制。

用 Ostorlab 摸清暴露的应用面

Ostorlab 的 Web Agentic Deep Scan 会爬取您的 Web 应用并绘制其页面暴露的面,包括此攻击链触及的处理器端点和对话框。使用 Ostorlab 运行扫描,找出哪些应用需要最先升级到 2026.3.812。

参考文献

  • Tanto Security,Marcio Almeida,《From Arbitrary File Read to Shell: Yet Another RCE in Telerik》,2026 年 10 月 27 日发布,包含完整攻击链、反编译代码和请求序列:https://tantosec.com/blog/2026/10/telerik-file-read-to-rce/ (2026 年 11 月 3 日核对)
  • Progress Telerik 知识库公告《RadImageEditor Path Traversal Vulnerability (CVE-2026-18672)》,包含受影响矩阵、无配置缓解声明和过滤注意事项:https://www.telerik.com/products/aspnet-ajax/documentation/knowledge-base/kb-security-rie-path-traversal-cve-2026-18672 (2026 年 11 月 3 日核对)
  • Progress Telerik 知识库公告《DialogHandler UploadPaths Tampering Vulnerability (CVE-2026-19219)》,包含受影响条件、CWE-345 与 CWE-434 和临时缓解:https://www.telerik.com/products/aspnet-ajax/documentation/knowledge-base/kb-security-dialoghandler-uploadpaths-tampering-cve-2026-19219 (2026 年 11 月 3 日核对)
  • Progress Telerik《Critical Security Bulletin - RadImageEditor and RadEditor CVE-2026-18672 and CVE-2026-19219 (2026 Q3)》,链级影响声明和按组件的修复矩阵:https://www.telerik.com/products/aspnet-ajax/documentation/knowledge-base/kb-security-radimageeditor-radeditor-rce-chain-bulletin-2026-q3 (2026 年 11 月 3 日核对)
  • CVE-2026-18672 记录,Progress CNA,含 CVSS v3.1 7.5 和 CISA ADP SSVC 块:https://www.cve.org/CVERecord?id=CVE-2026-18672 (2026 年 11 月 3 日核对)
  • CVE-2026-19219 记录,Progress CNA,含 CVSS v3.1 8.1 和 CISA ADP SSVC 块:https://www.cve.org/CVERecord?id=CVE-2026-19219 (2026 年 11 月 3 日核对)
  • Progress Telerik web.config 设置概览,建议配置加密密钥的指南:https://www.telerik.com/products/aspnet-ajax/documentation/general-information/web-config-settings-overview (2026 年 11 月 3 日核对)
  • ysoserial.net,文章用于 ViewState gadget 的 .NET 反序列化工具包:https://github.com/pwntester/ysoserial.net (2026 年 11 月 3 日核对)
  • CISA 已知被利用漏洞目录 JSON 数据源,检索两个 CVE 均无匹配,并核对该产品线的 CVE-2019-18935 历史(截至 2026 年 11 月 3 日):https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json (2026 年 11 月 3 日核对)