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等组件。如果是新扩容节点,则只需要重启扩容节点上的相应组件。