누군가 워드프레스 플러그인 30개를 구매하고 그 모든 플러그인에 백도어를 심었음
(anchor.host)- 동일한 공격자가 30개 이상의 WordPress 플러그인을 매입한 뒤, 첫 커밋에서 백도어 코드를 삽입해 공급망을 감염시킴
- 악성 코드는 약 8개월간 잠복하다가 2026년 4월 초 활성화되어 다수의 사이트에 스팸 링크와 리디렉션을 주입
- WordPress.org는 2026년 4월 7일 하루 만에 관련 31개 플러그인을 영구 폐쇄하고 강제 업데이트를 배포
- 공격자는 Flippa에서 ‘Essential Plugin’ 포트폴리오를 6자리 금액에 인수한 뒤, Ethereum 스마트 컨트랙트를 이용해 C2 도메인을 은폐
- 이번 사건은 2017년 ‘Display Widgets’ 사례와 유사한 대규모 공급망 공격 재현으로, WordPress 플러그인 생태계의 신뢰 관리 부재가 드러남
WordPress 플러그인 공급망 공격 사례
- 30개 이상의 WordPress 플러그인이 동일한 공격자에 의해 인수된 후 백도어가 심어진 사건 발생
- 공격자는 Flippa에서 ‘Essential Plugin’ 포트폴리오를 6자리 금액에 매입한 뒤, 첫 커밋에서 악성 코드를 추가
- 백도어는 8개월간 비활성 상태로 잠복하다가 2026년 4월 초에 활성화되어 수많은 사이트를 감염
- WordPress.org는 2026년 4월 7일 하루 만에 관련 플러그인 31개를 영구 폐쇄
- 이번 사건은 2017년 ‘Display Widgets’ 사건과 유사한 공급망 공격 패턴의 재현으로 평가됨
공격 발견과 초기 대응
- 한 클라이언트 사이트의 wp-admin 보안 경고를 통해 최초 감염이 확인됨
- WordPress.org 플러그인 팀은 “Countdown Timer Ultimate” 플러그인에 무단 접근 가능 코드가 포함되었다고 경고
- WordPress.org는 강제 업데이트(v2.6.9.1)를 배포했으나, 이미 일부 사이트는 손상된 상태였음
- 보안 점검 결과, 플러그인의
wpos-analytics모듈이 analytics.essentialplugin.com에 접속해wp-comments-posts.php파일을 다운로드하고, 이를 통해 wp-config.php에 대규모 PHP 코드 주입이 이루어짐
악성코드의 작동 방식
- 주입된 코드는 스팸 링크, 리디렉션, 가짜 페이지를 C2 서버에서 받아와 Googlebot에만 노출
- 공격자는 Ethereum 스마트 컨트랙트를 이용해 C2 도메인을 동적으로 관리
- 블록체인 RPC 엔드포인트를 통해 도메인을 조회하므로, 일반적인 도메인 차단으로는 차단 불가
- WordPress.org의 강제 업데이트는 플러그인의 전화 홈 기능만 중단시켰으며, wp-config.php의 악성 코드는 그대로 남아 있었음
백업 분석을 통한 감염 시점 추적
- CaptainCore의 restic 백업을 이용해 8개의 시점별
wp-config.php파일 크기를 비교- 2026년 4월 6일 04:22~11:06 UTC 사이에 파일 크기가 3,345바이트에서 9,540바이트로 증가
- 감염이 이 6시간 44분 사이에 발생한 것으로 확인됨
백도어의 삽입 시점과 코드 구조
- 플러그인 버전 2.6.7(2025년 8월 8일)에서 191줄의 신규 코드가 추가되며 백도어 삽입
- 변경 로그에는 “WordPress 6.8.2 호환성 확인”이라고 기재되어 있었음
- 추가된 코드의 주요 기능
-
fetch_ver_info()가 공격자 서버의 데이터를@unserialize()로 처리 -
version_info_clean()이 원격 데이터에서 받은 함수명을 실행 - 인증 없이 호출 가능한 REST API 엔드포인트 생성 (
permission_callback: __return_true)
-
- 이 구조는 임의 함수 실행(RCE) 을 가능하게 하며, 8개월간 비활성 상태로 유지되다 2026년 4월 5~6일에 활성화됨
플러그인 인수 과정
- 원래 개발팀은 인도 기반의 WP Online Support로, 2015년부터 플러그인을 개발
- 이후 Essential Plugin으로 리브랜딩하고 30개 이상의 무료·유료 플러그인을 운영
- 2024년 말 매출이 35~45% 감소하자 Flippa에 전체 사업을 매물로 등록
- 2025년 초, ‘Kris’라는 인물이 SEO·암호화폐·온라인 도박 마케팅 경력을 가진 상태로 인수
- Flippa는 2025년 7월 이 거래를 성공 사례로 블로그에 게재
- 인수 후 첫 SVN 커밋(2025년 8월 8일)에서 바로 백도어 코드가 추가됨
- 2026년 4월 5~6일,
analytics.essentialplugin.com이 모든 사이트에 악성 페이로드를 배포 시작 - 2026년 4월 7일, WordPress.org가 Essential Plugin의 모든 플러그인(31개)을 영구 폐쇄
폐쇄된 플러그인 목록
- Accordion and Accordion Slider, Countdown Timer Ultimate, Popup Anything on Click, WP Blog and Widgets, WP Team Showcase and Slider 등 30개 이상 플러그인
- WordPress.org에서 해당 작성자 검색 시 결과 없음
-
analytics.essentialplugin.com은 현재{"message":"closed"}응답 반환
과거 유사 사례
- 2017년, ‘Daley Tias’라는 인물이 Display Widgets 플러그인(20만 설치)을 $15,000에 매입 후 스팸 코드 삽입
- 이후 9개 이상의 플러그인을 같은 방식으로 감염
- 이번 사건은 동일한 수법을 더 큰 규모(30개 이상) 로 재현한 사례로 확인됨
피해 복구 및 패치 작업
- WordPress.org의 강제 업데이트는 임시 조치에 불과
-
wpos-analytics모듈 자체는 여전히 존재
-
- 자체적으로 백도어 모듈을 완전히 제거한 패치 버전 제작
- 22개 고객 사이트 중 12개에서 Essential Plugin 플러그인 발견, 10개를 직접 패치
- 패치 버전은
wpos-analytics디렉터리 삭제, 로더 함수 제거, 버전명에-patched추가
- 예시: Countdown Timer Ultimate, Popup Anything on Click, WP Testimonial with Widget 등
직접 패치 방법
-
wpos-analytics/디렉터리 삭제 - 메인 플러그인 파일에서 “Plugin Wpos Analytics Data Starts” 또는
wpos_analytics_anl블록 제거 -
Version:헤더에-patched추가 후 재압축 -
wp plugin install your-plugin-patched.zip --force로 설치 -
wp-config.php파일 크기가 약 6KB 증가했다면 활성 감염 상태로 간주하고 전체 복구 필요
WordPress 플러그인 생태계의 신뢰 문제
- 최근 2주간 공급망 공격이 연속 발생
- 신뢰받는 플러그인을 인수 후 악성 코드 삽입
- WordPress.org 커밋 권한을 그대로 승계받아 검증 없이 배포
- WordPress.org에는 소유권 변경 감시나 코드 재검토 절차가 없음
- 새로운 커미터 등록 시 사용자 알림이나 자동 리뷰 기능 부재
- 플러그인 팀의 대응은 신속했으나, 백도어 삽입 후 8개월간 탐지되지 않음
- WordPress 사이트 운영자는 플러그인 목록을 점검하고, Essential Plugin 계열 플러그인을 즉시 제거 또는 패치,
wp-config.php파일도 반드시 확인 필요
수십년간 쓰고있는 워드프레스..
최소한의 플러그인만 쓰고있지만 그래도 언제나 불안하네요.
그래도 스태틱 보다는 아직도 편해서 이동하고 싶지는 않아요!
워드프레스는 정말.. 계속 문제가 나네요. 이미 사용중이시라면 관련글에 EmDash 같은 걸 참고하세요.
전 이미 버리고 그냥 스태틱 페이지로 옮겼습니다.
Hacker News 의견들
-
Mythos에 대한 과장된 반응이 늘 웃김
자동화된 취약점 탐지 기술이 보안 업계를 흔들 수는 있겠지만, 진짜 걱정해야 할 건 그게 아님
지금의 기술 스택과 기업 거버넌스는 이미 시대에 뒤처져 있음
상황을 악화시킨 주범을 꼽자면 암호화폐임. 이로 인해 해킹이 수십억 달러 규모의 산업이 되었고, 북한 같은 국가까지 끌어들였음
이제는 단순히 종속성을 사들이거나 직원에게 돈을 주고 “실수”를 유도할 수도 있는 현실임
우리는 버그가 거의 없는 소프트웨어를 작성할 수 있지만, 대기업을 이 환경에서 안전하게 유지할 계획은 없음
자율형 LLM 에이전트가 랜섬웨어 조직에 쓰이겠지만, FreeBSD 익스플로잇을 쓸 필요는 없음- “버그가 거의 없는 소프트웨어를 쓸 수 있다”는 말에 의문이 듦
실제로 매주 PrimeVue, Vue, Spring Boot, Oracle 드라이버, Ansible, Nvidia 드라이버 등에서 버그를 마주침
현실적으로 완전한 무결점 코드는 항공기나 우주선 정도에서나 가능할 듯함
대부분의 개발자는 버그 없는 코드를 쓰지 않으려는 게 아니라, 환경적 제약 때문에 불가능한 경우가 많음 - LAPSUS$ 사례처럼 단순히 직원에게 뇌물을 주는 방식으로 내부 접근 권한을 얻은 해킹 그룹도 있었음
이런 일은 이론이 아니라 현실임. 국가 단위의 자금력이라면 내부자 매수는 훨씬 쉬움 - 이 문제는 기술보다 조직 문화의 문제로 봄
OSS 프로젝트는 대기업 소프트웨어보다 “WTF 버그”가 적음
혼자 개발하는 환경에서는 상식적으로 하지 않을 실수를 조직에서는 승인 절차나 관행 때문에 그대로 배포함
“이게 최선인가?”라는 질문을 던질 수 없는 비정상적 문화가 버그를 양산함
작은 팀에서는 바꾸기 쉽지만, 대규모 조직에서는 비용이 큼 - 공격자가 Ethereum 스마트 컨트랙트를 통해 C2 도메인을 갱신할 수 있다면, 방화벽이 모든 Ethereum 엔드포인트를 차단해야 하는지 궁금함
- The Register 기사에서 말하듯, 공격자들이 공급망을 비용-위험 분석 대상으로 삼는 건 합리적인 전략임
- “버그가 거의 없는 소프트웨어를 쓸 수 있다”는 말에 의문이 듦
-
웹 프로젝트를 보면 항상 “npm install”로 시작하고, 수십 개의 라이브러리가 자동으로 설치됨
작성자조차 어떤 전이적 의존성이 포함됐는지 모르는 경우가 많음
이런 구조에서는 공급망 공격을 검증할 가능성이 거의 없음- 이런 이유로 나는 외부 패키지를 최대한 피함
최근 Python 표준 라이브러리만으로 날씨 동기화 도구를 작성했음
requests같은 외부 패키지를 쓰지 않아도 충분했고, 의존성 없는 평안함을 얻었음 - “바퀴를 다시 만들지 말라”는 말이 있지만, 적절한 중간 지점이 필요함
암호화 같은 핵심 로직은 직접 구현하면 안 되지만, 단순한 기능까지 라이브러리에 의존하는 건 과함 - 이건 웹만의 문제가 아니라 maven, Python, Ruby 등 모든 생태계의 공통 문제임
- Lockfile이 생각보다 큰 도움이 됨
버전이 고정돼 있으면, 패키지가 매각되어 백도어가 심어져도 직접 업데이트하기 전까지는 영향이 없음
오히려 Dependabot이 자동으로 “패치 버전” PR을 올려서 위험을 초래하는 경우가 더 무서움 - 더 나쁜 건
sudo curl URL | bash같은 습관임
- 이런 이유로 나는 외부 패키지를 최대한 피함
-
소프트웨어 업데이트 이념 자체가 문제라고 생각함
업데이트는 보안 패치라는 장점이 있지만, 동시에 개발자가 원치 않는 변경을 강제하거나 악의적으로 변할 위험도 있음
특히 개인 개발자의 WordPress 확장은 자동 업데이트를 절대 허용하지 않는 게 낫다고 봄
wordpress.org 마켓플레이스는 이런 구조를 지원하지 않아 위험함
나는 예전에 Chrome 확장 관련 댓글을 썼는데, Chrome을 WordPress로 바꿔도 여전히 그대로 적용됨 -
WordPress 플러그인의 공급망 공격면은 오래전부터 위험했음
개별 개발자가 만든 작은 플러그인을 다수 설치하도록 유도하는 생태계 구조 때문임
이미 신뢰를 얻은 플러그인을 인수 후 악용하는 건 매우 효율적인 공격 방식임
“업데이트 알림”이 곧 신뢰 신호로 작동하기 때문에 사용자는 작성자가 바뀌었는지도 모름
패키지 서명 및 투명성 시스템이 필요하지만, WordPress는 보안 인프라 개선 속도가 느림- 대부분 사용자가 무료 플러그인만 쓰려 해서 사이트가 프리미엄+광고 플러그인으로 뒤덮임
관리자 페이지가 마치 IE6 툴바 밈처럼 보일 정도였음 - 클라이언트용 WordPress 사이트 제작을 그만둔 이유도 이 때문임
무료 버전의 Securi나 Wordfence를 설치만 하고 설정도 안 한 채로 완전한 보안을 기대하는 경우가 많았음 - wp.org가 악성 행위자에게 너무 관대함
명백한 악성코드는 차단하지만, 제3자 도메인에서 광고 위젯을 삽입하는 식의 bait-and-switch는 묵인함
이런 수준이면 거의 의도된 설계로 봐야 함
- 대부분 사용자가 무료 플러그인만 쓰려 해서 사이트가 프리미엄+광고 플러그인으로 뒤덮임
-
FAIR 패키지 매니저 프로젝트가 성공하지 못한 게 아쉬움
fair.pm은 atproto에서 영감을 받은 분산형 구조로, 중앙 저장소 없이 누구나 운영 가능함
패키지는 DID로 식별되고, Socket 같은 기관이 분석 결과를 “라벨러”로 부착할 수 있음
사용자는 특정 라벨이 붙은 패키지를 차단하거나, AI 기반 보안 분석 라벨러를 직접 운영할 수도 있음
완벽하진 않지만, 중앙집중형 패키지 매니저보다 훨씬 나은 접근임- 포기한 게 아니라 기술 중심으로 전환했음
현재 Typo3 커뮤니티와 협력 중이며, 다른 생태계로 확장 중임 (작성자가 FAIR 공동의장임) - npm 대안으로 흥미로운 플랫폼이 될 수 있음
WordPress보다 인센티브 구조가 낫지만, 여전히 충분하지 않을 수도 있음 - 다수의 저장소가 SEO용 악성 코드로 채워질 가능성이 높다면, 검색 엔진만으로 안전한 저장소를 찾는 건 불가능함
분산화가 자유를 주긴 하지만, 사용자 입장에서는 불편함이 큼 - FAIR이 WordPress 전용인지 궁금함
- 포기한 게 아니라 기술 중심으로 전환했음
-
이번 사건의 흥미로운 점은 플러그인이 Flippa에서 인수되었다는 것임
Flippa는 WP 전용이 아닌 일반 소프트웨어 매매 마켓플레이스임
선의로 인수된 인디 앱이나 확장이 나중에 무기화될 가능성이 커서 우려됨
이런 앱은 진짜 운영자보다 공격자에게 더 가치가 있음 -
가장 무서운 건 백도어 자체가 아니라, 인수가 너무 정상적으로 보였다는 점임
신뢰받던 플러그인을 사서 업데이트를 푸시하는 행위가 합법적 유지보수와 구분되지 않음
사용자가 의심할 신호가 전혀 없음 -
시장 경쟁을 제한하는 M&A는 정부 승인을 받기도 함
그렇다면 보안에 중대한 영향을 미치는 인수도 마켓플레이스나 정부의 승인 절차가 필요하지 않을까 생각함
Mergers and acquisitions 위키 문서 참고 -
WordPress는 플러그인 덕분에 훌륭했지만, 이제는 그 플러그인 구조 때문에 위험한 생태계가 되었음
나는 Hugo로 이전했고, 다른 사람들에게도 이전 가이드를 추천함 -
기업들이 “IT 아웃소싱”을 하면서 얼마나 많은 통제권을 잃었는지 제대로 인식하지 못한 것 같음