跳转至

Index

HTTP Host 标头中毒

描述

HTTP Host 标头指定了 HTTP 客户端希望访问的域名。作为 HTTP/1.1 标准的一部分,它是强制性的。

例如,要访问域名 www.ostorlab.co,HTTP 客户端将发送包含 Host 标头的以下请求:

http request GET / HTTP/1.1 Host: www.ostorlab.co

Host 标头对于启用将流量路由到虚拟主机至关重要。

以不安全方式处理 Host 标头的应用程序容易受到多类漏洞的影响,例如:

  • 服务端请求伪造 (SSRF)
  • Web 缓存中毒
  • 不安全的重定向

Host 标头中毒可能以多种方式体现:

  • 任意 Host 标头反射
  • 重复的 Host 标头注入
  • 绝对 URL 注入并忽略 Host 标头值
  • 通过添加换行符进行标头注入
  • 注入常见的 Host 覆盖标头,如 X-HostX-Forwarded-ServerX-HTTP-Host-Override

建议

防止 Host 标头攻击将需要进行多项检查,这些检查取决于应用程序的目标架构,例如对虚拟主机的支持、反向代理的使用以及在支持额外路由标头的某些云环境中的存在。

防止这些攻击的建议包括:

  • 避免在应用程序逻辑中使用 Host 标头值。
  • 实施可接受值的白名单检查;大多数 Web 框架通常支持此功能。
  • 禁用主机覆盖标头;这取决于架构中部署的中间组件。常见的检查位置包括反向代理和 Kubernetes Ingress 控制器。

链接

标准

  • PCI_STANDARDS:
    • REQ_6_2
    • REQ_6_3
    • REQ_6_4
    • REQ_11_3
  • HIPAA_CONTROLS:
    • SECURITY221
    • SECURITY212
    • SECURITY213