代码审计 | Zoho 从未授权访问到远程 RCE

zoho manageengine servicedesk plus(sdp)是美国卓豪(zoho)公司的一款基于 itil 架构的 it 软件。这款软件涵盖了事件管理、问题管理、资产管理、it项目管理以及采购与合同管理等多种功能模块。

该系统主要在国外使用,例如通过 fofa 的查询可以看到:

代码审计 | Zoho 从未授权访问到远程 RCE接下来,我们来分析 CVE-2025-44077 漏洞的起因,从未授权访问开始。

0x01 未授权访问根据 Web.xml 文件,可以看到 RestAPI 的请求将由 struts 处理:

  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>/RestAPI/*</url-pattern>
  </servlet-mapping>

此外,还有一段配置,根据注释可以看出,以下 URL 需要登录认证,例如 xxx.do:

    <security-constraint>
      <web-resource-collection>
        <web-resource-name>Secured Core Context</web-resource-name>
        <url-pattern>*.do</url-pattern>
        <url-pattern>/app</url-pattern>
        <url-pattern>/ui/*</url-pattern>
        <url-pattern>*.cc</url-pattern>
        <url-pattern>*.ls</url-pattern>
        <url-pattern>/SoftwareFileUploader.up</url-pattern>
        <url-pattern>/WOResolutionFileUploader.up</url-pattern>
        <url-pattern>*.json</url-pattern>
        <url-pattern>*.jsp</url-pattern>
        <url-pattern>/servlet/*</url-pattern>
        <url-pattern>/ze/*</url-pattern>
        <url-pattern>/aplusinteg</url-pattern>
        <url-pattern>/RestAPI/WC/TwoFactorAction</url-pattern>
      </web-resource-collection>
      <auth-constraint>
        <role-name>*</role-name>
      </auth-constraint>
    </security-constraint>

同时,还配置了一些不需要登录的 URL:

  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Secured Core Context</web-resource-name>
      <url-pattern>/approval/*</url-pattern>
      <url-pattern>/purchase/ApprovalDetails.jsp</url-pattern>
      <url-pattern>/jsp/AuthError.jsp</url-pattern>
      <url-pattern>/AuthError.jsp</url-pattern>
      <url-pattern>/jsp/pagenotfound.jsp</url-pattern>
      <url-pattern>/jsp/exceptionerror.jsp</url-pattern>
      <url-pattern>/ze/*</url-pattern>
      <url-pattern>/servlet/HdFileDownloadServlet</url-pattern>
      <url-pattern>/workorder/CloseWorkOrder.jsp</url-pattern>
      <url-pattern>/PurchaseRequestFileUploader.up</url-pattern>
      <url-pattern>/PurchaseOrderFileUploader.up</url-pattern>
      <url-pattern>/workorder/SDPOutlookAddIn.jsp</url-pattern>
      <url-pattern>/j_security_check</url-pattern>
      <url-pattern>/RestAPI/TwoFactorAction</url-pattern>
    </web-resource-collection>
  </security-constraint>

在代码 org.apache.catalina.realm.RealmBase#findSecurityConstraints 中使用了上述配置信息。

然而,令人困惑的情况是,当构造 /RestAPI/ImportTechnicians 这种不在上述配置中的请求时,是否需要登录呢?

通过调试发现如下图所示,在经过 findSecurityConstraints 的一系列匹配后,由于没有匹配成功,最终返回 null。程序进入 if 语句块,继续执行下一个管道操作,因此 /RestAPI/ImportTechnicians 无需认证。同理,类似 /RestAPI/xxxx 的访问接口也无需认证。

钉钉 AI 助理 钉钉 AI 助理

钉钉AI助理汇集了钉钉AI产品能力,帮助企业迈入智能新时代。

钉钉 AI 助理 204 查看详情 钉钉 AI 助理

代码审计 | Zoho 从未授权访问到远程 RCE代码审计 | Zoho 从未授权访问到远程 RCE代码审计 | Zoho 从未授权访问到远程 RCE0x02 任意文件上传在 com.adventnet.servicedesk.setup.action.ImportTechniciansAction#execute 中有一个明显的文件写入操作,且文件内容来自上传表单。

代码审计 | Zoho 从未授权访问到远程 RCE根据配置文件,可以构造相应的请求,执行后会在 bin 目录下保存上传的文件。

  <action name="ImportTechnicians" path="/ImportTechnicians" scope="request" type="com.adventnet.servicedesk.setup.action.ImportTechniciansAction">
    <forward name="GetInputFile" path="/setup/GetTechInputFile.jsp"></forward>
    <forward name="ImportConfirmation" path="/setup/TechImportConfirmation.jsp"></forward>
    <forward name="MapFields" path="/setup/TechMapFields.jsp"></forward>
  </action>

代码审计 | Zoho 从未授权访问到远程 RCE0x03 命令执行在 com.manageengine.s247.util.S247Util#installAgentProgress 中调用 bin 目录下的 msiexec.exe,结合刚才的文件上传,因此可以上传一个名为 msiexe.exe 的文件,然后调用该接口。

代码审计 | Zoho 从未授权访问到远程 RCEinstallAgentProgress 在 com.manageengine.s247.actions.S247Action#s247AgentInstallationProcess 这个 action 中被调用。

代码审计 | Zoho 从未授权访问到远程 RCE最后,将未授权访问和文件上传结合起来,就可以完成一次未授权的命令执行。

代码审计 | Zoho 从未授权访问到远程 RCE总结寻找未授权访问原因时花了一些时间,最初以为是在 Filter 中进行的鉴权,但排查了几个 Filter 后没有发现。接着一步步调试,最终发现是在 Tomcat Pipeline 机制中进行的鉴权。反复对比配置文件,也没找出配置错误的点,因为它不仅配置了需要认证的 URL,也配置了不需要认证的 URL,这让我迷惑了许久,算是踩了一个大坑。

以上就是代码审计 | Zoho 从未授权访问到远程 RCE的详细内容,更多请关注其它相关文章!

本文转自网络,如有侵权请联系客服删除。