首页 > 运维 > linux运维 > 正文

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

蓮花仙者
发布: 2025-06-26 12:02:39
原创
1025人浏览过

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

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

代码审计 | Zoho 从未授权访问到远程 RCE接下来,我们来分析 CVE-2021-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 的访问接口也无需认证。

MacsMind
MacsMind

电商AI超级智能客服

MacsMind 131
查看详情 MacsMind

代码审计 | 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的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号