全部產品
Search
文件中心

Container Service for Kubernetes:CVE-2025-31133、CVE-2025-52565和CVE-2025-52881修複方案

更新時間:Dec 26, 2025

runc社區披露了三個高危漏洞:CVE-2025-31133、CVE-2025-52565和CVE-2025-52881。這些漏洞雖然利用方式不同,但最終均可通過繞過runc對/proc目錄下檔案的寫入限制,實現完整的容器逃逸。

漏洞描述

  • CVE-2025-31133:該漏洞利用 runc 中 maskedPaths(路徑掩碼)實現機制的一個缺陷。攻擊者可在特定條件下,將容器內的 /dev/null 替換為一個指向宿主機 /proc 目錄下敏感檔案的符號連結(symlink)。這可能導致關鍵系統檔案被意外掛載為可寫,從而被攻擊者利用實現容器逃逸。此外,如果攻擊者刪除 /dev/null,runc 的錯誤處理邏輯可能導致敏感核心資訊泄露。

  • CVE-2025-52565:該漏洞與 CVE-2025-31133 的原理相似。runc 在為容器設定 /dev/console 的 bind-mount 時未充分校正目標路徑。攻擊者可通過路徑操控(Path Traversal)將宿主機上的任意檔案掛載到容器的 /dev/console,從而實現對宿主機檔案的任意寫,導致容器逃逸。

  • CVE-2025-52881:runc 在設定 LSM(Linux Security Module,如 AppArmor、SELinux)安全性標籤時存在邏輯缺陷。這可能導致為容器配置的安全性原則未能正確應用,削弱了容器的隔離能力,並可能與其他漏洞組合利用以提升攻擊效果。

關於社區披露的更多資訊,請參見runc社區資訊安全諮詢

影響範圍

下列runc版本均在漏洞影響範圍內:

  • runc v1.2.7 及更早版本

  • runc v1.3.2 及更早版本

  • runc v1.4.0-rc.2 及更早版本

社區在下列版本中修複了該問題:

  • runc v1.2.8

  • runc v1.3.3

  • runc v1.4.0-rc.3

解決方案

ACK Edge在containerd 1.6.39版本對此漏洞進行了修複,請儘快升級到該版本。

雲端節點池

參見containerd運行時發布記錄,儘快升級叢集運行時至已修複版本。具體操作及注意事項,請參見升級節點池

邊緣節點池

重要
  • 為確保系統穩定性,建議將節點分批次修複,避免一次性同時處理全部節點。

  • 本操作只針對運行時為Containerd的邊緣節點池,如果邊緣節點池的運行時為Docker,則需要建立運行時為Containerd的邊緣節點池,並將節點遷移到新的節點池。

步驟一:修改節點池的運行時配置

修改邊緣節點池配置後,建立節點都將使用更高版本的containerd運行時,避免相關漏洞。

  1. 開啟修改節點池配置的API。

  2. 填寫如下參數,其他參數保持預設:

    1. ClusterId:叢集ID。

    2. NodepoolId:需要修改配置的邊緣節點池ID。

    3. runtime_version:容器運行時版本,設定為1.6.39。

  3. 發起API調用。

步驟二:手動升級現有節點的containerd版本

節點排水

在需要升級的目標邊緣節點上執行節點排水,把該節點上的Pod遷移到其他可用節點:

  1. 將下方命令中的<NODE_NAME>替換為節點名稱後,執行命令,將目標節點設定為不可調度狀態:

    kubectl cordon <NODE_NAME>
  2. 進行節點排水:

    kubectl drain <NODE_NAME> --grace-period=120 --ignore-daemonsets=true
在目標節點執行修複
  1. 登入目標邊緣節點,在節點上執行下列修複操作。

    1. 配置REGIONINTERCONNECT_MODE環境變數:

      export REGION="cn-hangzhou"  INTERCONNECT_MODE="basic";  # 將 “cn-hangzhou” 和 “basic” 替換為真實配置。

      參數

      說明

      REGION

      叢集所在地區的Region ID。ACK Edge叢集支援的地區及其Region ID,請參見開服地區

      INTERCONNECT_MODE

      節點的接入網路類型

      • basic:公網接入。

      • private:私網接入。

    2. 執行下方指令碼修複漏洞。

      #!/bin/bash
      set -e -x
      
      # parameter
      if [[ $REGION == "" ]];then
          echo "Error: REGION is null"
          exit 1
      fi
      
      if [[ $INTERCONNECT_MODE == "" ]]; then
         echo "Error: INTERCONNECT_MODE is null"
         exit 1
      fi
      
      if containerd --version | grep -q "1.6.39"; then
         echo "No need to upgrade current containerd(1.6.39)"
         exit 0
      fi
      
      export OS_ARCH=amd64
      case $(uname -m) in
      "sw_64")
          export OS_ARCH=sw64
          ;;
      "x86_64")
          export OS_ARCH=amd64
          ;;
      "arm64")
          export OS_ARCH=arm64
          ;;
      "aarch64")
          export OS_ARCH=arm64
          ;;
      *)
          echo "unknown arch $(uname -a), default to amd64 "
          ;;
      esac
      
      INTERNAL=$( [ "$INTERCONNECT_MODE" = "private" ] && echo "-internal" || echo "" )
      SERVER="http://aliacs-k8s-${REGION}.oss-${REGION}${INTERNAL}.aliyuncs.com"
      
      if grep -q -E "Ubuntu|Debian" /etc/os-release; then
          export PKG_MGR="-deb"
      else
          export PKG_MGR=""
      fi
      
      CONTAINERD_VERSION="1.6.39"
      CONTAINERD_PACKAGE_URL="$SERVER/public/pkg/containerd${PKG_MGR}/containerd${PKG_MGR}-${CONTAINERD_VERSION}-linux-${OS_ARCH}.tar.gz"
      wget $CONTAINERD_PACKAGE_URL -O /tmp/containerd.tar.gz
      mkdir -p /tmp/containerd
      tar xf /tmp/containerd.tar.gz -C /tmp/containerd
      
      
      if [[ $PKG_MGR == "-deb" ]]; then
          apt install -y /tmp/containerd/pkg/containerd-deb/$CONTAINERD_VERSION/deb/*.deb
      else
          yum localinstall -y /tmp/containerd/pkg/containerd/$CONTAINERD_VERSION/rpm/* 
      fi
      
      systemctl restart containerd
      
      echo "succeeded to upgrade containerd"
    3. 如果輸出如下內容,表明當前節點環境不存在CVE漏洞,機器上未執行任何變更,無需進行後續操作:

      No need to upgrade current containerd(1.6.39)

      輸出如下內容,表示該節點環境存在漏洞且已被修複:

      succeeded to upgrade containerd
節點上線

將下方命令中的<NODE_NAME>替換為節點名稱後,執行命令,將節點設定為可調度狀態:

kubectl uncordon <NODE_NAME>

無法升級時的臨時方案

如果暫時無法執行升級操作,可採用以下措施來降低風險:

  • 使用 rootless 容器:

    rootless 模式下,runc 將以非 root 的低許可權身份運行,可有效阻止大多數針對宿主機 procfs 檔案的惡意寫入攻擊。

  • 限制使用可信鏡像:

  • 加固 LSM 策略:

    若正在使用 AppArmor 或 SELinux,請確保安全性原則已覆蓋關鍵系統路徑,限制不必要的訪問。但 CVE-2025-52881 仍可能繞過部分 LSM 保護,建議及時升級運行時版本。