近日,奇安信CERT监测到 Nacos 集群Raft反序列化漏洞(QVD-2023-13065),在Nacos集群处理部分Jraft请求时,攻击者可以无限制使用hessian进行反序列化利用,最终实现代码执行。鉴于该漏洞仅影响集群间通信端口 7848(默认配置下),若部署时已进行限制或未暴露则风险可控,建议客户做好自查及防护。
目前官方已发布安全修复更新,受影响用户可以升级到Nacos 1.4.6、Nacos 2.2.3。如果不能更新需要封禁7848端口来缓解该漏洞。
之前nacos2.0.3是通过docker镜像安装的,最新版本nacos2.2.3官网无提供镜像包,故需自己制作镜像包。
1)获取nacos镜像构建的docker 镜像包。
git clone https://github.com/nacos-group/nacos-docker.git
2)修改Dockerfile配置文件
ARG NACOS_VERSION=2.2.3
#此处修改成nacos自己需要最新的版本号。
具体Dockerfile 内容如下:
FROM centos:7.9.2009
LABEL maintainer="pader <huangmnlove@163.com>"
# set environment
ENV MODE="standalone" \
PREFER_HOST_MODE="ip"\
BASE_DIR="/home/nacos" \
CLASSPATH=".:/home/nacos/conf:$CLASSPATH" \
CLUSTER_CONF="/home/nacos/conf/cluster.conf" \
FUNCTION_MODE="all" \
JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk" \
NACOS_USER="nacos" \
JAVA="/usr/lib/jvm/java-1.8.0-openjdk/bin/java" \
JVM_XMS="1g" \
JVM_XMX="1g" \
JVM_XMN="512m" \
JVM_MS="128m" \
JVM_MMS="320m" \
NACOS_DEBUG="n" \
TOMCAT_ACCESSLOG_ENABLED="false" \
TIME_ZONE="Asia/Shanghai"
ARG NACOS_VERSION=2.2.3
ARG HOT_FIX_FLAG=""
WORKDIR $BASE_DIR
RUN set -x \
&& yum update -y \
&& yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel iputils nc vim libcurl \
&& yum clean all
RUN curl -SL https://github.com/alibaba/nacos/releases/download/${NACOS_VERSION}${HOT_FIX_FLAG}/nacos-server-${NACOS_VERSION}.tar.gz -o /home/nacos-server.tar.gz \
&& tar -zxvf /home/nacos-server.tar.gz -C /home \
&& rm -rf /home/nacos-server.tar.gz /home/nacos/bin/* /home/nacos/conf/*.properties /home/nacos/conf/*.example /home/nacos/conf/nacos-mysql.sql \
&& ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo $TIME_ZONE > /etc/timezone
ADD bin/docker-startup.sh bin/docker-startup.sh
ADD conf/application.properties conf/application.properties
# set startup log dir
RUN mkdir -p logs \
&& touch logs/start.out \
&& ln -sf /dev/stdout start.out \
&& ln -sf /dev/stderr start.out
RUN chmod +x bin/docker-startup.sh
EXPOSE 8848
ENTRYPOINT ["bin/docker-startup.sh"]
3)构建镜像:
docker build -t nacos/nacosbuild .
4)nacos服务跑起来
docker run -d --name nacosbuild -p 8848:8848 -p 9848:9848 nacos/nacosbuild
5)访问验证一下版本号:
6)使用compose方式
[root@mysql2 nacos]# more docker-compose.yml
version: '3'
services:
nacos:
restart: always
image: nacos/nacos-server:2.2.3
container_name: nacos223
privileged: true
environment:
- JVM_XMS=512m
- JVM_XMX=512m
- JVM_XMN=256m
- PREFER_HOST_MODE=ip
- MODE=standalone
- NACOS_APPLICATION_PORT=8848
- NACOS_SERVERS=192.168.184.189
- SPRING_DATASOURCE_PLATFORM=mysql
- MYSQL_SERVICE_HOST=192.122.0.111
- MYSQL_SERVICE_PORT=8806
- MYSQL_SERVICE_USER=root
- MYSQL_SERVICE_PASSWORD=123456
- MYSQL_SERVICE_DB_NAME=nacos
- NACOS_SERVER_IP=192.168.184.189
- MYSQL_SERVICE_DB_PARAM=allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&characterEncoding=UTF8&serverTimezone=UTC&connectTimeout=10000&socketTimeout=3000
0&autoReconnect=true&useSSL=false
network_mode: host