HTTPOXY -- CGI 环境变量劫持漏洞分析

简介: 昨晚,一个名为 HTTPOXY 的漏洞在安全圈内广泛传播。云盾攻防对抗团队第一时间对此漏洞进行了深入分析,发现其本质是一个 CGI 环境变量劫持漏洞。受限于利用场景,漏洞危害有限。

0x00 前言

        昨晚,一个名为 HTTPOXY 的漏洞在安全圈内广泛传播。云盾攻防对抗团队第一时间对此漏洞进行了深入分析,发现其本质是一个 CGI 环境变量劫持漏洞,对 CGI 的环境变量 HTTP_PROXY 变量进行劫持。如果 CGI 在运行过程中依赖 HTTP_PROXY,那么攻击者将能够获取到程序敏感数据,甚至伪造返回包对 CGI 程序实现欺骗。

0x01 漏洞分析

         这个漏洞实际上 CGI 程序对变量命名不规范导致的。CGI 程序在接收到 HTTP Header 后,会把部分 Header 的信息存入以 HTTP_ 开头的变量中。Header 中要是出现了 Proxy 头,那么 Proxy 头中的信息会存放在 HTTP_PROXY 的变量中。巧合的是,CGI 程序环境变量中本身就定义了一个 HTTP_PROXY 变量,作用是为 CGI 程序设置代理。因此,如果我们在请求中带上了 Proxy 头,那么 HTTP_PROXY 变量将会被我们发送的内容覆盖,实现 HTTP_PROXY 变量劫持。需要注意的是,覆盖的变量只对当次请求有效,不会对全局的 HTTP_PROXY 变量造成影响。
        我们在 x.x.27.216 上用 nc 监听 23333 端口,然后向受害网站 x.x.25.84 发送的请求中加入 Proxy 头 "x.x.27.216:23333"。如下图所示,受害网站在向 restapi.amap.com 请求数据,而这个请求被我们的机器截获到了,漏洞利用成功。同时,这个请求将网站在 restapi.amap.com 使用的 KEY 暴露出来了,造成敏感信息泄漏。


         这里分享一下我们想到的两个利用场景:
         1、CGI 程序与其它网站通信时,需要 CGI 程序带上某些身份信息的,如 AccessToken、gsid、key 等,那么这些敏感信息将会被非法的代理服务器接收到,造成敏感信息泄漏。
         2、对于电商类网站,若通过设置 Proxy 头能截获到它向支付网关发送的请求,那么就可以篡改这个请求的返回包,如“将支付失败改为支付成功”,对原网站进行欺骗。

0x02 影响范围

        理论上这个漏洞影响所有以 CGI 方式运行的程序。但漏洞利用受到以下限制:
        1、CGI 程序不会对外发送请求;
        2、CGI 程序不依赖 HTTP_PROXY 变量;
        3、CGI 程序与外部使用非 HTTP 协议(如 HTTPS)进行通信。
        如果符合上述其中一种情况,漏洞将无法利用。 我们认为,此漏洞的危害程度没有外界宣传的那么高。

0x03 修复方案

         Proxy 并非一个规范的 HTTP Header,因此我们没必要去处理 HTTP 请求中 Proxy 头的内容。 由于每个应用的修复方案不一样,下面以 Nginx 和 Apache 进行举例:
          Nginx:在调用 FastCGI 的地方将 HTTP_PROXY 置为空。

fastcgi_param HTTP_PROXY "";

          Apache:借助 mod_headers 模块将 Proxy 头置为失效。

RequestHeader unset Proxy early

          其它应用的修复方案请参考应用官方公告或 0x04 中的参考资料。

0x04 参考资料


目录
相关文章
|
2月前
|
传感器 人工智能 供应链
智能体未来发展趋势:对标国家“十四五”AI规划的技术方向研判
《智能体技术发展白皮书(2024)》指出,自主、多模态、行业化智能体将成为未来三年核心方向。自主智能体实现动态决策,提升制造效率;多模态智能体优化人机交互,覆盖智能家居等场景;行业化智能体深度融合医疗、金融、教育等领域,推动数字化转型。预计2027年行业市场规模超800亿元,助力国家人工智能战略落地。(238字)
|
存储 SQL 算法
ClickHouse(13)ClickHouse合并树MergeTree家族表引擎之CollapsingMergeTree详细解析
CollapsingMergeTree是ClickHouse的一种表引擎,它扩展了`MergeTree`,通过折叠行来优化存储和查询效率。当`Sign`列值为1和-1的成对行存在时,该引擎会异步删除除`Sign`外其他字段相同的行,只保留最新状态。建表语法中,`sign`列必须为`Int8`类型,用来标记状态(1)和撤销(-1)。写入时,应确保状态和撤销行的对应关系以保证正确折叠。查询时,可能需要使用聚合函数如`sum(Sign * x)`配合`GROUP BY`来处理折叠后的数据。使用`FINAL`修饰符可强制折叠,但效率较低。系列文章提供了更多关于ClickHouse及其表引擎的详细解析。
552 1
|
安全 搜索推荐 应用服务中间件
Web安全-目录遍历漏洞
Web安全-目录遍历漏洞
588 2
|
11月前
|
缓存 负载均衡 安全
Swift中的网络代理设置与数据传输
Swift中的网络代理设置与数据传输
|
IDE Java 测试技术
通义灵码测评报告
通义灵码测评报告
925 1
|
机器学习/深度学习 人工智能 自然语言处理
轻松复现一张AI图片
现在有一个非常漂亮的AI图片,你是不是想知道他是怎么生成的?今天我会交给大家三种方法,学会了,什么图都可以手到擒来了。
轻松复现一张AI图片
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的旅游景区管理系统
该项目是为大学生课程设计开发的旅游景区管理系统,采用Python+Vue技术栈,实现前后端分离。主要功能涵盖景区、类型、用户管理等,并支持统计分析、消息发布、订单处理及个性化推荐。开发环境基于Python 3.8 + Django 3.2、Vue + JavaScript及MySQL 5.7。通过该项目,学生可深入学习相关技术,增强实践能力,为职业发展奠定基础。[在线演示](https://travel2.gitapp.cn) | [源码](https://github.com/net936/python_travel2) | 管理员默认账号: admin123 / admin123.
434 3
|
缓存 监控 安全
Spring AOP 详细深入讲解+代码示例
Spring AOP(Aspect-Oriented Programming)是Spring框架提供的一种面向切面编程的技术。它通过将横切关注点(例如日志记录、事务管理、安全性检查等)从主业务逻辑代码中分离出来,以模块化的方式实现对这些关注点的管理和重用。 在Spring AOP中,切面(Aspect)是一个模块化的关注点,它可以跨越多个对象,例如日志记录、事务管理等。切面通过定义切点(Pointcut)和增强(Advice)来介入目标对象的方法执行过程。 切点是一个表达式,用于匹配目标对象的一组方法,在这些方法执行时切面会被触发。增强则定义了切面在目标对象方法执行前、执行后或抛出异常时所
17355 4
|
安全 前端开发 JavaScript
|
负载均衡 算法 网络协议
【专栏】网络高可用性和负载均衡关键在于VRRP、VGMP和HRP协议
【4月更文挑战第28天】网络高可用性和负载均衡关键在于VRRP、VGMP和HRP协议。VRRP实现路由器冗余,保证流量转发;VGMP优化多播流量传输,适合多媒体服务;HRP提供无缝故障转移,适用于电信级网络。选择需考虑网络环境和业务需求,VRRP简单易部署,VGMP处理多播流量,HRP适合高稳定性场景。理解协议特点,确保网络最佳性能和可用性。
750 4