Host header para nginx en modo proxy
Resulta divertido ver como algunas aplicaciones propietarias suponen algunos headers como absolutamente ciertos. Vamos a ver como engañar una aplicación que comprueba la URL dónde se supone que esta instalado.
Dicha aplicación va por licencias, por lo que debes registrar en su web en que dominio estará instalada para que te de la key.
Para evitar tener que coger una IP pública nueva y que dicha aplicación afecte a los frontales con módulos como el ionCube lo que hice fue instalar un Apache nuevo y hacer pasar las peticiones por un nginx que ya tienen IP pública.
Con esto configuré lo siguiente en el nginx para que haga de proxy al Apache:
server
{
listen 80;
server_name evil.systemadmin.es;
access_log off;
error_log off;
root /var/www/void/;
location /
{
proxy_pass http://evil.localhost:8080;
}
}
En el /etc/hosts añadí la entrada evil.localhost que resuelva 127.0.0.1:
127.0.0.1 evil.localhost localhost.localdomain localhost
Y registré, como sería lo adecuado, el dominio público de la aplicación web para la key.
El problema apareció con que no aceptaba que las peticiones le llegasen por el proxy porque el header Host era la dirección interna “evil.localhost“. Simplemente indicando al nginx que modifiquie el header Host por otro mediante la directiva proxy_set_header podemos engañar a la aplicación:
location /
{
proxy_pass http://evil.localhost:8080;
proxy_set_header Host evil.systemadmin.es;
}
Por lo tanto, no me parece esto ninguna protección eficaz ya que si queremos usar una key que ya tenemos para un dominio diferente podríamos hacer esto mismo.
Relacionados
Imprimir
Deja un comentario: