近日Linux社区披露了编号为CVE-2020-14386的内核漏洞。该漏洞源自packet socket包中的漏洞,攻击者可以通过漏洞实现越界写,能够写的长度为1~10个字节(来自漏洞发现者描述),除了可能造成提权和容器逃逸等风险,该攻击还可能造成集群节点内存耗尽并影响节点上运行的业务应用。

Linux社区披露编号为CVE-2020-14386的内核漏洞,详情请参见CVE-2020-14386

影响范围

集群节点内核版本高于4.6的不同操作系统的Linux发行版均在此次漏洞的影响范围内,包括:
  • Ubuntu Bionic (18.04) and newer
  • Debian 9
  • Debian 10
  • CentOS 8/RHEL 8
对于容器服务ACK集群:
  • 如果您的集群节点操作系统选择的是Alibaba Cloud Linux 2(内核版本为4.19.91-19.1.al7),您的集群会受到此次漏洞的影响。
  • 如果您的集群节点操作系统是CentOS,由于当CentOS内核版本较低(3.10.0-1062),不在此漏洞影响范围内。

漏洞影响

CVE-2020-14386是内核af_packet模块中存在的内存溢出漏洞。漏洞触发需要CAP_NET_RAW权限。非Root用户没有该权限,但是在高版本Linux(内核版本高于4.6)上非特权用户能够创建user namespace,在该user namespace中会有CAP_NET_RAW权限。K8s或Docker容器默认具有CAP_NET_RAW权限,在高版本Linux中也存在触发该漏洞的可能。该漏洞能够允许攻击者实现越界写,能够写的长度为1~10个字节(来自漏洞发现者描述),可能造成提权或容器逃逸。Alibaba Cloud Linux 2的官方公告请参见漏洞公告 | Linux内核漏洞(CVE-2020-14386)。Alibaba Cloud Linux 2.1903安全漏洞修复信息,请参见Security Advisories

防范措施

  • 在容器应用中通过securityContext删除CAP_NET_RAW权限,从而可以阻止进入到容器触发此漏洞。
    spec:
      containers:
        -name: target-container
         ...
        securityContext:
          capabilities:
            drop:
              -NET_RAW
    触发此漏洞的前提是攻击者具有CAP_NET_RAW权限,而大多数容器应用场景并不需要CAP_NET_RAW权限,可以通过PodSecurityPolicy(PSP)策略强制校验Pod中是否删除了CAP_NET_RAW权限对应的内核能力,以下为PSP策略模板。
    说明 在ACK容器服务控制台可以开启PSP特性,并创建和绑定PSP策略,详情请参见使用PSP安全策略
    apiversion: extensions/v1beta1
    kind: PodSecurityPolicy
    metadata:
      name: no-cap-net-raw
    spec:
      requiredDropCapabilities:
        -NET_RAW
         ...
  • 通过组件管理安装gatekeeper组件,并确保已经安装了官方的constraint template。此时您可以创建下面的约束实例来限制容器应用中对CAP_NET_RAW的使用。
    # Dropping CAP_NET_RAW with Gatekeeper
     # (requires the K8sPSPCapabilities template)
     apiversion: constraints.gatekeeper.sh/v1beta1
     kind:  K8sPSPCapabilities
     metadata:
       name: no-cap-net-raw
     spec:
       match:
         kinds:
           - apiGroups: [""]
           kinds: ["Pod"]
         namespaces:
           #List of namespaces to enforce this constraint on
           - default
         # If running gatekeeper >= v3.1.0-beta.5,
         # you can exclude namespaces rather than including them above.
         excludedNamespaces:
           - kube-system
       parameters:
         requiredDropCapabilities:
           - "NET_RAW"
  • Alibaba Cloud Linux 2已经发布关于本漏洞的最新公告和相关升级说明,如果您的节点使用的是Alibaba Cloud Linux 2操作系统,建议您参照下列步骤升级内核版本。
    1. 执行命令yum -y install kernel-4.19.91-21.2.al7,升级内核至修复版本。 或执行命令yum -y update kernel,直接升级至最新内核。
    2. 重启系统,使新内核生效。如果节点上有正在运行的单点服务,请选择非业务高峰时段将节点排水后再重启节点。
    3. 更多Alibaba Cloud Linux 2.1903安全漏洞修复信息,请参考Security Advisories