WordPress 플러그인 소유권 인수형 공급망 백도어 공격 분석

WordPress 플러그인 소유권 인수 뒤 삽입된 PHP Deserialization 백도어와 공급망 무결성 검증, 감염 대응 방안을 정리한다.

2026-08-14 · 최초 발행 2026-04-17

2026년 4월 발견된 Essential Plugin 공급망 공격은 취약점을 뚫거나 메인테이너 계정을 탈취한 사례가 아니었다. 공격자는 Flippa에서 플러그인 포트폴리오를 정상적으로 인수한 뒤, 업데이트 권한을 이용해 PHP Deserialization 백도어를 배포했다. 합법적인 거래가 신뢰 체인을 우회하는 통로가 된 사례다.

대상은 Countdown Timer Ultimate, Popup Anything on Click, WP Testimonial with Widget, WP Team Showcase and Slider, WP FAQ, SP News and Widget 등을 포함한 31개 플러그인이었고, 20,000개 이상의 활성 WordPress 사이트에 영향을 미쳤다. 구매자는 SEO·암호화폐·온라인 도박 마케팅 배경을 가진 “Kris”라는 가명의 인물로 알려졌다. 원 개발자인 Minesh Shah, Anoop Ranawat, Pratik Jain은 COVID 이후 35~45% 감소한 매출을 이유로 사업 매각을 결정했다.

WordPress.org은 2026년 4월 7일 해당 저자의 모든 플러그인을 영구 폐쇄했다.

소유권 이전 뒤 이어진 백도어 배포

공격은 2025년 초 포트폴리오 매입으로 시작됐고, 2025년 8월 8일 v2.6.7 릴리스에 백도어가 들어갔다. 변경 로그에는 WordPress 6.8.2 호환성 점검으로 표시돼 있었다.

2025년 초: Flippa에서Essential Plugin 포트폴리오매입2025년 8월 8일: v2.6.7릴리스백도어 삽입: 191줄 PHP 코드추가변경 로그 위장: WordPress6.8.2 호환성 점검2025년 8월 ~ 2026년 4월:8개월 잠복기2026년 4월 5~6일: 백도어활성화wpos-analytics 모듈 작동wp-comments-posts.php다운로드wp-config.php에 악성 코드주입2026년 4월 7일:WordPress.org 전체 폐쇄2026년 4월 8일: v2.6.9.1강제 배포

잠복 기간은 약 8개월이었다. 이 기간에는 이상 행위가 관측되지 않아 보안 도구와 사용자 모두 기존 신뢰를 유지했다. 실제 활성화 윈도우는 2026년 4월 6일 04:22 ~ 11:06 UTC, 약 6시간 44분이었다.

WordPress.org은 v2.6.9.1을 강제 배포하며 phone-home 함수에 return문을 삽입해 기능을 비활성화했다. 다만 이미 wp-config.php에 주입된 악성 코드는 이 업데이트로 자동 제거되지 않는다.

원격 응답이 제어한 역직렬화 체인

v2.6.7에 삽입된 191줄의 핵심 코드는 class-anylc-admin.phpfetch_ver_info() 메서드에 있었다. 이 메서드는 file_get_contents()로 원격 데이터를 받은 뒤 @unserialize()에 직접 넘긴다.

version_info_clean() 메서드는 @$clean($this->version_cache, $this->changelog) 형태로 함수명과 파라미터를 모두 원격 응답에서 제어한다. 이는 임의 함수 호출(arbitrary function call) 프리미티브를 구성한다. REST API 엔드포인트의 permission_callback__return_true로 설정돼 있어 인증 없이 외부 호출도 가능했다.

C2 도메인 해석에는 Ethereum 스마트 컨트랙트가 사용됐다. 전통적인 도메인 차단 방식으로는 통신을 막기 어려운 구조다.

C2 인프라페이로드 배포백도어 체인REST API 엔드포인트(인증 불필요)fetch_ver_info()file_get_contents()@unserialize()PHP Deserializationversion_info_clean()임의 함수 실행wpos-analyticsphone-homewp-comments-posts.php다운로드wp-config.php코드 주입SEO 스팸 클로킹Googlebot 전용Ethereum스마트 컨트랙트C2 도메인 해석

wpos-analytics는 플러그인 내장 분석 모듈처럼 동작하며 analytics.essentialplugin.com으로 phone-home한다. 이후 원격에서 받은 wp-comments-posts.phpwp-config.php에 PHP 코드를 직접 주입한다. Googlebot User-Agent에만 클로킹된 SEO 스팸 콘텐츠를 제공하기 때문에, 사이트 관리자가 브라우저로 확인해서는 이상 징후를 보기 어렵다.

wp-config.php가 변조되면 데이터베이스 자격 증명이 노출될 수 있고, 추가 악성코드를 내려받을 경로도 확보된다.

코드 탈취와 다른 소유권 인수형 공격

일반적인 공급망 공격은 계정 탈취, 타이포스쿼팅, 의존성 혼동처럼 배포 권한을 비정상적으로 얻는 방식에 집중된다. 이 사건에서는 거래를 통해 소유권을 이전받아 코드, 배포, 업데이트 채널 전체를 제어했다.

구분 기존 공급망 공격 소유권 인수 공격
침투 방식 메인테이너 계정 탈취, 타이포스쿼팅, 의존성 혼동 합법적 비즈니스 거래를 통한 소유권 이전
권한 획득 제한적 커밋 권한 플러그인 전체 제어권 (코드, 배포, 업데이트 채널)
탐지 난이도 비정상 커밋 패턴으로 탐지 가능 정당한 소유자의 정상 업데이트로 인식
잠복 기간 수일~수주 수개월 이상 (이번 사건: 8개월)
규모 단일 패키지 포트폴리오 단위 다수 패키지 동시 장악

2024년 xz-utils 사건은 메인테이너 신뢰를 확보한 뒤 백도어를 삽입한 사례로, 2년간의 기여 활동을 거쳐 커밋 권한을 얻었다. 2026년 3월 Axios 공급망 침해에서는 GitHub Actions 워크플로우의 floating tag가 활용됐고, 빌드 파이프라인의 무결성이 검증되지 않았다. 2026년 TeamPCP 공급망 공격은 Trivy, KICS, LiteLLM 등 보안 도구 자체를 겨냥한 다단계 공격이었다.

반면 Essential Plugin 사건의 핵심은 기술적 침투 없이 신뢰 체인을 매입했다는 데 있다.

소유권 변경까지 포함하는 무결성 검증

SLSA(Supply Chain Levels for Software Artifacts) 프레임워크는 빌드 프로세스의 출처(provenance)를 증명하고 무결성을 보장하는 데 사용할 수 있다. 코드 서명은 릴리스 바이너리에 개발자 서명을 부착하며, 서명 키가 교체될 때 공개적인 검증 절차가 필요하다.

SBOM(Software Bill of Materials)에는 플러그인의 모든 의존성과 코드 변경 이력을 기계 판독 가능한 형식으로 공개할 수 있다. 빌드 의존성은 floating tag 대신 특정 커밋 해시로 고정해 빌드 시점의 무결성을 확보한다.

WordPress 생태계에서는 소유자 변경 시 자동 코드 감사를 트리거하는 방식이 필요하다. 새 플러그인 릴리스는 최소 7일 대기한 뒤 적용해 커뮤니티 검증 시간을 둘 수 있다. 설치 후에도 Runtime Dependency Scanning으로 외부 통신, 파일 변조, 비정상 함수 호출을 모니터링해야 한다.

공개 저장소에서 즉시 설치하는 대신 내부 프록시를 두고, 스캔과 승인을 마친 버전만 배포하는 방법도 있다. 조직 차원에서는 개발사의 소유권 변경 이력, 사업자 정보, 개발자 배경을 주기적으로 확인하는 공급업체 실사(Vendor Due Diligence)가 필요하다.

플러그인 프로세스가 wp-config.php 같은 핵심 파일을 쓰지 못하도록 최소 권한 원칙을 적용하고, wp-config.php, wp-includes/의 변경을 감지하는 Integrity Monitoring을 구성해야 한다. 플러그인 폐쇄 시 비활성화, 제거, 감염 점검을 즉시 수행하는 Incident Response 계획도 자동화 대상이다.

이미 설치된 사이트에서 확인할 항목

먼저 wp-config.php에 알 수 없는 PHP 코드가 있는지 점검한다. 특히 @unserialize(), file_get_contents() 호출을 확인한다. WordPress 루트 디렉토리에 wp-comments-posts.php가 있으면 즉시 삭제해야 한다.

플러그인 내부의 wpos-analytics 디렉토리에서는 외부 통신 코드를 확인한다. Essential Plugin 계열 플러그인은 즉시 비활성화하고 제거한다. v2.6.9.1 업데이트만으로는 기존에 주입된 악성 코드가 제거되지 않는다.

wp-config.php 변조 가능성이 있으므로 데이터베이스 비밀번호를 즉시 교체하고, 서버 접근 로그에서 analytics.essentialplugin.com으로 향한 아웃바운드 연결과 의심 IP 접속 기록을 분석해야 한다.

이 사건은 코드 리뷰와 취약점 스캔만으로는 소유권 이전에 따른 위험을 포착할 수 없다는 점을 보여준다. SLSA 기반 출처 증명, SBOM, 소유권 변경 시 보안 리뷰, 런타임 무결성 모니터링을 함께 운영해야 신뢰 경로 자체가 바뀌는 공격에 대응할 수 있다.

Sources

워드프레스 보안공급망 공격플러그인 백도어오픈소스 보안DevSecOps