La inyección de correo electrónico es una técnica de ataque utilizada para explotar los servidores de correo y las aplicaciones de correo que construyen expresiones IMAP/SMTP a partir de la entrada del usuario que no está debidamente validada. Según el tipo de operadores que utilice el atacante, existen dos tipos de inyecciones: la inyección IMAP y la inyección SMTP .
Las inyecciones de IMAP/SMTP permiten el acceso a un servidor de correo al que antes no se podía acceder. En algunos casos, estos sistemas internos no cuentan con el mismo nivel de seguridad que el resto de la infraestructura. De esta forma, los atacantes pueden encontrar que el servidor de correo ofrece los mejores resultados en términos de explotación. Este método evita posibles restricciones que puedan existir a nivel de aplicación ( CAPTCHA , número máximo de aciertos, etc.).
La estructura típica de una inyección IMAP/SMTP es la siguiente:
Encabezado: fin del comando esperado Cuerpo: inyección de nuevos comandos Pie de página: inicio del comando esperadoEs importante tener en cuenta que para que se ejecuten los comandos IMAP/SMTP, los comandos anteriores deben haber terminado con la secuencia CRLF (%0d%0a).
Algunos ejemplos de ataques que utilizan la técnica de inyección IMAP/SMTP son:
Inyección IMAP Debido a que la inyección se realiza en un servidor IMAP, se debe respetar el formato y las especificaciones de este protocolo. Las aplicaciones de correo suelen interactuar con el servidor IMAP para poder realizar sus funciones en la mayoría de los casos y por tanto son más vulnerables a este tipo de ataques.
Veamos un ejemplo de una inyección IMAP utilizando la funcionalidad de lectura de mensajes. Supongamos que una aplicación utiliza el parámetro de correo web "message_id" para almacenar la identificación de los mensajes que el usuario desea leer. Cuando se envía una solicitud que contiene un ID de mensaje, se verá así:
http://<webmail>/read_email.php? mensaje_id = <número>Supongamos que el script php "read_email.php", responsable de mostrar el mensaje asociado con él, envía una solicitud al servidor IMAP sin realizar ninguna verificación en el valor <number> especificado por el usuario. El comando enviado al servidor de correo se verá así:
FETCH <number> BODY[HEADER]
Debido a esto, un atacante podría intentar un ataque de inyección de IMAP a través del parámetro "message_id" que utiliza la aplicación para comunicarse con el servidor. Por ejemplo, el comando IMAP "CAPACIDAD" se puede ingresar usando la siguiente secuencia:
http://<webmail>/read_email.php?message_id=1 CUERPO[ENCABEZADO]%0d%0aV001 CAPACIDAD%0d%0aV002 OBTENER 1Esto emitirá la siguiente secuencia de comandos IMAP en el servidor:
???? OBTENER 1 CUERPO [ENCABEZADO] V001 CAPACIDAD V002 BUSCAR 1 CUERPO [ENCABEZADO]dónde:
Encabezado = 1 CUERPO[ENCABEZADO] Cuerpo = %0d%0aV100 CAPACIDAD%0d%0a Pie de página = V101 FETCH 1Inyección SMTP Debido a que la inyección de comandos se realiza bajo un servidor SMTP, se debe respetar el formato y las especificaciones de este protocolo. Debido a la limitación de las operaciones de las aplicaciones que utilizan el protocolo SMTP, nos limitamos principalmente al envío de correo electrónico. El uso de inyección SMTP requiere que el usuario esté autenticado previamente, por lo que es necesario que el atacante disponga de un webmail válido.
Supongamos que una aplicación de correo electrónico limita la cantidad de correos electrónicos enviados en un período de tiempo seleccionado. La inyección SMTP le permitirá sortear esta limitación simplemente agregando comandos RCPT como instrucciones, en la cantidad que el atacante desee:
POST http://<webmail>/compose.php HTTP/1.1 -----------------------------134475172700422922879687252 Contenido-Disposición: formulario-datos; nombre="sujeto" prueba . CORREO DE: externo@dominio1.com RCPT A: externo@dominio1.com RCPT A: externo@dominio2.com RCPT A: externo@dominio3.com RCPT A: external@domain4.com Datos Este es un ejemplo de ataque de inyección SMTP . -----------------------------134475172700422922879687252 ...Esto generará la siguiente secuencia de comandos SMTP que se enviarán al servidor de correo:
CORREO DESDE: <correodesde> RCPT A: <rcptto> DATOS Asunto: prueba . CORREO DE: externo@dominio.com RCPT A: externo@dominio1.com RCPT A: externo@dominio2.com RCPT A: externo@dominio3.com RCPT A: external@domain4.com DATOS Este es un ejemplo de ataque de inyección SMTP . ...