Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2025-14855-POC — SureForms <= 2.2.0 - 認証されていない保存型クロスサイトスクリプティング | Kitploit
ツール/GitHubGitHub/ch4r0nn/cve-2025-14855-poc
脆弱性分析エクスプロイトウェブアプリケーション悪用ウェブセキュリティペネトレーションテストペイロード開発
GitHubch4r0nn/cve-2025-14855-poc

CVE-2025-14855-POC

SureForms <= 2.2.0 - 認証されていない保存型クロスサイトスクリプティング

リポジトリを見る
2127ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2025-14855: SureForms WordPress プラグイン 保存型XSS 概念実証

  • 対象: WordPressプラグイン「SureForms」
  • プラグイン WordPress: https://wordpress.org/plugins/sureforms/
  • 脆弱性タイプ: 保存型クロスサイトスクリプティング (XSS)
  • CVE: CVE-2025-14855
  • 参照: https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/sureforms/sureforms-220-unauthenticated-stored-cross-site-scripting
  • 認証: 未認証(ゲスト/公開)
  • 影響: 管理者セッションハイジャックによるリモートコード実行 (RCE)
  • 発見者: https://nguyentiendung1006.wixsite.com/tiendung

1. 概要

SureForms プラグインには、重大な保存型XSS脆弱性が存在します。この脆弱性は、entries.js における安全でないクライアントサイド実装に起因します。ここでは、ユーザー入力をプログラム的にデコード(サーバーサイドのサニタイズを逆変換)し、その後、適切なクライアントサイドのサニタイズなしに dangerouslySetInnerHTML を使用してレンダリングします。これにより、未認証の攻撃者が標準のフォームフィールドを介して悪意のある JavaScript ペイロードを注入し、WordPress のデフォルトの wp_kses フィルターをバイパスできます。

2. バージョンの特定

対象サイトが SureForms を実行しているか確認するには、通常バージョン番号を含む翻訳ファイルのヘッダーを調べます。

対象URL: http://target-site.com/wp-content/plugins/sureforms/languages/sureforms.pot

確認コマンド:

root@kitploit:~
curl -s "http://target-site.com/wp-content/plugins/sureforms/languages/sureforms.pot" | grep "Project-Id-Version"

3. リバースエンジニアリングと根本原因分析

脆弱性は、フォームエントリーを閲覧するための React ベースの管理インターフェース(entries.js)に存在します。

3.1. 「自動デコーダー」ロジック(バイパス)

minify された entries.js ファイルには、HTML エンティティを処理するために設計されたヘルパー関数(解析したビルドでは Xv と識別)があります。

コードロジック(再構成):

root@kitploit:~
// Function Xv: Pre-processing field values
var Xv = function(input) {
    var value = input.value;
    
    // VULNERABILITY ROOT CAUSE:
    // If the string contains HTML entities (e.g., &lt;), create a textarea,
    // inject the content, and extract the value. 
    // This effectively DECODES HTML entities back to raw HTML tags.
    // Example: "&lt;img ...&gt;" becomes ""
    
    if (typeof value === "string" && value.match(/&[a-zA-Z0-9#]+;/)) {
        var textarea = document.createElement("textarea");
        textarea.innerHTML = value;
        
        // Logic to revert sanitization
        if (textarea.value.includes("&lt;") || textarea.value.includes("&gt;")) {
             value = textarea.value; // Now 'value' contains RAW HTML
        }
    }
    return { ...input, value: value };
}

分析: この関数はバックエンドのセキュリティを無効化します。WordPress がデータベースに <script> を &lt;script&gt; として正しく保存しても、この関数は API から取得した直後に <script> に変換し戻します。

3.2. 危険なシンク

デコード後、データはレンダリングコンポーネント(Jv と識別)に渡されます。

コードロジック(再構成):

root@kitploit:~
// Function Jv: Rendering the field
var Jv = function(props) {
    var field = props.field;
    var val = field.value; // This value is now raw HTML (post-decoding)

    // THE TRIGGER: Check if the string looks like HTML
    if (typeof val === "string" && val.match(/<[^>]+>/g)) {
        // THE SINK: Render using dangerouslySetInnerHTML WITHOUT client-side sanitization (e.g., DOMPurify)
        return React.createElement("span", {
            dangerouslySetInnerHTML: { __html: val }
        });
    }
    
    // Safe render for non-HTML text
    return React.createElement("span", null, val);
}

4. 攻撃の流れ

  1. インジェクション: 未認証の攻撃者がフロントエンドでフォームを送信します。WordPress バックエンドによって除去/サニタイズされる生の HTML タグを使用する代わりに、攻撃者はHTMLエンティティを送信します。

  2. 保存: WordPress は入力(例: &lt;img...)を安全なテキストとして認識し、データベースに保存します。

  3. 実行(トラップ):

    • 管理者がSureForms > Entries に移動します。
    • ブラウザはJSON API経由でエントリーの詳細を取得します。
    • Xv 関数がエンティティを検出し、&lt;img... を ` Entries に移動します。
  4. ステップ1で送信したエントリーをクリックして詳細を表示します。

  5. 結果: ブラウザが JavaScript ペイロード (alert('XSS_SUREFORMS')) を実行します。

ツールをダウンロード