[
https://issues.apache.org/jira/browse/GUACAMOLE-838?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Nick Couchman closed GUACAMOLE-838.
-----------------------------------
Resolution: Invalid
Glad you got it resolved [~computergeek125].
> Guacamole reports incorrect IP when X-Forwarded-For contains multiple
> addresses
> -------------------------------------------------------------------------------
>
> Key: GUACAMOLE-838
> URL: https://issues.apache.org/jira/browse/GUACAMOLE-838
> Project: Guacamole
> Issue Type: Bug
> Components: guacamole-client
> Affects Versions: 1.0.0
> Environment: Guacamole version: 1.0.0
> Tomcat: tomcat-7.0.76-9.el7_6.noarch
> nginx: nginx-1.16.0-1.el7.ngx.x86_64
> OS: CentOS Linux release 7.6.1810 (Core)
> Reporter: Ryan S
> Priority: Minor
> Labels: security
>
> Somewhere in the ballpark of when I patched from an 0.9.14 release to 1.0.0,
> I noticed that my connection history was showing localhost instead of the
> real inbound IP address. Since I also patched my OS right about this point,
> I'm partial to blaming an Nginx update for the change. This might have been
> an issue in earlier versions. However, I believe there is still a bug to be
> fixed here.
> My system has two reverse proxies in the chain before it gets to Guacamole:
> {code:java}
> Cloudflare ---[ Argo Tunnel ]---> Nginx ----> Tomcat
> {code}
> As such, with the current version of Nginx, the `X-Forwarded-For` header
> contains multiple values: the real IP that is trying to connect and the IPv6
> localhost address the Argo connecting from. In the Active Sessions and
> History view, Guacamole reports that the connecting IP is ::1, the final IP
> in the proxy chain, instead of the real IP that is connected to Cloudflare.
> For testing purposes, this type of setup could probably be emulated with two
> nginx reverse proxies running on the same node.
> Would it be possible to update this behavior to reflect the real IP in a
> chain containing multiple proxies? Second, in terms of security auditing,
> since the info is available, would it be possible to also log the full proxy
> path of a request? (I can open this second part as a separate feature request
> if you want)
> Additional info:
> I did a bit of sleuthing using netcat and procured an example of what the
> headers look like in my path
> The request that Tomcat receives from nginx: (a.b.c.d is the IP I am testing
> from)
> {code:java}
> GET /guacamole-1.0.0/ HTTP/1.1
> X-Forwarded-For: a.b.c.d, ::1
> Connection: keep-alive
> Host: 127.0.0.1:8080
> User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
> (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
> Accept:
> text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
> Accept-Encoding: gzip
> Accept-Language: en-US,en;q=0.9
> Cache-Control: max-age=0
> Cdn-Loop: cloudflare
> Cf-Connecting-Ip: a.b.c.d
> Cf-Ipcountry: US
> Cf-Ray: xxxxxxxxxxxxxxx-xxx
> Cf-Visitor: {"scheme":"https"}
> Cf-Warp-Tag-Id: [redacted]
> Cookie: __cfduid=[redacted]
> Dnt: 1
> Upgrade-Insecure-Requests: 1
> X-Forwarded-Proto: https
> {code}
> The request that nginx receives from Cloudflare Argo Tunnel:
> {code:java}
> GET / HTTP/1.1
> Host: guac.example.com
> User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
> (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
> Accept:
> text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
> Accept-Encoding: gzip
> Accept-Language: en-US,en;q=0.9
> Cache-Control: max-age=0
> Cdn-Loop: cloudflare
> Cf-Connecting-Ip: a.b.c.d
> Cf-Ipcountry: US
> Cf-Ray: xxxxxxxxxxxxxxx-xxx
> Cf-Visitor: {"scheme":"https"}
> Cf-Warp-Tag-Id: [redacted]
> Connection: keep-alive
> Cookie: __cfduid=[redacted]; cf_use_ob=0
> Dnt: 1
> Upgrade-Insecure-Requests: 1
> X-Forwarded-For: a.b.c.d
> X-Forwarded-Proto: https
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)