
# HestiaCP 서버용 읽기 전용 WordPress 보안 스캐너 호스팅된 모든 사이트에서 wp2shell 침해 지표(CVE-2026-63030 / CVE-2026-60137)를 탐지합니다 — 사용자별 이메일 보고서, 정상 WordPress와의 핵심 파일 비교, PHP/JS/htaccess/이미지 분석, Claude API를 통한 선택적 AI 평가 기능을 제공합니다.
HestiaCP 서버용 읽기 전용 WordPress 보안 스캐너.
호스팅된 모든 사이트에서 wp2shell 침해 지표를 탐지합니다 — 클라이언트별 이메일 보고서, 코어 파일 diff, SHA256 웹셸 탐지, 위험 점수, 선택적 AI 평가 포함.
⚠️ 안전한 버전: WordPress 6.8.6 / 6.9.5 / 7.0.2 이상.
이 스크립트는 아무것도 수정하지 않습니다 — 전체 과정이 읽기 전용입니다.
wp2shell은 2026년 7월 17일에 공개된 WordPress 코어의 사전 인증 원격 코드 실행(RCE) 체인입니다. 기본 설치에 대한 단일 익명 HTTP 요청만으로도 악성 관리자 계정을 생성하고 서버에서 임의 코드를 실행할 수 있습니다.
이 체인은 다음을 결합합니다:
WP_Query의 author__not_in 매개변수의 SQL 인젝션/wp-json/batch/v1 엔드포인트의 라우트 혼동침해된 사이트에는 로그인 접두사 wp2_와 이메일 @wp2shell.invalid을 가진 악성 관리자가 나타납니다.
자세한 정보: https://wp2shell.com
| 파일 | 용도 |
|---|---|
wp2shell-scan.sh | 빠른 서버 전체 IoC 스캐너 — 색상 구분 터미널 출력, 사이트별 위험 점수, /root/에 자동 저장되는 보고서 |
wp2shell-report-per-user.sh | 전체 스캐너 — HestiaCP 사용자별 이메일 보고서, 코어 파일 diff, SHA256 웹셸 탐지, AI 평가, 위험 점수 |
known_shells.sha256 | 알려진 웹셸 해시 데이터베이스(SHA256) — 실행 시 자동으로 가져옴 |
| 확인 항목 | 심각도 |
|---|---|
| WordPress 버전 vs. 안전한 버전 | HIGH / OK |
wp2_ 접두사 또는 @wp2shell.invalid 이메일을 가진 계정 | CRITICAL |
| 공개(15/07/2026) 이후 생성된 관리자 | MEDIUM |
| 사용자 ID 시퀀스의 공백(삭제된 악성 관리자 흔적) | MEDIUM |
고아가 된 wp_usermeta 행 | MEDIUM |
오염된 oembed_cache / customize_changeset 행 | CRITICAL |
변조된 WP 옵션(upload_path, auto_prepend_file, siteurl) | CRITICAL / HIGH |
| 확인 항목 | 심각도 |
|---|---|
wp.org 대비 wp core verify-checksums | HIGH |
깨끗한 다운로드 코어 대비 줄 단위 diff -U5 | CRITICAL / HIGH / OK |
| 깨끗한 코어에 없는 추가 파일(콘텐츠 및 메타데이터 표시) | CRITICAL / HIGH |
| 확인 항목 | 심각도 |
|---|---|
uploads/ 내 PHP 파일 | CRITICAL |
추가 PHP 확장자(.php7 .phtml .phar .php5) | HIGH |
| 알려진 웹셸 데이터베이스와 SHA256 일치(WSO, FilesMan, b374k, p0wny…) | CRITICAL |
SINCE_DATE 이후 수정된 PHP 그리고 의심스러운 패턴 일치 — 일치하는 줄 인라인 표시 | CRITICAL / HIGH |
| 의심스러운 패턴이 있지만 최근에 수정되지 않은 PHP | LOW |
SINCE_DATE 이후 수정되고 난독화 패턴과 일치하는 JS/HTML | MEDIUM |
| 외부 C2/데이터 유출 URL(pastebin, ngrok, Discord webhooks, bit.ly…) | CRITICAL |
위험한 .htaccess 지시문(AddType, auto_prepend_file, 외부 RewriteRule) | HIGH |
SINCE_DATE 이후 수정된 .htaccess | MEDIUM |
PHP 페이로드가 포함된 폴리글롯 이미지(.jpg/.png 내 <?php…) | CRITICAL |
노출된 백업/설정 파일(wp-config.php.bak, *.sql…) | MEDIUM |
| 확인 항목 | 심각도 |
|---|---|
curl/wget/php/base64가 포함된 사용자 crontab 항목 | HIGH |
| 사이트 경로를 참조하는 시스템 cron 파일 | MEDIUM |
각 사이트는 모든 발견 항목의 세부 내역과 함께 0–100 위험 점수를 받습니다:
+------------------------------------------+
| RISK SCORE: 96/100 COMPROMISED |
+------------------------------------------+
+40 wp2shell fingerprint account
+30 PHP file(s) inside uploads/
+20 Vulnerable WordPress version
+6 Core checksum failure
| 점수 | 라벨 |
|---|---|
| 0–20 | Probably Clean |
| 21–40 | Low Risk |
| 41–60 | Medium Risk |
| 61–80 | High Risk |
| 81+ | COMPROMISED |
wp로 전역 설치root 액세스sendmail(이메일 보고서용)python3(AI 평가 JSON 처리용)curl, sha256sum, file, strings, unzipcurl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar && sudo mv wp-cli.phar /usr/local/bin/wp
curl -fsSL https://raw.githubusercontent.com/BytesPulse-OE/wp2shell-Hestia-Scanner/main/wp2shell-scan.sh | sudo bash
curl -fsSL https://raw.githubusercontent.com/BytesPulse-OE/wp2shell-Hestia-Scanner/main/wp2shell-report-per-user.sh \
-o wp2shell-report-per-user.sh && sudo bash wp2shell-report-per-user.sh
참고: 전체 스캐너는 시작 시 대화형 질문(AI 평가, 보고서 저장, 날짜 기준)을 합니다. 먼저 다운로드한 후 실행하면 프롬프트가 올바르게 작동합니다.
sudo bash wp2shell-scan.sh
/home/*/web/*/public_html/ 아래의 모든 WordPress 설치를 찾아 모든 검사를 실행하고, 색상 구분 출력을 터미널에 표시하며, 전체 보고서를 /root/wp2shell-report-YYYYMMDD-HHMMSS.txt에 저장합니다.
시작 시 선택적 사용자 지정 날짜 기준을 묻습니다(기본값: 2026-07-15).
sudo bash wp2shell-report-per-user.sh
시작 시 세 가지 질문:
[AI EVALUATION] Use AI evaluation for ambiguous files? [y/N]
[SAVE REPORT] Save a full report file for later review? [y/N]
[DATE THRESHOLD] Use a different date? Leave blank to keep default [YYYY-MM-DD]:
항상 DRY_RUN=1로 시작하세요(기본값) — 이메일은 화면에 미리 보기로 표시되며 전송되지 않습니다. 출력이 올바른지 확인한 후에만 DRY_RUN=0으로 변경하세요.
| 변수 | 기본값 | 설명 |
|---|---|---|
WEB_ROOT | /home | HestiaCP 웹 루트 |
SINCE_DATE | 2026-07-15 | "최근 수정됨" 기준 |
WP | wp | WP-CLI 경로 |
| 변수 | 기본값 | 설명 |
|---|---|---|
DRY_RUN | 1 | 1 = 미리 보기 전용, 0 = 이메일 전송 |
SEND_ONLY_IF_ISSUES | 0 | 1 = 사이트가 깨끗하면 이메일 건너뜀 |
SINCE_DATE | 2026-07-15 | "최근 수정됨" 기준 |
MAIL_FROM | security@<hostname> | 봉투 발신자 |
CORE_CACHE | /root/wp2shell-cores | 깨끗한 코어 캐시 디렉터리 |
ANTHROPIC_API_KEY | (비어 있음) | AI 평가용 Claude API 키 |
패턴만으로 분류할 수 없는 모호한 diff의 경우, 스캐너는 diff를 Claude API(claude-sonnet-4-6)로 보내고 DANGER, SUSPICIOUS, REVIEW 또는 OK 판정을 한 문장 설명과 함께 반환합니다. AI는 회색 지대에서만 사용됩니다 — 명확한 경우는 API 호출 없이 즉시 분류됩니다.
스크립트에서 키를 설정하거나 실행 전에 내보내세요:
export ANTHROPIC_API_KEY='sk-ant-api03-...'
sudo -E bash wp2shell-report-per-user.sh
API 키: https://console.anthropic.com — claude.ai 구독과는 별개입니다.
스캔 출력을 Claude.ai의 wp2shell Report Analyzer 아티팩트에 붙여넣으세요 — 자체 키 없이 브라우저에서 동일한 AI 평가를 수행합니다.
| 라벨 | 색상 | 의미 |
|---|---|---|
[CRITICAL] | 🔴 굵은 빨간색 | 활성 침해 지표 — 즉시 조치 |
[HIGH] | 🔴 빨간색 | 강력한 지표 — 긴급 검토 |
[MEDIUM] | 🟡 노란색 | 의심스러움 — 조사 필요 |
[LOW] | 🔵 파란색 | 낮은 우선순위 — 오탐 가능성 높음 |
[INFO] | ⚫ 회색 | 정보 제공용 |
[OK] | 🟢 녹색 | 깨끗함 / 정상 |
┌─ MODIFIED: wp-includes/load.php
│ [CRITICAL] Assessment (patterns): executable/obfuscated pattern in added lines
│ +20 Core file modified with dangerous pattern
│
│ ORIGINAL: /root/wp2shell-cores/7.0.2-el/wp-includes/load.php
│ SITE: /home/user/web/example.gr/public_html/wp-includes/load.php
│ @@ -212,5 +212,6 @@
│ - $loaded = true;
│ + $loaded = true;
│ + eval(base64_decode('aGVsbG8='));
└──────────────────────────────────────
CORE_CACHE 디렉터리(/root/wp2shell-cores/)는 스캔 간에 재사용됩니다. 새로 다운로드하려면 삭제하세요.known_shells.sha256 해시 데이터베이스는 하루에 한 번 자동으로 새로 고쳐집니다.GPL-3.0 — LICENSE 참조
wp2shell 공개(2026년 7월)에 대응하여 **BytesPulse**가 개발했습니다.
CVE 정보: https://wp2shell.com