CRLF (%0D%0A) Injection
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Bug bounty tip: regístrate en Intigriti, una plataforma de recompensas por errores premium creada por hackers, para hackers! Únete a nosotros en https://go.intigriti.com/hacktricks hoy, y comienza a ganar recompensas de hasta $100,000!
Carriage Return (CR) y Line Feed (LF), conocidos colectivamente como CRLF, son secuencias de caracteres especiales utilizadas en el protocolo HTTP para denotar el final de una línea o el inicio de una nueva. Los servidores web y los navegadores utilizan CRLF para distinguir entre los encabezados HTTP y el cuerpo de una respuesta. Estos caracteres se emplean universalmente en las comunicaciones HTTP/1.1 a través de varios tipos de servidores web, como Apache y Microsoft IIS.
La inyección CRLF implica la inserción de caracteres CR y LF en la entrada proporcionada por el usuario. Esta acción engaña al servidor, la aplicación o el usuario para interpretar la secuencia inyectada como el final de una respuesta y el comienzo de otra. Aunque estos caracteres no son inherentemente dañinos, su uso indebido puede llevar a la división de respuestas HTTP y otras actividades maliciosas.
Considera un archivo de registro en un panel de administración que sigue el formato: IP - Hora - Ruta Visitada
. Una entrada típica podría verse así:
Un atacante puede explotar una inyección CRLF para manipular este registro. Al inyectar caracteres CRLF en la solicitud HTTP, el atacante puede alterar el flujo de salida y fabricar entradas de registro. Por ejemplo, una secuencia inyectada podría transformar la entrada del registro en:
Aquí, %0d
y %0a
representan las formas codificadas en URL de CR y LF. Después del ataque, el registro mostraría de manera engañosa:
El atacante así oculta sus actividades maliciosas haciendo que parezca que el localhost (una entidad típicamente confiable dentro del entorno del servidor) realizó las acciones. El servidor interpreta la parte de la consulta que comienza con %0d%0a
como un solo parámetro, mientras que el parámetro restrictedaction
se analiza como otra entrada separada. La consulta manipulada imita efectivamente un comando administrativo legítimo: /index.php?page=home&restrictedaction=edit
HTTP Response Splitting es una vulnerabilidad de seguridad que surge cuando un atacante explota la estructura de las respuestas HTTP. Esta estructura separa los encabezados del cuerpo utilizando una secuencia de caracteres específica, Carriage Return (CR) seguido de Line Feed (LF), denominados colectivamente como CRLF. Si un atacante logra insertar una secuencia CRLF en un encabezado de respuesta, puede manipular efectivamente el contenido de la respuesta subsiguiente. Este tipo de manipulación puede llevar a graves problemas de seguridad, notablemente Cross-site Scripting (XSS).
La aplicación establece un encabezado personalizado como este: X-Custom-Header: UserInput
La aplicación obtiene el valor de UserInput
de un parámetro de consulta, digamos "user_input". En escenarios que carecen de una validación y codificación de entrada adecuadas, un atacante puede crear una carga útil que incluya la secuencia CRLF, seguida de contenido malicioso.
Un atacante crea una URL con un 'user_input' especialmente diseñado: ?user_input=Value%0d%0a%0d%0a<script>alert('XSS')</script>
En esta URL, %0d%0a%0d%0a
es la forma codificada en URL de CRLFCRLF. Engaña al servidor para que inserte una secuencia CRLF, haciendo que el servidor trate la parte subsiguiente como el cuerpo de la respuesta.
El servidor refleja la entrada del atacante en el encabezado de respuesta, lo que lleva a una estructura de respuesta no intencionada donde el script malicioso es interpretado por el navegador como parte del cuerpo de la respuesta.
Navegador a:
Y el servidor responde con el encabezado:
Otro ejemplo: (de https://www.acunetix.com/websitesecurity/crlf-injection/)
Puedes enviar la carga útil dentro de la ruta de URL para controlar la respuesta del servidor (ejemplo de aquí):
Check more examples in:
La inyección de encabezados HTTP, a menudo explotada a través de la inyección CRLF (Carriage Return and Line Feed), permite a los atacantes insertar encabezados HTTP. Esto puede socavar mecanismos de seguridad como los filtros XSS (Cross-Site Scripting) o la SOP (Same-Origin Policy), lo que podría llevar al acceso no autorizado a datos sensibles, como tokens CSRF, o a la manipulación de sesiones de usuario a través de la inserción de cookies.
Un atacante puede inyectar encabezados HTTP para habilitar CORS (Cross-Origin Resource Sharing), eludiendo las restricciones impuestas por la SOP. Esta brecha permite que scripts de orígenes maliciosos interactúen con recursos de un origen diferente, accediendo potencialmente a datos protegidos.
La inyección CRLF puede ser utilizada para crear e inyectar una nueva solicitud HTTP completamente. Un ejemplo notable de esto es la vulnerabilidad en la clase SoapClient
de PHP, específicamente dentro del parámetro user_agent
. Al manipular este parámetro, un atacante puede insertar encabezados adicionales y contenido del cuerpo, o incluso inyectar una nueva solicitud HTTP por completo. A continuación se muestra un ejemplo en PHP que demuestra esta explotación:
Para más información sobre esta técnica y problemas potenciales consulta la fuente original.
Puedes inyectar encabezados esenciales para asegurar que el back-end mantenga la conexión abierta después de responder a la solicitud inicial:
Después, se puede especificar una segunda solicitud. Este escenario típicamente involucra HTTP request smuggling, una técnica donde los encabezados adicionales o los elementos del cuerpo añadidos por el servidor después de la inyección pueden llevar a varios exploits de seguridad.
Explotación:
Inyección de Prefijo Malicioso: Este método implica envenenar la solicitud del siguiente usuario o una caché web especificando un prefijo malicioso. Un ejemplo de esto es:
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/redirplz%20HTTP/1.1%0d%0aHost:%20oastify.com%0d%0a%0d%0aContent-Length:%2050%0d%0a%0d%0a HTTP/1.1
Creación de un Prefijo para el Envenenamiento de la Cola de Respuestas: Este enfoque implica crear un prefijo que, cuando se combina con basura al final, forma una segunda solicitud completa. Esto puede desencadenar el envenenamiento de la cola de respuestas. Un ejemplo es:
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/%20HTTP/1.1%0d%0aFoo:%20bar HTTP/1.1
Memcache es un almacenamiento de clave-valor que utiliza un protocolo de texto claro. Más información en:
11211 - Pentesting MemcachePara la información completa, lea el informe original
Si una plataforma está tomando datos de una solicitud HTTP y usándolos sin sanitizarlos para realizar solicitudes a un servidor memcache, un atacante podría abusar de este comportamiento para inyectar nuevos comandos de memcache.
Por ejemplo, en la vulnerabilidad descubierta originalmente, se usaron claves de caché para devolver la IP y el puerto a los que un usuario debería conectarse, y los atacantes pudieron inyectar comandos de memcache que envenenarían la caché para enviar los detalles de las víctimas (nombres de usuario y contraseñas incluidos) a los servidores del atacante:
Además, los investigadores también descubrieron que podían desincronizar las respuestas de memcache para enviar la IP y los puertos de los atacantes a usuarios cuyo correo electrónico el atacante no conocía:
Para mitigar los riesgos de inyecciones CRLF (Carriage Return y Line Feed) o HTTP Header en aplicaciones web, se recomiendan las siguientes estrategias:
Evitar la Entrada Directa del Usuario en los Encabezados de Respuesta: El enfoque más seguro es abstenerse de incorporar la entrada proporcionada por el usuario directamente en los encabezados de respuesta.
Codificar Caracteres Especiales: Si evitar la entrada directa del usuario no es factible, asegúrese de emplear una función dedicada a codificar caracteres especiales como CR (Carriage Return) y LF (Line Feed). Esta práctica previene la posibilidad de inyección CRLF.
Actualizar el Lenguaje de Programación: Actualice regularmente el lenguaje de programación utilizado en sus aplicaciones web a la última versión. Opte por una versión que inherentemente no permita la inyección de caracteres CR y LF dentro de las funciones encargadas de establecer encabezados HTTP.
Consejo de recompensas por errores: regístrate en Intigriti, una plataforma de recompensas por errores premium creada por hackers, para hackers! Únete a nosotros en https://go.intigriti.com/hacktricks hoy, y comienza a ganar recompensas de hasta $100,000!
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)