HestiaCPサーバー向けの読み取り専用WordPressセキュリティスキャナです。ホストされているすべてのサイトでwp2shell侵害の痕跡(CVE-2026-63030 / CVE-2026-60137)を検出し、ユーザーごとのメールレポート、クリーンなWordPressとのコアファイル差分、PHP/JS/htaccess/画像分析、Claude APIによるオプションのAI評価を提供します。
<div align="center">
# 🛡️ wp2shell-Hestia-Scanner
<p>
<a href="#english">🇬🇧 英語</a>
|
<a href="#greek">🇬🇷 ギリシャ語</a>
</p>




**HestiaCP サーバー向けの読み取り専用 WordPress セキュリティスキャナー。**
ホストされているすべてのサイトで wp2shell の侵害インジケーターを検出します — クライアント別メールレポート、コアファイル差分、SHA256 ウェブシェル検出、リスクスコアリング、オプションの AI 評価に対応。
> ⚠️ **安全なバージョン:** WordPress **6.8.6 / 6.9.5 / 7.0.2** 以降。
> これらのスクリプトは**何も変更しません** — 全体を通して読み取り専用です。
</div>
---
<a name="english"></a>
# 🇬🇧 英語
## wp2shell とは?
wp2shell は、**2026年7月17日**に公開された WordPress コアの認証前リモートコード実行 (RCE) チェーンです。デフォルトインストールに対する単一の匿名 HTTP リクエストだけで、不正な管理者を作成し、サーバー上で任意のコードを実行できます。
このチェーンは以下を組み合わせます:
- **CVE-2026-60137** — `WP_Query` の `author__not_in` パラメータにおける SQL インジェクション
- **CVE-2026-63030** — REST API `/wp-json/batch/v1` エンドポイントにおけるルート混乱
侵害されたサイトには、ログインプレフィックス `wp2_` とメールアドレス `@wp2shell.invalid` を持つ不正な管理者が存在します。
詳細情報: <https://wp2shell.com>
---
## リポジトリの内容
| ファイル | 目的 |
|------|---------|
| `wp2shell-scan.sh` | 高速なサーバー全体 IoC スキャナー — 色分けされたターミナル出力、サイトごとのリスクスコア、`/root/` への自動保存レポート |
| `wp2shell-report-per-user.sh` | フルスキャナー — HestiaCP ユーザーごとのメールレポート、コアファイル差分、SHA256 ウェブシェル検出、AI 評価、リスクスコアリング |
| `known_shells.sha256` | 既知のウェブシェルハッシュデータベース (SHA256) — 実行時に自動取得 |
---
## スキャナーのチェック内容
### データベース / ユーザーチェック
| チェック | 重大度 |
|-------|----------|
| WordPress バージョン vs. 安全なバージョン | HIGH / OK |
| `wp2_` プレフィックスまたは `@wp2shell.invalid` メールアドレスを持つアカウント | CRITICAL |
| 公開日 (2026年7月15日) 以降に作成された管理者 | MEDIUM |
| ユーザー ID シーケンスの欠番 (削除された不正な管理者の痕跡) | MEDIUM |
| 孤立した `wp_usermeta` 行 | MEDIUM |
| 汚染された `oembed_cache` / `customize_changeset` 行 | CRITICAL |
| 改ざんされた WP オプション (`upload_path`、`auto_prepend_file`、`siteurl`) | CRITICAL / HIGH |
### コアファイルの整合性
| チェック | 重大度 |
|-------|----------|
| `wp core verify-checksums` vs. wp.org | 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** |
---
## 要件
- **HestiaCP** を実行している Linux サーバー
- **bash** 4.0+
- **[WP-CLI](https://wp-cli.org/)** がグローバルに `wp` としてインストールされていること
- `root` アクセス
- `sendmail` (メールレポート用)
- `python3` (AI 評価の JSON 処理用)
- `curl`、`sha256sum`、`file`、`strings`、`unzip`
### WP-CLI のインストール (未インストールの場合)
```bash
curl -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
```
---
## ワンライナーでのインストール & 実行
### 高速 IoC スキャン
```bash
curl -fsSL https://raw.githubusercontent.com/BytesPulse-OE/wp2shell-Hestia-Scanner/main/wp2shell-scan.sh | sudo bash
```
### クライアント別メールレポート付きフルスキャン
```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 評価、レポート保存、日付しきい値)。最初にダウンロードしてから実行すると、プロンプトが正しく動作します。
---
## 使用方法
### wp2shell-scan.sh — 高速なサーバー全体スキャン
```bash
sudo bash wp2shell-scan.sh
```
`/home/*/web/*/public_html/` 配下のすべての WordPress インストールを検出し、すべてのチェックを実行して、色分けされた出力をターミナルに表示し、完全なレポートを `/root/wp2shell-report-YYYYMMDD-HHMMSS.txt` に保存します。
起動時に、オプションのカスタム日付しきい値 (デフォルト: `2026-07-15`) を尋ねます。
### wp2shell-report-per-user.sh — メールレポート付きフルスキャン
```bash
sudo bash wp2shell-report-per-user.sh
```
起動時に 3 つの質問が表示されます:
```
[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` に変更してください。
---
## 設定
### wp2shell-scan.sh
| 変数 | デフォルト | 説明 |
|----------|---------|-------------|
| `WEB_ROOT` | `/home` | HestiaCP の Web ルート |
| `SINCE_DATE` | `2026-07-15` | 「最近変更された」と判定するしきい値 |
| `WP` | `wp` | WP-CLI へのパス |
### wp2shell-report-per-user.sh
| 変数 | デフォルト | 説明 |
|----------|---------|-------------|
| `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 キー |
---
## AI 評価 (オプション)
パターンだけでは分類できない曖昧な差分について、スキャナーは差分を **Claude API** (`claude-sonnet-4-6`) に送信し、`DANGER`、`SUSPICIOUS`、`REVIEW`、または `OK` の判定を一文の説明付きで返します。AI は**グレーゾーンの場合のみ**使用されます — 明確なケースは API 呼び出しなしで即座に分類されます。
スクリプト内にキーを設定するか、実行前にエクスポートしてください:
```bash
export ANTHROPIC_API_KEY='sk-ant-api03-...'
sudo -E bash wp2shell-report-per-user.sh
```
API キー: <https://console.anthropic.com> — claude.ai のサブスクリプションとは別です。
### API キーがない場合?ブラウザアナライザーを使用
スキャン出力を 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='));
└──────────────────────────────────────
```
---
## 注意事項
- スキャナーは**何も変更しません**。本番稼働中のサーバーで実行しても安全です。
- WordPress をパッチ適用済みバージョンに更新すると脆弱性は解消されますが、**すでに侵害されたサイトはクリーンアップされません**。インジケーターが見つかった場合は、クリーンなバックアップから復元してください。
- `CORE_CACHE` ディレクトリ (`/root/wp2shell-cores/`) はスキャン間で再利用されます。削除すると、新しいダウンロードが強制されます。
- `known_shells.sha256` ハッシュデータベースは 1 日 1 回自動的に更新されます。
---
## ライセンス
GPL-3.0 — [LICENSE](https://github.com/bytespulse-oe/wp2shell-hestia-scanner/blob/main/LICENSE) を参照
---
## クレジット
wp2shell の公開 (2026年7月) を受けて **[BytesPulse](https://bytespulse.gr)** によって開発されました。
CVE 情報: <https://wp2shell.com>
---
---
<a name="greek"></a>
# 🇬🇷 ギリシャ語
## wp2shell とは?
wp2shell は、**2026年7月17日**に公開された WordPress コアのリモートコード実行 (RCE) チェーンです。デフォルトインストールに対する単一の匿名 HTTP リクエストだけで、管理者を作成し、サーバー上で任意のコードを実行できます。
このチェーンは以下を組み合わせます:
- **CVE-2026-60137** — `WP_Query` の `author__not_in` パラメータにおける SQL インジェクション
- **CVE-2026-63030** — REST API `/wp-json/batch/v1` におけるルート混乱
侵害されたサイトには、プレフィックス `wp2_` とメールアドレス `@wp2shell.invalid` を持つ管理者アカウントが存在します。
詳細情報: <https://wp2shell.com>
---
## リポジトリの内容
| ファイル | 目的 |
|--------|--------|
| `wp2shell-scan.sh` | 高速なサーバー全体 IoC スキャナー — 色分けされたターミナル出力、サイトごとのリスクスコア、`/root/` へのレポート自動保存 |
| `wp2shell-report-per-user.sh` | フルスキャナー — HestiaCP ユーザーごとのメールレポート、コア差分、SHA256 ウェブシェル検出、AI 評価、リスクスコア |
| `known_shells.sha256` | 既知のウェブシェルの SHA256 データベース — 実行時に自動ダウンロード |
---
## チェック内容
### データベース / ユーザー
| チェック | 重大度 |
|---------|-----------|
| WordPress バージョン vs. 安全なバージョン | HIGH / OK |
| `wp2_` プレフィックスまたは `@wp2shell.invalid` メールアドレスのアカウント | CRITICAL |
| 公開日 (2026年7月15日) 以降に作成された管理者 | MEDIUM |
| ユーザー ID シーケンスの欠番 (削除された不正な管理者の痕跡) | MEDIUM |
| 孤立した `wp_usermeta` 行 | MEDIUM |
| 汚染された `oembed_cache` / `customize_changeset` 行 | CRITICAL |
| 改ざんされた WP オプション (`upload_path`、`auto_prepend_file`、`siteurl`) | CRITICAL / HIGH |
### コアファイルの整合性
| チェック | 重大度 |
|---------|-----------|
| `wp core verify-checksums` vs. wp.org | 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` の危険なディレクティブ | HIGH |
| `SINCE_DATE` 以降に変更された `.htaccess` | MEDIUM |
| PHP ペイロードを含むポリグロット画像 | CRITICAL |
| 露出したバックアップ/設定ファイル | 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** |
---
## 要件
- **HestiaCP** を実行している Linux サーバー
- **bash** 4.0+
- **[WP-CLI](https://wp-cli.org/)** が `wp` としてインストールされていること
- `root` アクセス
- `sendmail` (メール送信用)
- `python3` (AI 評価用)
- `curl`、`sha256sum`、`file`、`strings`、`unzip`
### WP-CLI のインストール (未インストールの場合)
```bash
curl -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
```
---
## ワンライナーでのインストール
### 高速 IoC スキャン
```bash
curl -fsSL https://raw.githubusercontent.com/BytesPulse-OE/wp2shell-Hestia-Scanner/main/wp2shell-scan.sh | sudo bash
```
### メールレポート付きフルスキャン
```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
```
---
## 使用方法
### wp2shell-scan.sh
```bash
sudo bash wp2shell-scan.sh
```
`/home/*/web/*/public_html/` 配下のすべての WordPress インストールを自動的に検出し、すべてのチェックを実行して、色分けされた出力をターミナルに表示し、完全なレポートを `/root/` に保存します。
### wp2shell-report-per-user.sh
```bash
sudo bash wp2shell-report-per-user.sh
```
起動時に 3 つの質問が表示されます:
```
[AI EVALUATION] Χρήση AI αξιολόγησης για αμφίβολα αρχεία; [y/N]
[SAVE REPORT] Αποθήκευση πλήρους report σε αρχείο; [y/N]
[DATE THRESHOLD] Διαφορετική ημερομηνία; Αφήστε κενό για default [YYYY-MM-DD]:
```
**必ず `DRY_RUN=1` (デフォルト) から開始してください** — メールは画面に表示されるだけで、送信されません。出力が正しいことを確認した後にのみ `DRY_RUN=0` に変更してください。
---
## 設定
### wp2shell-scan.sh
| 変数 | デフォルト | 説明 |
|-----------|---------|-----------|
| `WEB_ROOT` | `/home` | HestiaCP のルートフォルダ |
| `SINCE_DATE` | `2026-07-15` | 「最近変更された」と判定するしきい値 |
| `WP` | `wp` | WP-CLI へのパス |
### wp2shell-report-per-user.sh
| 変数 | デフォルト | 説明 |
|-----------|---------|-----------|
| `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 キー |
---
## AI 評価 (オプション)
パターンだけでは分類できない曖昧な差分について、スキャナーは差分を **Claude API** (`claude-sonnet-4-6`) に送信し、`DANGER`、`SUSPICIOUS`、`REVIEW`、または `OK` の判定を一文の説明付きで返します。AI は**グレーゾーンの場合のみ**使用されます。
```bash
export ANTHROPIC_API_KEY='sk-ant-api03-...'
sudo -E bash wp2shell-report-per-user.sh
```
API キー: <https://console.anthropic.com> — claude.ai のサブスクリプションとは別です。
### API キーがない場合?ブラウザアナライザーを使用
スキャン出力を Claude.ai の **wp2shell Report Analyzer** アーティファクトに貼り付けてください — 同じ AI 評価をブラウザ上で直接実行できます。
---
## 注意事項
- スキャナーは**何も変更しません**。本番稼働中のサーバーで実行しても安全です。
- WordPress をパッチ適用済みバージョンに更新すると脆弱性は解消されますが、**すでに侵害されたサイトはクリーンアップされません**。インジケーターが見つかった場合は、クリーンなバックアップから復元してください。
- `CORE_CACHE` フォルダ (`/root/wp2shell-cores/`) はスキャン間で再利用されます。削除すると再ダウンロードが強制されます。
- `known_shells.sha256` データベースは 24 時間に 1 回自動的に更新されます。
---
## ライセンス
GPL-3.0 — [LICENSE](https://github.com/bytespulse-oe/wp2shell-hestia-scanner/blob/main/LICENSE) を参照
---
## クレジット
wp2shell の公開 (2026年7月) を受けて **[BytesPulse](https://bytespulse.gr)** によって開発されました。
CVE 情報: <https://wp2shell.com>