Wget重定向漏洞技术分析与防护方案

      Wget重定向漏洞技术分析与防护方案无评论

  Wget是GNU计划开发的一套用于在网络上进行下载的自由软件,是Unix/Linux系统最常用的下载工具,支持通过HTTP、HTTPS以及FTP这三个最常见的TCP/IP协议下载。

  Wget 1.18之前的版本在对HTTP服务重定向进行处理时存在漏洞,远程攻击者可以利用此漏洞写入任意文件,CVE编号为CVE-2014-4877,CVSS分值为9.3【严重】。

  文章目录

  影响的版本

  Wget < 1.18

  不受影响的版本

  Wget = 1.18

  技术分析

  HTTP服务可以将网络请求重定向到其他目标。

  当HTTP服务将wget的请求重定向到FTP服务时,wget会默认信赖重定向的FTP URL,而没有进行二次验证或对下载文件名进行适当的处理。

  利用此漏洞,远程攻击者可以通过控制HTTP重定向指向的FTP文件名,实现对敏感文件的写入操作。

  例如,攻击者可以控制HTTP重定向的Location字段,将指向poc.txt的请求重定向到FTP服务上一个名为.bash_profile的文件:

  并将攻击payload写入此文件:

  此时,如果存在漏洞的主机使用wget访问http://10.8.55.11/poc.txt,就会将.bash_profile文件下载到本地。

  而如果wget操作是在home路径下执行,且该home目录下原本不存在.bash_profile文件,则此次下载的.bash_profile中的代码就会在下次进入shell时被触发。

  攻击者监听指定的端口,当payload被执行后便可以获取到被攻击主机的shell:

  官方修复分析:

  从wget的github的项目中可以看到,这个漏洞(CVE-2016-4971)是在这个commit中修复的:

  

  从修复的log中可以看出,本次修复主要修复了ftp_loop和ftp_loop_interval这两个基础函数。

  从这个改动可以看出,在调用从FTP下载文件的函数时多传了一个原始URL参数,在生成本地文件的文件名时使用了原始的URL,于是在保存本地文件的时候并不是使用了跳转后的连接中的文件名,而是使用wget中传入参数的URL连接中的文件名作为了保存的文件名。

  测试一下wget1.14和wget1.18(修复版本)

  显然,wget1.18版本已经处理了跳转后的文件名,和传入URL链接的文件名保持一致。

  防护方案 通过命令wget CV可以获得当前wget的版本,如果为受影响的版本,建议升级到1.18版本。 在调用wget命令时,尽量使用-O参数指定输出路径和文件名,并注意检查下载的文件。 使用绿盟科技的远程评估系统(RSAS)对内网进行安全评估。 使用绿盟科技检测类产品(IDS)进行检测。 使用绿盟科技防护类产品(IPS/NF/SG)进行防护。 已经购买了绿盟科技相关产品服务的客户可以通过产品升级进行检测与防护。 短期服务:绿盟科技工程师现场处理。确保第一时间消除网络内相关风险点,控制事件影响范围,提供事件分析报告。 中期服务:提供 3-6个月的风险监控与巡检服务。根除风险,确保事件不复发。 长期服务:基金行业业务风险解决方案(威胁情报+攻击溯源+专业安全服务)。

发表评论