Pradeep,

On 9/13/21 09:35, Pradeep wrote:
Hi Chris,

I am using Tomcat 7.0.57, I can't change the Tomcat version now. I tried
adding Virtual Host with RemotrHostValve to allow list of hosts but still
no luck.

<Host name="defaultlocalhost" appbase="whatever">
<Valve className="....RemoteHostValve"
allow="*.\myapplication\.com">

This is because you are trying to block the client by their identity (like "localhost" if you are working locally). It has nothing whatsoever to do with the Host header, the hostname of the server, or anything else. RemoteAddrValve and RemoteHostValve are completely irrelevant for what you are trying to do.

Can you give me specific instructions for how to reproduce this "attack">?

-chris

On Mon, 13 Sep 2021, 2:28 pm Christopher Schultz, <
ch...@christopherschultz.net> wrote:

Pradeep,

On 9/10/21 17:38, Pradeep wrote:
My application is HTTPS not HTTP and now one of the application security
platforms  WhitHatSec raised this vulnerability issue.

I tried to reproduce your "attack" on Tomcat 8.5.59, like this:

$ cat forge
GET www.microsoft.com/ HTTP/1.1
Host: www.microsoft.com


$ od -t x1 -a forge
0000000    47  45  54  20  77  77  77  2e  6d  69  63  72  6f  73  6f  66
             G   E   T  sp   w   w   w   .   m   i   c   r   o   s   o   f
0000020    74  2e  63  6f  6d  2f  20  48  54  54  50  2f  31  2e  31  0d
             t   .   c   o   m   /  sp   H   T   T   P   /   1   .   1  cr
0000040    0a  48  6f  73  74  3a  20  77  77  77  2e  6d  69  63  72  6f
            nl   H   o   s   t   :  sp   w   w   w   .   m   i   c   r   o
0000060    73  6f  66  74  2e  63  6f  6d  0d  0a  0d  0a
             s   o   f   t   .   c   o   m  cr  nl  cr  nl

$ nc tomcat 8080 < forge
HTTP/1.1 400
Content-Type: text/html;charset=utf-8
Content-Language: en
Content-Length: 795
Date: Mon, 13 Sep 2021 13:22:51 GMT
Connection: close

<!doctype html><html lang="en"><head><title>HTTP Status 400 – Bad
Request</title><style type="text/css">body
{font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b
{color:white;background-color:#525D76;} h1 {font-size:22px;} h2
{font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a
{color:black;} .line
{height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP

Status 400 – Bad Request</h1><hr class="line" /><p><b>Type</b> Status
Report</p><p><b>Message</b> Invalid URI</p><p><b>Description</b> The
server cannot or will not process the request due to something that is
perceived to be a client error (e.g., malformed request syntax, invalid
request message framing, or deceptive request routing).</p><hr
class="line" /><h3>

Changing the "www.microsoft.com" to "http://www.microsoft.com"; returns
this:

HTTP/1.1 404
Content-Type: text/html;charset=utf-8
Content-Language: en
Content-Length: 751
Date: Mon, 13 Sep 2021 13:25:22 GMT

<!doctype html><html lang="en"><head><title>HTTP Status 404 – Not
Found</title><style type="text/css">body
{font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b
{color:white;background-color:#525D76;} h1 {font-size:22px;} h2
{font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a
{color:black;} .line
{height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP

Status 404 – Not Found</h1><hr class="line" /><p><b>Type</b> Status
Report</p><p><b>Message</b> The requested resource [&#47;] is not
available</p><p><b>Description</b> The origin server did not find a
current representation for the target resource or is not willing to
disclose that one exists.</p><hr class="line" /><h3>Apache
Tomcat/8.5.59</h3></body></html>

Removing the "www.microsoft.com" from the request-line returns this:

HTTP/1.1 404
Content-Type: text/html;charset=utf-8
Content-Language: en
Content-Length: 751
Date: Mon, 13 Sep 2021 13:24:34 GMT

<!doctype html><html lang="en"><head><title>HTTP Status 404 – Not
Found</title><style type="text/css">body
{font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b
{color:white;background-color:#525D76;} h1 {font-size:22px;} h2
{font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a
{color:black;} .line
{height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP

Status 404 – Not Found</h1><hr class="line" /><p><b>Type</b> Status
Report</p><p><b>Message</b> The requested resource [&#47;] is not
available</p><p><b>Description</b> The origin server did not find a
current representation for the target resource or is not willing to
disclose that one exists.</p><hr class="line" /><h3>Apache
Tomcat/8.5.59</h3></body></html>

Please show me what (exact) steps are required to reproduce this issue.
Also please try your "attack" against Tomcat 8.5.x and/or 9.0.x as well
as your Tomcat 7.0.x version.

I tried the above configuration mentioned but no luck but this
configuration advised in Apache website
http://tomcat.apache.org/tomcat-9.0-doc/config/host.html#Request_Filters
  > to filter Host Header. I understand this is trivial but I have to fix
and I think I should handle it in the application server Tomcat7.
You can't filter-out the Host header. Well, not effectively.

I tried the below configuration but still validation is not working,
it's still redirecting other Host Headers. Please let me know what
else configuration I can try >
  >   <Host name="defaultlocalhost" appbase="whatever">
  >                  <Valve
  > className="org.apache.catalina.valves.RemoteAddrValve"
  >         allow=".*\.myapplication1\.com|.*\myapplication2\.com"/>
  > </Host>

You misunderstand the purpose of the RemoteAddrValve[1].

The valve enforces client identity, not the host the client is trying to
access. It also works on IP addresses, not hostnames. I'm surprised you
were able to access anything at all.

-chris

[1]

http://tomcat.apache.org/tomcat-9.0-doc/config/valve.html#Remote_Address_Valve

On Fri, Sep 10, 2021 at 7:36 PM Christopher Schultz <
ch...@christopherschultz.net> wrote:

Pradeep,

On 9/10/21 06:19, Pradeep wrote:
Hi Team,

I need your help to fix HTTP Host header attacks.
I'm currently in the process of trying to fix a site vulnerability,
basically it is one type of the "Improper Input Handling" attack.

Let's say my website is www.mywebsite.com and there is hacker's
website
www.hacker.com
Whenever there is a request send to www.mywebsite.com with modified
"Host"
header point to www.hacker.com, my site will create a redirect to
www.mywebsite.com along with whatever the url it was. e.g.


*Normal:*
Host: www.mywebsite.com
GET  www.mywebsite.com/get/some/resources/
Reponse 200 ok


*Hack:*Host: www.hacker.com (#been manually modified)
GET  www.mywebsite.com/get/some/resources/
Response 302
Send another Redirect to www.hacker.com/get/some/resources

I have found this configuration below for tomcat (my application using
Tomcat7) is this works for case? Also I have some existing Host name in
server.xml not sure how to incorporate both Host configuration, please
help
me on this.

*Solution I found :*

<Host name="defaultlocalhost" appbase="whatever" >
     </Host>

*My tomcat existing Host configuration:*
<Host name="localhost"  appBase="webapps"
               unpackWARs="true" autoDeploy="true">

I'm not sure why the above configuration would change anything. Can you
explain?

Please note that the "attacker" in this situation can only attack
himself. Injecting/modifying a header into an HTTP request can only be
done if the attacker is in a MitM position, which should not be possible
when using HTTPS. If using HTTP, then you are on your own and this
attack is trivial.

Assuming there is no MitM, it is challenging to cause another client to
use a header of the attacker's choosing.

Unless this is simply an academic question.

I always use Tomcat configured with a "default" <Host>, but I suspect
there may be a way to force Tomcat to treat a request as invalid if the
Host header doesn't match the name (or alias) of any <Host> configured.

-chris

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to