Argo CD ServerSideDiff làm lộ dữ liệu Kubernetes Secret qua annotation

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-2026-45737 là gì?

Lỗ hổng CVE-2026-45737 là lỗ hổng thuộc các loại Exposure of Sensitive Information to an Unauthorized Actor và Improper Removal of Sensitive Information Before Storage or Transfer, ảnh hưởng tới argo-cd (phiên bản bị ảnh hưởng: >= 3.2.0, < 3.2.12, >= 3.3.9, < 3.3.10 và các phiên bản bị ảnh hưởng khác). Lỗ hổng này được xếp hạng ở mức Trung bình, với điểm CVSS 6.5. Lỗ hổng này đã có mã hoặc bằng chứng khai thác công khai, nhưng điều đó chưa xác nhận việc khai thác trong thực tế.

Giới thiệu chung

Dữ liệu gốc

Argo CD là công cụ continuous delivery theo mô hình khai báo và GitOps cho Kubernetes. Trong khoảng từ 3.2.0 đến trước các bản 3.2.12, 3.3.10 và 3.4.2, Argo CD ServerSideDiff có thể làm lộ các giá trị Kubernetes Secret được nhúng trong annotation kubectl.kubernetes.io/last-applied-configuration vì HideSecretData(target, live,...) không làm sạch đầy đủ các đối tượng Secret live được dự đoán trong ResourceDiff.TargetState và LiveState, cho phép dữ liệu nhạy cảm, stringData và annotations xuất hiện trong các diff trên UI hoặc CLI. Vấn đề này được khắc phục trong các phiên bản 3.2.12, 3.3.10 và 3.4.2.

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

  • Package Argo CD github.com/argoproj/argo-cd/v3 thuộc nhánh 3.2: bị ảnh hưởng từ 3.2.0 đến 3.2.11; bản sửa là 3.2.12.
  • Nhánh 3.3: bị ảnh hưởng từ 3.3.0-rc1 đến 3.3.9; bản sửa là 3.3.10.
  • Nhánh 3.4: bị ảnh hưởng từ 3.4.0-rc1 đến 3.4.1; bản sửa là 3.4.2.
  • Advisory của nhà cung cấp bao gồm cả các bản pre-release được liệt kê ở trên. Trạng thái của các nhánh khác không được bằng chứng hiện có xác nhận.

Chi tiết kỹ thuật

Argo CD ServerSideDiff tạo ResourceDiff.TargetState và LiveState từ kết quả server-side dry-run của Kubernetes. Một Secret live được dự đoán có thể giữ lại annotation kubectl.kubernetes.io/last-applied-configuration, trong đó có thể chứa manifest JSON khi Secret trước đó được tạo hoặc cập nhật bằng client-side apply. Luồng che giấu dữ liệu gọi HideSecretData(target, live, ...), nhưng chỉ ghi đè annotation trên đối số live; đối số thứ nhất có thể là predictedLive và vẫn giữ annotation chưa được làm sạch. Vì vậy, dữ liệu Secret thô, stringData và các annotation nhạy cảm có thể lọt vào kết quả diff hiển thị trên UI hoặc CLI. Điều kiện khai thác gồm một Kubernetes Secret có annotation liên quan và một principal đã xác thực có quyền yêu cầu hoặc xem application diff; bằng chứng hiện có không xác định đầy đủ mọi tổ hợp RBAC. Bản sửa loại bỏ annotation khỏi cả hai phía so sánh và áp dụng việc che giấu dữ liệu đối xứng cho các Secret.

Khả năng khai thác

  • Chức năng bị ảnh hưởng có thể được truy cập qua Argo CD ServerSideDiff và được thể hiện trong application diff trên UI hoặc CLI.
  • Cần có xác thực: advisory xác định nhóm bị ảnh hưởng là người dùng Argo CD đã xác thực có thể xem application diff.
  • Bản ghi chuẩn chỉ ra khả năng truy cập qua mạng, yêu cầu một mức đặc quyền hiện có và không cần tương tác người dùng. Tuy nhiên, việc khai thác thực tế còn phụ thuộc vào Secret có annotation phù hợp và ServerSideDiff được sử dụng.
  • Advisory của nhà cung cấp có kèm public proof of concept. Bằng chứng được cung cấp không nêu chiến dịch, nạn nhân hoặc việc khai thác cụ thể trong thực tế.

Tác động kỹ thuật

Tác động kỹ thuật đã được xác nhận là tiết lộ giá trị Kubernetes Secret cho một người dùng đã xác thực nhưng không nhất thiết được phép xem các giá trị đó. Con đường tiết lộ đi qua kết quả ServerSideDiff và có thể xuất hiện trong cả UI lẫn CLI diff. Nếu Secret value bị lộ vẫn có thể dùng được, hậu quả có thể mở rộng sang truy cập trái phép vào dịch vụ hoặc tài nguyên được bảo vệ bởi Secret đó, tùy thuộc vào cách tổ chức sử dụng giá trị. Advisory mô tả tác động đọc dữ liệu và không ghi nhận khả năng sửa đổi Secret, thay đổi cấu hình hoặc làm suy giảm tính sẵn sàng.

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

Người dùng Argo CD đã xác thực có quyền xem application diff có thể nhìn thấy các giá trị Secret mà hệ thống dự định che giấu. Dữ liệu bị lộ có thể bao gồm nội dung Secret nằm trong annotation, stringData và các annotation nhạy cảm, chẳng hạn credential hoặc token nếu chúng được lưu ở đó. Nếu các giá trị này còn có thể sử dụng, tổ chức có thể phải xoay vòng bí mật, rà soát quyền truy cập và điều tra tác động đến các hệ thống phụ thuộc. Tác động được ghi nhận là mất tính bí mật; bằng chứng hiện có không mô tả việc sửa đổi dữ liệu hoặc làm gián đoạn dịch vụ.

Cách khắc phục

  1. Nâng cấp theo đúng nhánh đang triển khai: nhánh 3.2 lên 3.2.12, nhánh 3.3 lên 3.3.10, hoặc nhánh 3.4 lên 3.4.2. Không suy ra rằng bản sửa của một nhánh bao phủ các nhánh song song khác.
  2. Nếu đang dùng 3.2.12, hãy lập kế hoạch chuyển sang nhánh còn được hỗ trợ vì trang phát hành đánh dấu dòng 3.2 là đã hết vòng đời.
  3. Rà soát các diff đã được hiển thị trước khi nâng cấp. Nếu xác nhận Secret value có thể đã xuất hiện, hãy xoay vòng các credential, token hoặc khóa liên quan và đánh giá các hệ thống sử dụng chúng.
  4. Bằng chứng hiện có nêu các bản phát hành đã sửa thay vì một workaround riêng. Không nên thay thế việc nâng cấp bằng một thay đổi cấu hình chưa được nhà cung cấp xác nhận.

Cách phát hiện

  1. Kiểm kê các phiên bản Argo CD Server và CLI, sau đó đối chiếu từng instance với các nhánh bị ảnh hưởng trong affected_summary.
  2. Rà soát Application có ServerSideDiff=true hoặc hoạt động vận hành sử dụng argocd app diff --server-side-diff.
  3. Xác định Kubernetes Secret có annotation kubectl.kubernetes.io/last-applied-configuration, đặc biệt các Secret từng được tạo hoặc cập nhật bằng client-side apply. Kiểm tra trong môi trường kiểm soát truy cập xem annotation có chứa manifest tuần tự hóa, data, stringData hoặc annotation nhạy cảm hay không.
  4. Rà soát lịch sử diff trên UI và CLI để tìm giá trị Secret chưa được che giấu trong kubectl.kubernetes.io/last-applied-configuration. Không sao chép giá trị phát hiện được vào ticket hoặc log mới.
  5. Như một biện pháp phòng ngừa, xem xét audit hoặc access records của những người dùng có quyền xem application diff. Việc không tìm thấy log phù hợp không chứng minh rằng dữ liệu không bị lộ.
Nguồn (18)
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.