Tomcat HTTP请求走私(CVE-2021-33037)

Tomcat HTTP请求走私--CVE-2021-33037

这是一篇在先知社区上面看到的文章,我也深入研究了一下,虽然java代码看不懂,但漏洞的成因与里面的逻辑我已经理解清楚了,这里做一下记录
原文请参考
Apache Tomcat HTTP请求走私(CVE-2021-33037)漏洞分析
影响版本
Apache Tomcat 10.0.0-M1-10.0.6
Apache Tomcat 9.0.0.M1-9.0.46
Apache Tomcat 8.5.0-8.5.66

该漏洞的成因是因为tomacat在某些情况下没有正确得解析传输编码标头transfer-encoding导致的,tomacat在实现http协议的时候有一个包叫做http11,里面包含了http0.9 http1.0 http1.1的实现,问题就出在这个包里面,这个我们后面再讨论。这里先讲一下我在读文章的时候先去看了一下transfer-encoding的选项及其格式,Transfer-Encoding
可以在文中看到,如果te的值为trunk,那么正常来讲content-length的值就将失效才对,且在post body中的数据每块的开头都要表明该分块的长度,然后跟\r\n,然后跟内容然后跟\r\n,后面还应该有一个终止块,长度为0,后面跟一些消息块
在这里插入图片描述
知道了这个我们再来看原文中的一张图
在这里插入图片描述
当我们的请求过程出现了前端代理–ngix,后端服务–tomcat的时候,如果二者在实现rfc标准存在差异的时候就可能导致http走私,我们来看这样一个例子。
用户发送一个http请求,前端识别到了te所以按照标准会忽略cl,那么途中黄色部分的所有内容就被当成了请求体,当成了数据。而后端却不这么认为,相反后端识别了cl而忽略了te,导致其按照4来获取请求体的内容,而剩下的部分被当做了下一个请求,这样一个完整的http请求就走私进来了。当然我觉得上图画的不太对,立足于本文的例子,上图的协议版本应该更改为http1.0,因为按照rfc标准,当我们使用http1.0发送带有te字段的请求的时候,如果服务端可以处理,那么他就会按照http1.1的标准正常处理,如果不能处理的话就忽略。因为tomacat在实现http1.0的时候是完全不能使用te字段的,从而导致了漏洞的产生。
本来准备按照文章复现一下的,我环境都搭好了,结果很遗憾,我不会写jsp,文章中也没有源码,我就尴了个尬!!!
当然经过我的不懈努力上网学习了一下jsp怎么写的
在这里插入图片描述
其实就这么一句就可以了,然后我就开始复现了。
不过结局不怎么美妙,复现失败了,我也不知道是哪儿出的问题。。。。。。。。我也很无奈啊!
然后就看到了作者大大和一个大佬的对话
在这里插入图片描述
作者的回复还是在我复现漏洞期间,运气也是好!!!不过我还是有点不太理解

然后让我们跟随坐着的思路来看一下tomacat在实现http协议的时候的源码,从而看看他出现的根本原因,算了,你们还是直接看原文吧!!!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
CVE-2021-25329 是 Apache Tomcat 服务器的一个安全漏洞,它影响了 Tomcat 9.0.0.M1 到 9.0.42 版本。该漏洞可以导致远程攻击者能够通过精心构造的请求,绕过访问控制限制,访问受限资源。 为了修复这个安全漏洞,请确保您的 Apache Tomcat 服务器升级到最新的版本。Apache Tomcat 团队已经发布了修复该漏洞的补丁版本,您可以从官方网站下载并安装最新的 Tomcat 版本。 另外,为了保护您的服务器免受潜在的攻击,还可以考虑以下建议: 1. 及时更新:确保您的 Apache Tomcat 服务器及相关软件都及时更新到最新版本,以获取最新的安全修复和功能改进。 2. 强化访问控制:审查和加强您的访问控制策略,限制对敏感资源的访问,并仅允许经过授权的用户或IP地址进行访问。 3. 配置安全性选项:根据最佳实践和安全建议,配置 Apache Tomcat 服务器的安全性选项,例如启用 SSL/TLS 加密、强密码策略等。 4. 安全审计和监控:定期进行安全审计和监控,及时检测和响应任何异常或可疑活动。 5. 安全意识培训:提高运维人员和开发人员的安全意识,教育他们关于安全最佳实践和常见攻击技术的知识。 请注意,以上建议仅供参考,具体的安全措施应根据您的具体环境和需求进行评估和实施。建议在升级或修改配置之前,先在测试环境中进行测试,确保没有不良影响。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值