Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
cakephp-attachment-crlf — CakePHP 5.4.2 - Alta - Remota - CRLF - attachment Content-Type y Content-ID residual | Kitploit
Herramientas/GitHubGitHub/abraxas/cakephp-attachment-crlf
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebVirtualización de SeguridadSeguridad WebPruebas de Penetración
GitHubabraxas/cakephp-attachment-crlf

cakephp-attachment-crlf

CakePHP 5.4.2 - Alta - Remota - CRLF - attachment Content-Type y Content-ID residual

Ver Repositorio
15hace 9 díasAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Abraxas Labs - cakephp-attachment-crlf

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

Análisis: https://abraxaslabs.tech/research/cakephp-attachment-crlf

cakephp-attachment-crlf

Clase: Inyección de cabeceras en partes MIME Alcance: Remoto

CakePHP 5.4.2 (887b641) - Cake Software Foundation

La versión 5.4.2 ya elimina ", \r y \n de name= / filename= en multipart (FormDataPart::_headerParameterToString). Ese es el control. Content-Type y Content-ID quedaron como concatenación directa. Message::setAttachments copia el tipo de medio de cliente de un UploadedFile en ese campo de tipo sin ningún filtro adicional.

Una aplicación que adjunta una carga de usuario, o que pasa un contentId de usuario, coloca esos bytes en la parte MIME. getBodyString() muestra entonces una segunda línea de cabecera bajo esa parte.

IDaún sin CVE
ClaseInyección de cabeceras en partes MIME
AlcanceRemoto (aplicación que adjunta una carga de usuario o un contentId de usuario)
CWECWE-93
CVSSMedio: 5.4 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N
ProductoCakePHP
Afectado5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
Autenticaciónaplicación que adjunta una carga de usuario (MIME de cliente de UploadedFile) o un contentId de usuario
LicenciaGNU Affero GPL v3.0
Laboratoriosolo 127.0.0.1

Qué puede hacer un atacante

Alguien que pueda influir en los metadatos de adjuntos que la aplicación pasa a Message::setAttachments / addAttachment puede inyectar cabeceras en partes MIME.

PrivilegioMétodo / sinkTipoDemostrado en laboratorio o inferido
Línea de cabecera Content-Type adicionalsetAttachments con 'mimetype' => "text/plain\\r\\nX-Injected: …"Integridad de las cabeceras de la parte MIMEDemostrado en laboratorio. Línea testigo presente
Línea de cabecera Content-ID adicional'contentId' => "cid@…>\\r\\nX-Injected: …" (parte inline)Integridad de las cabeceras de la parte MIMEDemostrado en laboratorio. Línea testigo presente
Misma inyección mediante el MIME de la cargaUploadedFile::getClientMediaType() copiado en mimetypeIntegridad de las cabeceras de la parte MIMEDemostrado en laboratorio. Línea testigo presente
CRLF en filename=nombre del adjunto con CR/LFCerradoDemostrado cerrado en laboratorio. La eliminación de 5.4.2 se mantiene
RCPT de sobre / Bcc mediante este sinkcabeceras de partes MIME en el cuerpoCerradoEs la eliminación de solo pares de SmtpTransport, un caso hermano
Envío SMTPel laboratorio solo llama a getBodyString()CerradoSin transporte, sin shell

Inferido a partir de la misma concatenación, no demostrado: un tipo o contentId manipulado que incluya un límite multipart podría dividir el mensaje en partes adicionales en un MUA receptor. No envié correo.

Restos de la misma versión fijada: SQLi de window, SQLi de collate, unserialize de caché.

Cómo lo encontré

Fijé cakephp/cakephp 5.4.2 tras la nota de la panadería de que la inyección en filename= de Content-Disposition multipart había sido corregida. _headerParameterToString es el saneador:

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

__toString() todavía hace:

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

Message::setAttachments copia el tipo de cliente de carga sin eliminarlo. attachFiles / attachInlineFiles luego llaman a $part->type($fileInfo['mimetype']) y $part->contentId($fileInfo['contentId']).

Errores ya registrados: tratar el RCPT del sobre como este residuo (la línea extra está en el cuerpo); afirmar que filename= todavía inyecta (no lo hace); enviar SMTP; una reverse shell. Teatro.

Laboratorio

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

o

cd lab
./run.sh

Apunta solo a http://127.0.0.1:19460. PHP 8.3, CakePHP tag 5.4.2 clonado en la compilación. lab_server.php expone Message::setAttachments. Cuatro casos: control del nombre de archivo, mimetype, contentId, tipo de medio de 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

La solución

Pasar type, contentId y transferEncoding por el mismo proceso de eliminación de " / \r / \n que _headerParameterToString. Rechazar el valor si todavía contiene un salto de línea tras la eliminación. Cubrir el MIME del cliente UploadedFile y el mimetype / contentId explícitos en las pruebas del mailer, no solo filename=.

Referencias

  • github.com/cakephp/cakephp etiqueta 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
  • FormDataPart.php · Message.php
  • Parcheado cercano: eliminación de filename= en bakery 5.4.2
  • Mismo pin: cakephp-window-sqli · cakephp-collate-sqli · cakephp-cache-unserialize
  • CWE-93

Licencia

GNU Affero GPL v3.0. Véase LICENSE. Solo para laboratorio de loopback. Sin garantía.

Descargar herramienta