Kubernetes kube-apiserver bỏ qua NetworkPolicy do race condition khi xóa namespace

Lưu ý: Dữ liệu này chỉ có tính chất tham khảo, phục vụ nghiên cứu an ninh mạng.CyStack khuyến nghị người dùng không sử dụng các thông tin này nhằm các mục đích bất hợp pháp

Lỗ hổng CVE-2024-7598 là gì?

Lỗ hổng CVE-2024-7598 là lỗ hổng Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition') ảnh hưởng tới kube-apiserver (phiên bản bị ảnh hưởng: 1.3.0). Lỗ hổng này được xếp hạng ở mức Thấp, với điểm CVSS 3.1. Các nguồn hiện có chưa ghi nhận lỗ hổng này bị khai thác.

Giới thiệu chung

Dữ liệu gốc

Đã phát hiện một vấn đề bảo mật trong Kubernetes, trong đó một pod độc hại hoặc bị xâm nhập có thể vượt qua các hạn chế mạng được thực thi bởi các network policy trong quá trình xóa namespace. Thứ tự xóa các object trong khi namespace kết thúc không được xác định, và network policy có thể bị xóa trước các pod mà chúng bảo vệ. Điều này có thể tạo ra một khoảng thời gian ngắn trong đó các pod vẫn đang chạy, nhưng các network policy lẽ ra phải áp dụng cho các kết nối đến và đi từ các pod đó lại không được thực thi.

Sản phẩm và phạm vi ảnh hưởng

  • Advisory của Kubernetes xác định các kube-apiserver >= v1.3 là có thể bị ảnh hưởng khi cluster dựa vào NetworkPolicy API.
  • Bản ghi cấu trúc được cung cấp đánh dấu 1.3.0 là affected và đặt default status là unaffected, nhưng không liệt kê đầy đủ trạng thái của từng nhánh phát hành sau đó. Do advisory của CNA nêu phạm vi >= v1.3, nên không nên coi các nhánh mới hơn là an toàn nếu chưa được kiểm tra riêng.
  • Kubernetes advisory ghi rõ không có fixed version. Bản ghi đầu vào đặt patch_available là true nhưng không cung cấp solution hoặc release sửa lỗi cụ thể, vì vậy chưa thể xác nhận một phiên bản nâng cấp nào đã khắc phục hoàn toàn lỗi này.
  • Advisory chỉ ra ordered namespace deletion enhancement là hướng sửa chữa dài hạn, không phải một fixed release được xác nhận cho lỗi này.

Chi tiết kỹ thuật

Kubernetes kube-apiserver có lỗi race condition trong quá trình kết thúc namespace. Thứ tự xóa object khi namespace bị terminating không được xác định, vì vậy các network policy có thể bị xóa trước những pod mà chúng bảo vệ.

Luồng xảy ra ở mức khái quát:

  1. Cluster sử dụng NetworkPolicy API và bắt đầu xóa một namespace.
  2. Một hoặc nhiều network policy bị xóa trong khi các pod hoặc workload resource vẫn đang chạy.
  3. Trong khoảng thời gian ngắn đó, các policy lẽ ra áp dụng cho kết nối đến và đi từ pod không còn được thực thi.
  4. Pod độc hại hoặc bị xâm nhập có thể tận dụng khoảng thời gian này để vượt qua các hạn chế mạng.

Bản ghi mô tả khả năng tiếp cận từ mạng lân cận, không yêu cầu user interaction và gắn lỗi với CWE-362. Tuy nhiên, thời điểm chính xác của race window, loại traffic có thể lọt qua và phạm vi ảnh hưởng cụ thể phụ thuộc vào cách cluster triển khai network policy; các chi tiết này không được advisory xác định.

Khả năng khai thác

Điều kiện khai thác có liên quan đến một pod độc hại hoặc đã bị xâm nhập trong cluster sử dụng NetworkPolicy API, cùng với thời điểm namespace đang bị xóa. Bản ghi đánh giá khả năng tiếp cận là từ mạng lân cận và độ phức tạp cao do phụ thuộc vào timing của quá trình xóa; không có user interaction được yêu cầu trong mô hình đánh giá.

Bản ghi cũng liệt kê không cần privileges, nhưng advisory mô tả tác nhân là một pod độc hại hoặc bị xâm nhập. Vì vậy, vị trí thực tế của tác nhân trong cluster cần được xem xét riêng thay vì suy ra chỉ từ trường đánh giá.

Không có public exploit nào được xác định trong dữ liệu được cung cấp. Dữ liệu enrichment được tra cứu đánh dấu exploitation là none và automatable là no, nhưng điều này không chứng minh rằng mọi cluster đều chưa từng bị khai thác. Không có campaign, nạn nhân hoặc exploit cụ thể nào được nguồn xác nhận.

Tác động kỹ thuật

Tác động kỹ thuật trực tiếp là làm mất hiệu lực tạm thời của các NetworkPolicy áp dụng cho pod trong namespace đang bị xóa. Pod độc hại hoặc bị xâm nhập có thể dùng khoảng thời gian này để tạo hoặc nhận các kết nối vốn phải bị policy hạn chế, dẫn đến khả năng mất tính bảo mật trong phạm vi cluster bị ảnh hưởng.

Bản ghi không xác nhận thay đổi tính toàn vẹn hoặc tính sẵn sàng của hệ thống. Phạm vi ảnh hưởng phụ thuộc vào timing, các pod còn chạy và những policy đang bảo vệ chúng; không phải mọi namespace deletion đều tạo ra cùng một traffic exposure.

Tác động đến tổ chức

Trong thời gian namespace termination, pod vẫn có thể chạy khi các network policy bảo vệ nó đã bị xóa. Điều này có thể cho phép các kết nối vốn bị hạn chế được thực hiện, dẫn đến phơi nhiễm dữ liệu hoặc dịch vụ trong phạm vi policy bị mất hiệu lực.

Ảnh hưởng phụ thuộc vào pod, policy và traffic tồn tại đúng trong khoảng thời gian race window. Nguồn không xác nhận việc sửa đổi dữ liệu, gián đoạn dịch vụ, exfiltration cụ thể hoặc một sự cố đã xảy ra.

Cách khắc phục

  1. Giảm thiểu ngay: trước khi bắt đầu namespace deletion, chủ động xóa các pod và workload resource điều phối các pod đó.

  2. Duy trì policy trong quá trình xóa: thêm finalizer vào network policy để ngăn policy bị xóa trước các pod mà policy bảo vệ. Kubernetes advisory đề cập đến một proof-of-concept controller có thể tự động hóa cách làm này, nhưng không xác nhận đây là bản vá hoàn chỉnh.

  3. Đánh giá kế hoạch sửa dài hạn: theo dõi triển khai ordered namespace deletion enhancement của Kubernetes. Advisory không nêu fixed release, vì vậy không nên coi một phiên bản cụ thể là đã khắc phục nếu chưa có xác nhận trực tiếp từ vendor.

  4. Kiểm tra lại sau thay đổi: xác nhận các pod và workload resource được xóa trước network policy trong quy trình namespace termination, đồng thời rà soát network log quanh các lần xóa namespace.

  5. Nếu tổ chức đang dùng bản phân phối Kubernetes hoặc sản phẩm downstream, đối chiếu advisory của nhà cung cấp đó để xác định trạng thái hỗ trợ và bản sửa riêng. Không suy ra trạng thái an toàn chỉ từ việc bản ghi đánh dấu có patch available.

Cách phát hiện

  1. Kiểm tra cluster có sử dụng NetworkPolicy API hay không bằng lệnh được Kubernetes advisory nêu:

kubectl get networkpolicies.networking.k8s.io --all-namespaces

  1. Lập inventory các kube-apiserver đang chạy và xác định những cluster có NetworkPolicy resource, đặc biệt các cluster thường xuyên xóa namespace.

  2. Rà soát quy trình xóa namespace để xác định pod và workload resource có được xóa trước khi bắt đầu namespace deletion hay không.

  3. Kiểm tra các NetworkPolicy resource có cơ chế finalizer nhằm trì hoãn việc xóa policy cho đến khi các pod được bảo vệ đã bị xóa hay không. Advisory không nêu tên một finalizer cụ thể.

  4. Rà soát network log quanh thời điểm namespace termination để tìm các kết nối đến hoặc đi từ pod trong khoảng thời gian policy không còn được áp dụng. Đây là biện pháp phát hiện phụ thuộc môi trường, không phải IOC đặc hiệu; không có log bất thường không chứng minh cluster an toàn.

Nguồn (27)
Tìm hiểu thêm

Kiểm tra chuyên sâu cùng giải pháp quản lý rủi ro Web toàn diện

Giải pháp CyStack VulnScan liên tục phát hiện tài sản, xác minh lỗ hổng và giúp đội ngũ bảo mật ưu tiên khắc phục cho toàn bộ doanh nghiệp.