Host Header attacks represent a serious risk to web applications, demonstrating the importance of secure coding practices. Attackers exploit seemingly innocuous parts of the web's infrastructure by tampering with the Host header in HTTP requests that potentially cause web servers to misroute traffic, disclose sensitive information, or execute malicious code.
This guide will delve into the technical details of Host Header attacks. We'll explain how they work, the various ways they can be exploited, and the essential steps you must take to protect your web applications.
At the heart of every HTTP request is the Host header, a critical component that designates the target server's hostname. Host Header attacks leverage this essential header to manipulate request routing, deceive servers, and breach web applications. These attacks include various techniques, such as cache poisoning, domain hijacking, and proxy bypass, each posing unique threats to web security.
The major impact lies under the two categories mentioned below.
Cache Poisoning: This attack vector exploits vulnerabilities in caching mechanisms by manipulating the Host header to poison cache entries. Subsequent requests served from the tainted cache may contain malicious content, leading to potential data breaches or the dissemination of harmful payloads to unsuspecting users.
Proxy Bypass: Misconfigured proxies or load balancers can inadvertently expose servers to Host Header attacks. Attackers exploit these weaknesses to bypass security controls, directly access internal resources, or inject malicious payloads into backend systems.
Consider an NGINX reverse proxy configured to forward requests to backend servers without adequately validating the Host header:
server {
listen 80;
server_name _;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
This NGINX configuration snippet defines a server block that listens on port 80 for incoming requests. The server_name _; directive instructs NGINX to match any hostname that does not match other server blocks, effectively serving as a catch-all for requests.
Within the location / { ... } block:
proxy_set_header Host $http_host;
This directive sets the Host header of the forwarded request to the value of the original request's Host header. The $http_host variable represents the value of the Host header sent by the client.
In a cache poisoning attack scenario, an attacker manipulates the Host header to inject malicious content into the cache. Let's illustrate this with both the request and response:
Request 1 -
GET /admin HTTP/1.1
Host: example.com
Response:
Response 1 -
HTTP/1.1 200 OK
Content-Type: text/html
Cache-Control: public, max-age=3600
Date: [Date]
Content-Length: [Length]
<!-- some legit content -->
The attacker manipulates the Host header as seen below
Request 2 -
GET /admin HTTP/1.1
Host: attacker.com
Response (Cached):
HTTP/1.1 200 OK
Content-Type: text/html
Cache-Control: public, max-age=3600
Date: [Date]
Content-Length: [Length]
<!-- Cached response containing malicious content -->
<script>alert('You have been hacked!');</script>
The proxy, failing to properly validate the Host header, caches the malicious response for attacker.com.
So the next time one opens example.com , they would be served the cached response and the malicious script would execute.
Strict Host Header Validation: Implement rigorous validation checks to ensure that incoming Host headers match expected values, preventing unauthorized requests and thwarting potential attacks.
Cache Control Measures: Employ mechanisms such as Cache-Control headers to manage caching behavior and mitigate the risk of cache poisoning attacks.
Proxy Hardening: Configure proxies to preserve the integrity of Host headers during request forwarding, enforce strict validation, and sanitize input to mitigate potential vulnerabilities.
By adopting these mitigation strategies, organizations can fortify their defenses against Host Header attacks, safeguarding their web infrastructure and preserving the integrity of HTTP request handling. Remember, proactive security measures are essential in combating evolving cyber threats and ensuring a resilient web ecosystem
https://portswigger.net/web-security/host-header
Abhishek P Dharani is a Senior Security Engineer at we45. Abhishek P Dharani is a self taught security engineer with a keen interest in application security and automation. He is enthusiastic about both offensive and defensive security strategies. With a keen eye for vulnerabilities, he immerses himself in constantly honing his skills to stay ahead in the cybersecurity game. Adept at both cricket and badminton, Abhishek finds solace in the competitive spirit of sports. When he's not on the field, you'll likely find him at the bowling alley, enjoying the precision and strategy required to hit that perfect strike.