WooCommerce PDF Invoice 플러그인 PHP 객체 주입 및 원격 코드 실행(RCE) 취약점 (CVE-2026-109220)
실무자 핵심 요약 (Executive Summary)
SECOPS ASSESSMENTPDF Invoice for WooCommerce + Drag and Drop Template Builder 플러그인 7.1.1 이하 전 버전
인증되지 않은 외부 공격자가 결제 API를 통해 악성 페이로드를 주입하여 웹 서버에서 임의의 PHP 코드를 실행하고 시스템을 완전히 장악할 수 있습니다
즉시 플러그인을 최신 안전 버전(7.2.0 이상)으로 업데이트하고, 패치 적용 전까지 외부 결제 API 요청에 대한 입력값 검증 필터를 적용하십시오
영향받는 제품 및 버전 범위
권장 패치 및 임시 완화(Workaround) 가이드
패치 및 우회 명령어1. 공식 보안 패치 및 버전 업그레이드 명령어
가장 확실한 해결책은 취약점이 해결된 공식 패치 버전(7.2.0 이상)으로 신속히 업데이트하는 것입니다. WP-CLI를 사용하여 터미널에서 즉시 업데이트를 수행할 수 있습니다.
# WordPress CLI를 통한 플러그인 업데이트 수행
wp plugin update pdf-for-woocommerce --version=7.2.0 --allow-root2. 패치 전 임시 완화(Workaround) 및 접근 제어 설정
즉각적인 패치가 어려운 경우, 웹 애플리케이션 방화벽(WAF)에서 Store API의 'customer_note' 필드 내 PHP 직렬화 패턴('O:', 'a:', 's:')을 탐지하여 차단하거나, 테마의 'functions.php'에 아래와 같은 임시 필터 코드를 추가하여 입력값을 강제 정화하십시오.
// functions.php 또는 custom 플러그인에 추가하여 customer_note 내 직렬화 문자열 차단
add_filter('woocommerce_store_api_checkout_update_order_meta', function($order) {
$customer_note = $order->get_customer_note();
if (preg_match('/[Oa]:\d+:/i', $customer_note)) {
wp_die('Invalid input detected in customer note.', 'Security Block', array('response' => 400));
}
}, 10, 1);3. 침해 흔적(IoC) 및 로그·버전 점검 스크립트
웹 서버의 액세스 로그에서 Store API를 통한 비정상적인 POST 요청 및 'customer_note' 필드에 직렬화 객체가 포함되었는지 점검하십시오.
# Nginx/Apache 액세스 로그에서 Store API 호출 및 의심스러운 페이로드 패턴 검색
grep -i 'POST /wc/store/v1/checkout' /var/log/nginx/access.log | grep -E '(O:[0-9]+|unserialize)'코드 수정 전에도 가상 패치(Virtual Patching)로 웹 공격을 즉시 차단하세요
서버 재시작이나 긴급 패치가 어려운 운영 환경이라면 클라우드 WAF 관리형 룰셋을 활성화하여 SQLi, RCE, XSS 익스플로잇 페이로드를 엣지에서 1분 만에 차단할 수 있습니다.
취약점 발생 원리 및 공격 메커니즘
1. 취약점 개요 및 발생 원인 (Root Cause)
본 취약점은 WordPress의 'PDF Invoice for WooCommerce + Drag and Drop Template Builder' 플러그인에서 발생하는 심각한 PHP 객체 주입(PHP Object Injection, CWE-502) 취약점입니다. 취약점의 근본 원인은 체크아웃 시 입력받는 'customer_note' 매개변수에 대한 불충분한 검증 및 정화(Sanitization) 처리입니다. 입력된 값이 인보이스 HTML에 그대로 포함된 후, 내부 라이브러리(simplehtmldom, mPDF)의 디코딩 및 파싱 과정을 거쳐 최종적으로 mPDF 내부의 '_getObjAttr' 함수에서 검증 없이 'unserialize()'로 전달되면서 발생합니다.
2. 공격 메커니즘 및 익스플로잇 시나리오
인증되지 않은 공격자는 WooCommerce가 기본적으로 제공하는 공개 Store API(POST /wc/store/v1/checkout)를 통해 익명으로 주문을 생성할 수 있습니다. 이때 결제 수단을 무통장 입금(Direct Bank Transfer) 또는 수표(Cheque)로 지정하면 주문 상태가 자동으로 '보류(on-hold)'로 전환되며, 이는 플러그인의 인보이스 자동 생성 훅(Hook)을 트리거합니다. 공격자는 'customer_note' 필드에 직렬화된 PHP 객체 페이로드를 주입하며, 이 페이로드는 HTML 엔티티 디코딩 및 mPDF의 원시 바이트 재조립 과정을 거쳐 'unserialize()' 함수에 도달하여 서버 내 가용한 POP 체인(POP Chain)을 통해 원격 코드 실행(RCE)으로 이어집니다.
3. 비즈니스 및 인프라 파급 영향
이 취약점은 CVSS 9.8의 치명적인(Critical) 등급으로, 공격자가 어떠한 권한도 없이 원격에서 웹 서버의 제어권을 획득할 수 있습니다. 이로 인해 데이터베이스 내 고객 개인정보 및 결제 정보 탈취, 웹쉘(WebShell) 설치를 통한 지속적인 백도어 확보, 랜섬웨어 유포지 활용 등 비즈니스 신뢰도와 인프라 보안에 치명적인 피해를 초래할 수 있습니다.
공식 보안 권고문 및 참조 링크
The PDF Invoice for WooCommerce + Drag and Drop Template Builder plugin for WordPress is vulnerable to PHP Object Injection in all versions up to, and including, 7.1.1 via the 'customer_note' parameter parameter. This is due to insufficient sanitization of the customer_note checkout field, which is inlined verbatim into invoice HTML, entity-decoded back into a live tag by simplehtmldom, reassembled into raw bytes by mPDF, and passed to unserialize() in _getObjAttr without validation. This makes it possible for unauthenticated attackers to execute code on the server. An unauthenticated attacker can trigger the vulnerable code path on a default install by placing an anonymous WooCommerce checkout via the public Store API (POST /wc/store/v1/checkout) using a Direct Bank Transfer or cheque payment method, which automatically transitions the order to 'on-hold' status and fires the plugin's invoice-generation hook.
자주 묻는 실무 질문 (FAQ — CVE-2026-109220)
FAQQ1. CVE-2026-109220 취약점의 위험도와 실제 악용 가능성은 어느 정도입니까?
CVE-2026-109220의 기본 점수는 CVSS 9.8 (CRITICAL)이며, 향후 30일 내 실제 악용 확률을 나타내는 EPSS 점수는 0.5%입니다. 외부 네트워크 노출 여부에 따라 선제적인 패치 및 접근 제어가 권장됩니다.
Q2. CVE-2026-109220에 영향을 받는 벤더와 제품은 무엇입니까?
주요 영향 벤더는 wordpress, woocommerce이며, 대상 컴포넌트는 pdf-invoice-for-woocommerce-drag-and-drop-template-builder입니다. 상세 영향 범위: PDF Invoice for WooCommerce + Drag and Drop Template Builder 플러그인 7.1.1 및 이하 모든 버전
Q3. 서버 재기동이나 정규 패치 전 즉시 적용할 수 있는 완화 조치(Workaround)는 무엇입니까?
[권장 조치] 즉시 플러그인을 최신 안전 버전(7.2.0 이상)으로 업데이트하고, 패치 적용 전까지 외부 결제 API 요청에 대한 입력값 검증 필터를 적용하십시오 본문의 패치 및 우회 명령어 섹션과 자가 점검 체크리스트를 참고하여 외부 노출 포트를 차단하거나 WAF 탐지 규칙을 선적용하십시오.
CVE-2026-109220 사내 보안 패치 공지문 · CISO 경영진 보고서 초안 자동 생성
클릭 한 번으로 사내 이메일·노션·결재 문서에 바로 붙여넣을 수 있는 공식 보고서 양식을 생성합니다.
🔗 함께 점검해야 할 동일 벤더·스택 연관 취약점 (wordpress)
동일 카테고리 전체 보기 →WordPress REST API 경로 혼동 및 SQL 인젝션 연계 원격 코드 실행(RCE) 취약점 (CVE-2026-63030)
[영향 대상] WordPress 버전 6.9.x (6.9.5 미만) 및 7.0.x (7.0.2 미만)
WordPress Core 원격 코드 실행(RCE) 취약점 긴급 보안 권고 (CVE-2026-119977)
[영향 대상] WordPress Core 4.7 버전부터 7.1.3 버전까지의 모든 설치본
WordPress Core get_page_template() 로컬 파일 포함(LFI) 및 원격 코드 실행(RCE) 취약점 (CVE-2026-87902)
[영향 대상] WordPress Core 특정 버전 및 활성화된 테마 환경을 사용하는 모든 웹사이트
WordPress WP_Query 'author__not_in' 매개변수 SQL 인젝션 취약점 (CVE-2026-60137)
[영향 대상] WordPress 코어 버전 6.8.x (6.8.6 미만), 6.9.x (6.9.5 미만), 7.0.x (7.0.2 미만)
일간 취약점 브리핑 및 긴급 Zero-Day 경보 구독
보안 실무자와 인프라·백엔드 엔지니어를 위해 매일 아침 주요 취약점과 패치 우선순위를 요약해 발송합니다.