fastjson 采用黑白名单的方法来防御反序列化漏洞,导致当黑客不断发掘新的可攻击的反序列化 Gadgets 类时,则可能可以绕过黑白名单防御机制,造成远程命令执行或者 SSRF 漏洞。阿里云应急响应中心提醒 fastjson 用户尽快采取安全措施阻止漏洞攻击。详情请参见漏洞预警,然后参照下面的公告内容升级 EDAS 客户机(导入到 EDAS 中的 ECS)中使用到 fastjson 依赖包的 Java 程序/组件版本。

漏洞描述

fastjson 采用黑白名单的方法来防御反序列化漏洞,导致当黑客不断发掘新的可攻击的反序列化 Gadgets 类时,则可能可以绕过黑白名单防御机制,造成远程命令执行或者 SSRF 漏洞。阿里云应急响应中心提醒 fastjson 用户尽快采取安全措施阻止漏洞攻击。

影响版本

fastjson < 1.2.67

or

fastjson sec版本 < sec09

安全版本

fastjson >= 1.2.67

or

fastjson sec版本 >= sec09

安全建议

注意:较低版本升级至 1.2.67 可能会出现兼容性问题,建议升级至特定版本的 sec09 bugfix 版本。

对 EDAS 用户的影响

EDAS 客户机中涉及使用 fastjson 的程序/组件如下:

  • EDAS Agent(所有导入 ECS 集群的 ECS 均包含此组件,且为 Java 进程,Swarm 集群、容器服务 K8s 集群也包含此组件,但 edas-agent 容器中运行的 edas-agent 非 Java 版,所以仅 ECS 集群的应用 ECS 节点需要升级 EDAS Agent, Swarm 集群、容器服务 K8s 集群的应用可忽略 EDAS Agent 组件)。
  • Pandora (所有创建时选择了 EDAS Container x.x.x 作为应用运行时环境的应用都会用到 Pandora)。
  • ARMS Agent(所有使用 EDAS Container x.x.x 作为运行环境的应用且开启了高级监控、选择 Apache Tomcat 以及标准 Java 应用运行环境、容器服务 K8s 集群应用都有使用 ARMS Agent)。
  • 用户自己应用包中用到的 fastjson 包。

修复解决办法

  • 针对使用 EDAS-Container x.x.x 作为应用环境中的 Pandora 插件里面的 fastjson 包的修复方法:

    ECS 集群从应用详情页“应用运行环境“ 信息项,即可看到应用当前使用的 EDAS-Container 版本列表,点击应用详情页右上角的“运行时环境升降级“按钮,分批次(前提是需要建立除默认分组以外的应用分组)升级 EDAS-Container 版本至最新的 3.5.9 版本即可。分批次升级 EDAS-Container 版本可参考运行环境升降级,注意选择在业务低峰或者其他合适的变更窗口进行,并提前在测试环境进行测试,避免出现容器版本升级失败导致应用无法正常启动。

    K8s 集群直接部署一下应用,并选择 EDAS-Container 版本为最新的 3.5.9 版本即可。

    注意 请勿在业务高峰时间升级 EDAS-Container 版本,使用很早之前发布的 EDAS-Container 3.3.x 或者更早的版本,请在测试环境测试正常后,再升级生产环境的 EDAS-Container 版本,否则可能出现升级后应用启动失败,而又无法回退的情况,遇到该情况时,请使用钉钉扫搜索群号:23336518 或描下方二维码,并提供应用ID,将有值班同学尽快更正出现升级失败的应用的容器版本。

    用户群二维码

    使用 EDAS-Container x.x.x 作为应用运行环境的应用,在升级 EDAS-Container 版本至最新的 3.5.9 后,该应用下面所有的 ECS 主机上的 EDAS Agent、ARMS Agent 都会自动升级,无需再执行下面的操作单独升级。

  • 针对 ECS 集群且应用是使用标准 Java 应用运行时环境、 Apaceh Tomcat 作为应用运行环境的修复方法:
    • 手工或寻找批量的工具升级 edas-agent 版本(优点:不会重启或影响到应用,缺点:命令行操作,且需要批量)。

      示例(需要用 root 用户,杭州地域的 ECS 集群中的 ECS 实例上可执行,无论 ECS 实例是否连接互联网):

      root# wget -q -O /root/install.sh http://edas-hz.oss-cn-hangzhou-internal.aliyuncs.com/install.sh && sh /root/install.sh -full -version 3.1.4
      							
      注意 部署在 Swarm 和容器服务 K8s 集群的应用的各 ECS 实例不需要执行这一步。执行该命令将安装 OpenJDK 1.8.0 Update xxx(OpenJDK 1.8.0 的最新版本,如果主机上已经安装了 OpenJDK 1.8.0 版本,则会跳过,如果需要 1.7.0 版本,则可通过在上面的命令行结尾添加-java 7来指定安装 OpenJDK 1.7.0 的最新版本)。

      阿里云地域的 edas-agent 安装脚本的区域名如下:

      地域名称 地域 ID EDAS Agent 安装脚本链接
      华北1-青岛 cn-qingdao http://edas-qd.oss-cn-qingdao-internal.aliyuncs.com/install.sh
      华北2-北京 cn-beijing http://edas-bj.oss-cn-beijing-internal.aliyuncs.com/install.sh
      华北3-张家口 cn-zhangjiakou http://edas-zjk.oss-cn-zhangjiakou-internal.aliyuncs.com/install.sh
      华东1-杭州 cn-hangzhou http://edas-hz.oss-cn-hangzhou-internal.aliyuncs.com/install.sh
      华东2-上海 cn-shanghai http://edas-sh.oss-cn-shanghai-internal.aliyuncs.com/install.sh
      华南1-深圳 cn-shenzhen http://edas-sz.oss-cn-shenzhen-internal.aliyuncs.com/install.sh
      中国香港 cn-hongkong http://edas-hk.oss-cn-hongkong-internal.aliyuncs.com/install.sh
      亚太东南1(新加坡) ap-southeast-1 http://edas-xjp.oss-ap-southeast-1-internal.aliyuncs.com/install.sh
      亚太东南2(悉尼) ap-southeast-2 http://edas-sydney.oss-ap-southeast-2-internal.aliyuncs.com/install.sh
      欧洲中部1(法兰克福) eu-central-1 http://edas-eu-central-1.oss-eu-central-1-internal.aliyuncs.com/install.sh
      美国东部1(弗吉尼亚) us-east-1 http://edas-useast.oss-us-east-1-internal.aliyuncs.com/install.sh

      其它地域安装时,只需要使用该地域实际的 EDAS Agent 安装脚本链接替换上面示例中的http://edas-hz.oss-cn-hangzhou-internal.aliyuncs.com/install.sh即可。

      安装完成后,检查/home/admin/edas-agent/lib下面的 fastjson 版文件是否是 fastjson-1.2.xx.sec06.jar。如果是,表示升级成功,该组件目前不再存在 fastjson 的安全漏洞风险。

    • 依次重置应用中各 ECS 实例(优点:操作简单,缺点:会重新初始化应用环境并重启应用)。

      应用重置示例如下图所示(每次只能重置一个 ECS 实例):

  • 针对使用 ARMS Agent的应用使用的 fastjson 包的修复方法

    ARMS Agent 包中的 fastjson 版本已升级,重启应用即可下载到最新版本的 ARMS Agent包。

  • 针对用户自己应用包中用到的 fastjson 包,且版本在受影响的范围内这种情况的修复方法

    请用户自行或者联系软件开发商升级应用包中的 fastjson 包的版本至最新的 1.2.67 或者带 sec09 的版本并重新测试、验证、发布即可。