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
2hace 4 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

cakephp-attachment-crlf

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

CakePHP 5.4.2 (887b641) - Cake Software Foundation

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 MIME de cliente de un UploadedFile en ese campo de tipo sin filtro adicional.

Una aplicación que adjunta una subida 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.

IDsin CVE todavía
ClaseInyección de cabeceras en partes MIME
AlcanceRemoto (aplicación que adjunta una subida 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 subida 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 / sinkTipoProbado 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 MIMEProbado 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 MIMEProbado en laboratorio. Línea testigo presente
Misma inyección vía MIME de subidaUploadedFile::getClientMediaType() copiado en mimetypeIntegridad de las cabeceras de la parte MIMEProbado en laboratorio. Línea testigo presente
CRLF en filename=nombre de adjunto con CR/LFCerradoProbado en laboratorio como cerrado. La eliminación de 5.4.2 se mantiene
RCPT de sobre / Bcc vía este sinkcabeceras de partes MIME en el cuerpoCerradoEso es la eliminación solo de pares de SmtpTransport, un caso hermano
Envío SMTPel laboratorio solo llama a getBodyString()CerradoSin transporte, sin shell

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

Restos del mismo pin: window SQLi, collate SQLi, cache unserialize.

Cómo lo encontré

Fijé cakephp/cakephp 5.4.2 tras la nota de la bakery 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 la subida sin eliminación. attachFiles / attachInlineFiles luego llaman a $part->type($fileInfo['mimetype']) y $part->contentId($fileInfo['contentId']).

Caminos equivocados ya registrados: tratar el RCPT del sobre como este resto (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

Objetivo solo http://127.0.0.1:19460. PHP 8.3, CakePHP tag 5.4.2 clonado en el build. lab_server.php expone Message::setAttachments. Cuatro casos: control de filename, 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 corrección

Pasar type, contentId y transferEncoding por la misma 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 de cliente de UploadedFile y mimetype / contentId explícitos en las pruebas del mailer, no solo filename=.

Referencias

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

Licencia

GNU Affero GPL v3.0. Ver LICENSE. Solo laboratorio en loopback. Sin garantía.

Descargar herramienta