¿Cuándo desinfectar la dirección IP?

1

El sitio web común guarda su dirección IP mientras se está conectando para mostrarla en una sección de seguridad que puede ver el usuario o un administrador.

Pensé que los servidores como Apache, Nginx ... extrajeron la dirección IP del paquete IP ( REMOTE_ADDR ) y la pasaron al programa CGI .

Sin embargo, recientemente leí un artículo que dice haber logrado self-XSS debido a que no hay un saneamiento adecuado de la dirección IP. El tipo utilizó True-Client-IP para inyectar su carga útil, pero también encontré otros encabezados como X-Forwarded-For .

  • Si bien la verdadera solución sería desinfectar automáticamente la dirección IP antes de mostrarla, me gustaría saber cuándo deberíamos hacerlo realmente.
  • ¿Hay alguna configuración en la que los servidores web cambien automáticamente el REMOTE_ADDR al valor de uno de estos encabezados?
  • ¿De qué manera son útiles esos encabezados?
  • Lo único que veo es cuando el cliente pasa por algún proxy por una razón que no es obvia pero aún quiere que el sitio web conozca su dirección IP. ¿Hay alguna otra?
pregunta Xavier59 11.02.2017 - 22:42
fuente

1 respuesta

2

No veo ningún problema enorme al activar self-XSS , ya que inyectar contenido en una conexión TCP existente ya es lo suficientemente difícil (gracias a los números de secuencia iniciales). E incluso si un atacante pudiera inyectar paquetes TCP válidos , probablemente estaría más interesado en obtener la información de su sesión directamente en su IP, sin pasar por XSS.

Las cosas cambian un poco, cuando el self-XSS es persistente. es decir, termina almacenado en el DB y puede volver a ejecutarse en una etapa posterior. En ese caso, es prácticamente un XSS completo , ya que puede, por ejemplo, dar acceso a su cuenta a otros usuarios que ejecutarán el XSS. Pero no sanear los datos proporcionados por un usuario que entra en la base de datos debería ser un delito.

Aún así, sobre las preguntas:

  

Si bien la verdadera solución sería desinfectar automáticamente la dirección IP antes de mostrarla, me gustaría saber cuándo deberíamos hacerlo realmente.

No solo la IP, sino toda la información proporcionada por una solicitud del usuario. Y no solo en casos específicos sino siempre. Si no desinfecta cada pieza de información y la envía, o la deja en la base de datos y la envía más tarde, tendrá problemas de XSS.

  

¿Hay alguna configuración en la que los servidores web cambien automáticamente el REMOTE_ADDR al valor de uno de estos encabezados?

Los servidores web no hacen eso (aunque un poco de pirateo de nginx me permitió realizarlo, pero eso sería una práctica horrible). Los servidores web pasan las variables al programa / script CGI. Las cosas de apache mod_cgi pasan a través de variables de entorno y STDIN (para contenido POST). Nginx controla las variables que están presentes en su configuración para ir al CGI a través del archivo scgi_params (normalmente en /etc/nginx/scgi_params ).

  

¿De qué manera son útiles esos encabezados?

Ver mi comentario rant sobre akamai y True-Client-IP , es decir, X-Forwarded-For es el encabezado HTTP correcto. X-Forwarded-For está destinado a conexiones que pasan por algún tipo de proxy (en lugar de pasar por un NAT).

  

Lo único que estoy viendo es cuando el cliente pasa por algún proxy por una razón poco obvia pero aún quiere que el sitio web conozca su dirección IP. ¿Hay alguna otra?

Y sí, ese es el uso principal y (sin considerar posibles hacks sucios) solo se utiliza para X-Forwarded-For . Esto puede parecer poco útil pero es mucho más común de lo que imaginas.

Las oficinas / centros de datos a menudo tienen enormes servidores proxy / cortafuegos a los que sus redes internas pasan a través de Internet. Algunas de las máquinas internas tienen IP privadas y dependen de un NAT, pero otras sí tienen sus propias IP públicas y dependen del servidor de seguridad como proxy (el servidor de seguridad debe tener estado para que sea efectivo). Esta situación requiere el uso de 'X-Forwarded-For' para saber de qué parte de la red proviene una solicitud.

Los

proxies de Internet (gratuitos y no gratuitos) a menudo usan ese encabezado para asegurarse de que puede visitar sitios web que se adaptan a su ubicación. p.ej. conectando directamente a google.com me redireccionan a google.co.uk (ya que vivo en el Reino Unido). Pero si uso un proxy en Polonia y no configuro X-Forwarded-For , me redireccionaré a google.com.pl . Si utilizo el proxy y configuro X-Forwarded-For a la IP de mi casa (en el Reino Unido), me redirecciono correctamente a google.co.uk .

    
respondido por el grochmal 11.02.2017 - 23:26
fuente

Lea otras preguntas en las etiquetas