2022年8月4日,Apache Hadoop官方披露修复了一个Shell命令注入漏洞CVE-2022-25168。由于Apache Hadoop的FileUtil.unTar API在传递Shell之前未对输入的文件名进行转义,攻击者可以利用该漏洞注入任意命令,从而对集群造成破坏。
漏洞影响
漏洞影响的Hadoop版本:
2.0.0 <= Apache Hadoop <= 2.10.1
3.0.0-alpha <= Apache Hadoop <= 3.2.3
3.3.0 <= Apache Hadoop <= 3.3.2
漏洞影响的EMR版本:存量集群的EMR 3.x系列、EMR 4.x系列、EMR 5.x系列(EMR-5.8.x及之前的版本)均受到影响。
缺陷严重程度:该漏洞被评估为高危漏洞,需要尽快修复。
关于该漏洞的详细信息,请参见阿里云漏洞库说明Apache Hadoop FileUtil.unTar 命令注入漏洞(CVE-2022-25168)。
修复流程
EMR集群
单击hadoop-patches-tools.zip下载patch包。
登录EMR集群的Master节点,并将上一步骤中下载的patch包放在emr-user用户或hadoop用户的HOME目录下。
执行以下命令,切换用户并解压缩hadoop-patches-tools.zip包。
数据湖(DataLake)、实时数据流(DataFlow)、数据分析(OLAP)、数据服务(DataServing)和自定义场景的集群
su emr-user unzip hadoop-patches-tools.zip
其余集群
su hadoop unzip hadoop-patches-tools.zip
执行以下命令,进入hadoop-patches-tools目录,然后编辑hosts文件。
cd hadoop-patches-tools vim hosts
添加集群所有节点的host name,文件内容以行分割。hosts文件内容示例如下。
emr-header-1 emr-worker-1 emr-worker-2
重要对于EMR 3.x系列中EMR-3.41及之后的版本,EMR 5.x系列中EMR-5.7.0及之后的版本集群,hostname已经发生了变化,hosts文件内容示例如下。
core-1-1 core-1-2 task-1-1 task-1-2
通过fix.sh脚本执行修复操作。
./fix.sh
脚本执行完成后,返回如下提示信息。
### NOTICE: YOU CAN RESTORE THIS PATCH BY RUN RESTORE SCRIPT ABOVE $> sh ./restore.sh 20221024160338 ### DONE
如果您需要将上述修复过程进行回滚,可以执行以下命令。
sh ./restore.sh 20221024160338
最后可以执行
./check.sh
命令来验证修复过程是否完成。如果修复完成,则返回以下提示信息。
******************************************************************** OK: CVE-2022-25168 is already fixed. This tools updated at 2022/10/13. ********************************************************************
重要本修复方式是替换源码修改后的同命名JAR,云安全中心是通过版本号检查该漏洞,此时忽略该漏洞检查即可。
重启服务。
HDFS、Hive、Presto、Impala、Druid、Flink、Solr、Ranger、Storm、Oozie、Spark和Zeppelin等组件需要重启之后才能完全修复漏洞,为减少对业务的影响,请尽量一台节点一台节点的执行重启操作。
以HDFS组件为例,在EMR集群的HDFS服务页面,选择右上角的
。
Gateway集群
由于该方案依赖于SSH免密登录,对于Gateway集群,您需要手动将patch包上传到Gateway集群的每一个节点,并按EMR集群的修复流程分别执行修复操作。
patch包中的hosts文件只需要填写当前执行节点的
hostname
。由于Gateway集群中没有组件进程,上传patch包后,无需进行服务重启操作。
新建集群和扩容已有集群
新建EMR集群时在EMR控制台添加引导操作,或扩容已有集群时可以自动修复漏洞。具体操作步骤如下:
单击hadoop-patches-tools.zip和bootstrap_hadoop.sh,下载patch包和bootstrap脚本,并且上传到OSS上。
例如,上传到OSS的路径为oss://<bucket-name>/path/to/hadoop-patches-tools.zip和oss://<bucket-name>/path/to/bootstrap_hadoop.sh。
在EMR控制台添加引导操作,详细信息请参见管理引导操作。
在添加引导操作对话框中,填写配置项。
参数
描述
名称
引导操作的名称。例如,FileUtil.unTar命令注入漏洞修复。
脚本位置
选择脚本所在OSS的位置。
脚本路径格式必须为oss://**/*.sh格式。本文示例为oss://<bucket-name>/path/to/bootstrap_hadoop.sh。
参数
引导操作脚本的参数,指定脚本中所引用的变量的值。
本文示例为oss://<bucket-name>/path/to/hadoop-patches-tools.zip。
执行范围
选择集群。
执行时间
选择组件启动后。
执行失败策略
选择继续执行。
如果是新建集群,则需要重启所有节点上的HDFS、Hive、Presto、Impala、Druid、Flink、Solr、Ranger、Storm、Oozie、Spark和Zeppelin等组件。如果是新扩容节点,则只需要重启扩容节点上的相应组件。