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

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

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

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

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

Категории

Все категории
Loading categories
cakephp-attachment-crlf — CakePHP 5.4.2 — высокий — удалённый — CRLF — вложение Content-Type и остаток Content-ID | Kitploit
Инструменты/GitHubGitHub/abraxas/cakephp-attachment-crlf
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийВиртуализация для безопасностиВеб-безопасностьТестирование на Проникновение
GitHubabraxas/cakephp-attachment-crlf

cakephp-attachment-crlf

CakePHP 5.4.2 — высокий — удалённый — CRLF — вложение Content-Type и остаток Content-ID

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

Популярное

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

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

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

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

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

Abraxas Labs - cakephp-attachment-crlf

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  cakephp-attachment-crlf

cakephp-attachment-crlf

Класс: инъекция заголовков MIME-части Доступ: удалённый

CakePHP 5.4.2 (887b641) — Cake Software Foundation

5.4.2 уже удаляет ", \r и \n из multipart name= / filename= (FormDataPart::_headerParameterToString). Это контроль. Content-Type и Content-ID остались как сырая конкатенация. Message::setAttachments копирует клиентский media type из UploadedFile в это поле типа без дополнительной фильтрации.

Приложение, которое прикрепляет пользовательскую загрузку или передаёт пользовательский contentId, помещает эти байты в MIME-часть. getBodyString() затем показывает вторую строку заголовка под этой частью.

IDCVE пока нет
Классинъекция заголовков MIME-части
Доступудалённый (приложение, которое прикрепляет пользовательскую загрузку или пользовательский contentId)
CWECWE-93
CVSSСредний: 5.4 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N
ПродуктCakePHP
Затронуто5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
Аутентификацияприложение, которое прикрепляет пользовательскую загрузку (клиентский MIME из UploadedFile) или пользовательский contentId
ЛицензияGNU Affero GPL v3.0
Лабораториятолько 127.0.0.1

Что может сделать атакующий

Тот, кто может влиять на метаданные вложения, которые приложение передаёт в Message::setAttachments / addAttachment, может внедрять заголовки MIME-части.

ПривилегияМетод / sinkТипДоказано в лаборатории или выведено
Дополнительная строка заголовка Content-TypesetAttachments с 'mimetype' => "text/plain\\r\\nX-Injected: …"Целостность заголовков MIME-частиДоказано в лаборатории. Строка-свидетель присутствует
Дополнительная строка заголовка Content-ID'contentId' => "cid@…>\\r\\nX-Injected: …" (inline-часть)Целостность заголовков MIME-частиДоказано в лаборатории. Строка-свидетель присутствует
Та же инъекция через MIME загрузкиUploadedFile::getClientMediaType() копируется в mimetypeЦелостность заголовков MIME-частиДоказано в лаборатории. Строка-свидетель присутствует
CRLF в filename=имя вложения с CR/LFЗакрытоДоказано в лаборатории, что закрыто. Удаление в 5.4.2 работает
RCPT конверта / Bcc через этот sinkзаголовки MIME-части в телеЗакрытоЭто удаление только для пары в SmtpTransport, родственная проблема
Отправка SMTPлаборатория вызывает только getBodyString()ЗакрытоНет транспорта, нет shell

Выведено из той же конкатенации, но не продемонстрировано: специально сформированный type или contentId, включающий multipart boundary, мог бы разбить сообщение на дополнительные части в принимающем MUA. Я не отправлял почту.

Остатки того же пина: window SQLi, collate SQLi, cache unserialize.

Как я это нашёл

Я зафиксировал cakephp/cakephp 5.4.2 после заметки bakery о том, что инъекция в multipart Content-Disposition filename= исправлена. _headerParameterToString — это санитайзер:

$transliterated = Text::transliterate(str_replace(['"', "\r", "\n"], '', $value));

__toString() по-прежнему делает:

if ($this->type) {
    $out .= 'Content-Type: ' . $this->type . "\r\n";
}
if ($this->contentId) {
    $out .= 'Content-ID: <' . $this->contentId . ">\r\n";
}

Message::setAttachments копирует клиентский тип загрузки без удаления. attachFiles / attachInlineFiles затем вызывают $part->type($fileInfo['mimetype']) и $part->contentId($fileInfo['contentId']).

Уже зафиксированные ошибочные пути: трактовка конверта RCPT как этого остатка (дополнительная строка находится в теле); утверждение, что filename= всё ещё инжектируется (это не так); отправка SMTP; reverse shell. Театр.

Лаборатория

python3 cakephp-attachment-crlf-Abraxas-Labs.py

или

cd lab
./run.sh

Цель только http://127.0.0.1:19460. PHP 8.3, тег CakePHP 5.4.2 клонируется при сборке. lab_server.php предоставляет Message::setAttachments. Четыре случая: контроль filename, mimetype, contentId, media type из UploadedFile.

SUCCESS cakephp-attachment-crlf how=live pin=5.4.2 sha=887b641de9f7aba06071f98f17edcbc573cbcf63 mimetype=yes contentId=yes upload=yes filename-stripped=yes CAKEPHP-ATTACHMENT-CRLF-WITNESS

Исправление

Пропустите type, contentId и transferEncoding через то же удаление " / \r / \n, что и _headerParameterToString. Отклоняйте значение, если после удаления оно всё ещё содержит перевод строки. Покройте клиентский MIME из UploadedFile и явные mimetype / contentId в тестах mailer, а не только filename=.

Ссылки

  • github.com/cakephp/cakephp тег 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
  • FormDataPart.php · Message.php
  • Рядом исправлено: удаление filename= в bakery 5.4.2
  • Тот же пин: cakephp-window-sqli · cakephp-collate-sqli · cakephp-cache-unserialize
  • CWE-93

Лицензия

GNU Affero GPL v3.0. См. LICENSE. Только loopback-лаборатория. Без гарантий.

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