Python与Java曝漏洞,黑客利用FTP注入攻击可绕过防火墙

本文涉及的产品
云防火墙,500元 1000GB
简介:

研究人员最近发现,Java和Python运行时都存在漏洞,它们未能正确验证FTP URL中的特殊字符,最终导致黑客甚至能够绕过防火墙访问本地网络。

上周六,安全研究员Alexander Klink公布了一种很有趣的攻击方式,他利用Java应用中的XXE(XML External Entity)漏洞发送邮件。XXE漏洞就是欺骗应用去解析构建的XML文件,从而让XML解析器泄露敏感信息如文件、目录列表甚至是服务器上运行的进程。

Klink演示相同类型的漏洞还可以用来欺骗Java runtime向远程服务器发起FTP连接,URL形式是:


 
 
  1. ftp://user:password@host:port/file.ext 

结果发现Java FTP客户端并不会过滤特殊的CR和LF字符,而会解析这些字符。CRLF的意思就是回车(CR, ASCII 13, \r) 换行(LF, ASCII 10, \n)。在FTP URL中插入这些字符会导致Java FTP客户端执行这些命令,甚至还可以执行SMTP (Simple Mail Transfer Protocol)命令,因为SMTP与FTP语法很相似。

Java FTP客户端

Klink的演示中,黑客可以利用漏洞强迫Java程序向SMTP服务器发送邮件。

Klink在博客介绍了攻击场景:“当你能从一台能够解析XML的服务器连接到一台无限制(甚至没有垃圾邮件、病毒邮件过滤)的内部邮件服务器时,这个攻击就会非常有意思。”

Python和Java的新漏洞

看到Klink的攻击后,来自Blindspot Security的研究员Timothy Morgan又公开了一种类似的攻击方式,这种攻击方式能够针对Java和Python的FTP——由于该攻击可被用来绕过防火墙,因此更为严重。

Morgan把攻击称为“通过恶意URL的FTP协议流注入”,这种攻击和利用了缺少CRLF过滤特性注入恶意FTP命令的方法是类似的。

Morgan没有注入SMTP 命令,而是利用了FTP PORT命令让客户端连接FTP服务器的指定TCP端口。

安全人员指出,很多基于Linux的全状态数据包检测型防火墙(SPI),包括商业防火墙,会支持传统模式的FTP,当检测到来自客户端的FTP流量中的PORT命令时就会自动打开TCP端口,并且转发到那个FTP客户端的局域网IP。

这种攻击向量已经存在多年,所以conntrack的开发者们会加入额外的检查步骤,conntrack是一套大部分防火墙都会用到的Linux工具。加入检查之后,端口只会在PORT命令出现在TCP包开始的时候打开,这样就能确保真的是客户端发送了命令。

此处对黑客而言,攻击需要解决两个问题:

1. 发现客户端的内部IP地址,从而伪造PORT命令;

2. 调整客户端与服务器端的TCP包,让PORT命令落到包的开头

Morgan称他已经找到了解决这两个问题的方法,就是通过“通过恶意URL的FTP协议流注入”,并且他已经开发了PoC exp打算在Oracle和Python修复FTP客户端代码后公开。

“整个攻击(包括判断受害者内部IP的请求)是通过三个SSRF(服务器端请求伪造)实现的,这三个攻击打开了TCP端口”,Morgan周一在博客中说到,“每次额外的SSRF攻击都可以打开一个新的TCP端口。”

利用方法

利用漏洞的方法有很多,包括攻击那些安装了Java的用户。用户甚至都不需要执行恶意Java applet,因为exp可以通过Java Web开始程序传送。

“如果一个安装了Java的桌面用户访问了一个恶意网站,即使Java applet被关闭,还是可以触发Java Web Start解析JNLP文件,文件中可以包含恶意FTP代码,从而触发漏洞。”

攻击者还可以利用中间人或者利用SSRF/XXE漏洞来攻击那些运行Java应用的服务器。

Morgan表示,他成功攻击了运行最新内核的Linux防火墙,而来自Palo Alto Networks和思科的防火墙在默认设置下也未能幸免。虽然只测试了两款商业防火墙,但他预计受此影响的防火墙不在少数。

安全建议

建议防火墙厂商在Java和Python工程师修复漏洞之前关闭传统的FTP转换模式。

用户应该禁用浏览器的Java插件并且取消.jnlp文件与Java Web Start的关联。同时,对Java和Python应用应该审计SSRF和XXE漏洞。

作者:Sphinx
来源:51CTO

相关文章
|
3月前
|
机器学习/深度学习 JSON Java
Java调用Python的5种实用方案:从简单到进阶的全场景解析
在机器学习与大数据融合背景下,Java与Python协同开发成为企业常见需求。本文通过真实案例解析5种主流调用方案,涵盖脚本调用到微服务架构,助力开发者根据业务场景选择最优方案,提升开发效率与系统性能。
746 0
|
3月前
|
jenkins Shell 测试技术
|
8月前
|
JavaScript 前端开发 Java
通义灵码 Rules 库合集来了,覆盖Java、TypeScript、Python、Go、JavaScript 等
通义灵码新上的外挂 Project Rules 获得了开发者的一致好评:最小成本适配我的开发风格、相当把团队经验沉淀下来,是个很好功能……
1401 103
|
3月前
|
安全 jenkins Java
Java、Python、C++支持jenkins和SonarQube(一)
Jenkins 是一个开源的 持续集成(CI)和持续交付(CD) 工具,用于自动化构建、测试和部署软件项目。它基于 Java 开发,支持跨平台运行,并拥有丰富的插件生态系统,可以灵活地扩展功能
243 5
|
3月前
|
jenkins Java Shell
Java、Python、C++支持jenkins和SonarQube(全集)
Jenkins 是一个开源的持续集成(CI)和持续交付(CD)工具,用于自动化构建、测试和部署软件项目。它基于 Java 开发,支持跨平台运行,并拥有丰富的插件生态系统,可以灵活地扩展功能
328 1
|
3月前
|
jenkins Java 持续交付
Java、Python、C++支持Jenkins和SonarQube(三)
Python与Jenkins和SonarQube
106 1
|
3月前
|
jenkins Java 测试技术
|
5月前
|
人工智能 Java 测试技术
Java or Python?测试开发工程师如何选择合适的编程语言?
测试工程师如何选择编程语言?Java 还是 Python?多位资深专家分享建议:Python 入门简单、开发效率高,适合新手及自动化测试;Java 生态成熟,适合大型项目和平台开发。建议结合公司技术栈、个人基础及发展方向选择。长远来看,两者兼通更佳,同时关注 Go 等新兴语言。快速学习与实践才是关键。
|
人工智能 安全 Java
Java和Python在企业中的应用情况
Java和Python在企业中的应用情况
378 7
|
5月前
|
JSON JavaScript 前端开发
Python+JAVA+PHP语言,苏宁商品详情API
调用苏宁商品详情API,可通过HTTP/HTTPS发送请求并解析响应数据,支持多种编程语言,如JavaScript、Java、PHP、C#、Ruby等。核心步骤包括构造请求URL、发送GET/POST请求及解析JSON/XML响应。不同语言示例展示了如何获取商品名称与价格等信息,实际使用时请参考苏宁开放平台最新文档以确保兼容性。

推荐镜像

更多