Lỗi xác thực header SigV4 của MinIO cho phép presigned PUT đọc vượt quyền

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

Lỗ hổng CVE-2026-97731 là lỗ hổng Improper Verification of Cryptographic Signature ảnh hưởng tới MinIO (phiên bản bị ảnh hưởng: ≤ 7aac2a2c5b7c882e68c1ce017d8256be2feea27f). Lỗ hổng này được xếp hạng ở mức Cao, với điểm CVSS 7.1. Hiện chưa đủ dữ liệu để xác định lỗ hổng này đã bị khai thác hay chưa.

Giới thiệu chung

Dữ liệu gốc

MinIO đến hết 7aac2a2 không xác minh rằng mọi header x-amz-* xuất hiện trong một request cũng xuất hiện trong danh sách X-Amz-SignedHeaders do client cung cấp. extractSignedHeaders() trong cmd/signature-v4-utils.go chỉ lặp qua danh sách được khai báo và không bao giờ liệt kê các header thực tế đã đến, do đó một header được gửi nhưng không được ký vừa không được băm vào canonical request vừa không bị từ chối. Vì cmd/api-router.go phân phối CopyObject chỉ dựa trên sự hiện diện của x-amz-copy-source, người giữ một presigned PUT URL bị giới hạn cho một object có thể thêm header đó vào URL không thay đổi và khiến server thực hiện server-side copy, dưới danh nghĩa signer, đối với bất kỳ object nào mà signing key có thể đọc. Một quyền cấp để ghi một object trở thành quyền đọc mọi bucket mà key đó có thể truy cập. Amazon S3 từ chối request tương đương bằng HTTP 403 AccessDenied. GitHub repository minio/minio đã được archive vào tháng 4 năm 2026; pgsty/silo trước 1233254 cũng bị ảnh hưởng.

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

  • MinIO: bị ảnh hưởng qua commit 7aac2a2, theo ranh giới version Git được cung cấp. Bản ghi không xác định một upstream release cụ thể đã sửa lỗi.
  • pgsty/silo: các bản trước commit 1233254 bị ảnh hưởng. Commit 1233254 là bản sửa được tham chiếu cho việc từ chối các header x-amz-* chưa được ký; ánh xạ của commit này tới một số hiệu release cụ thể chưa được xác lập.
  • Repository GitHub minio/minio đã được archive vào tháng 4 năm 2026, vì vậy việc xác định trạng thái sửa lỗi upstream cần dựa trên build hoặc fork thực tế đang được triển khai, không chỉ dựa vào tên sản phẩm.

Chi tiết kỹ thuật

Lỗi nằm trong quá trình xác minh phạm vi bao phủ của chữ ký SigV4. extractSignedHeaders() trong cmd/signature-v4-utils.go chỉ duyệt danh sách X-Amz-SignedHeaders do client khai báo, nhưng không đối chiếu danh sách đó với toàn bộ header x-amz-* thực tế đã đến server. Vì vậy, một header x-amz-* chưa được ký có thể không được đưa vào canonical request và cũng không bị từ chối.

cmd/api-router.go chọn luồng CopyObject chỉ dựa trên sự hiện diện của x-amz-copy-source. Do đó, một presigned PUT URL vốn chỉ cho phép ghi một object có thể bị sử dụng cùng với header chưa ký này để yêu cầu server thực hiện server-side copy dưới quyền của signer. Kết quả là quyền ghi bị giới hạn có thể trở thành khả năng đọc các object khác mà signing key có quyền đọc. Commit sửa lỗi của pgsty/silo bổ sung kiểm tra header chưa ký cho cả presigned signature và Authorization-header signature; X-Amz-Content-Sha256 và X-Amz-Signature-Age được xử lý như các ngoại lệ riêng theo logic xác minh. Chi tiết về các nhánh upstream MinIO đã phát hành bản sửa hay chưa không được xác lập trong bằng chứng hiện có.

Khả năng khai thác

Lỗi có thể bị khai thác qua mạng khi kẻ tấn công sở hữu một presigned PUT URL hợp lệ. Điều kiện chính là URL được tạo cho một object đích nhưng signing key vẫn có quyền đọc các object hoặc bucket khác.

  • Độ phức tạp được mô tả là thấp và không cần user interaction sau khi URL được cấp.
  • Việc khai thác không cần sửa chữ ký hoặc tạo lại URL; header x-amz-copy-source được thêm vào request nhưng không có trong danh sách header đã ký.
  • Kết quả được thực thi dưới quyền của signer, không phải dưới quyền độc lập của người gửi request.
  • Bản ghi hiện có không xác lập việc lỗ hổng đã bị khai thác thực tế hoặc đã có public exploit. Sự thiếu vắng thông tin này không chứng minh rằng chưa từng có khai thác.

Tác động kỹ thuật

Lỗ hổng cho phép request được xác thực như một PUT hợp lệ nhưng lại được router xử lý như CopyObject khi request có x-amz-copy-source. Việc sao chép được thực hiện dưới quyền của signer, nên khả năng đọc của signing key quyết định phạm vi dữ liệu có thể bị truy cập.

  • Confidentiality: có thể cao nếu key đọc được nhiều bucket hoặc dữ liệu nhạy cảm.
  • Integrity: có thể bị ảnh hưởng do attacker tạo hoặc ghi đè bản sao trong object đích mà presigned URL cho phép.
  • Privilege boundary: quyền ghi một object có thể bị biến thành quyền đọc các object khác mà signer truy cập được.
  • Availability: bằng chứng hiện có không cho thấy tác động trực tiếp đến tính sẵn sàng.

Amazon S3 từ chối request tương đương bằng HTTP 403 AccessDenied, cho thấy hành vi của MinIO khác với kiểm tra header được mô tả trong dịch vụ tham chiếu. Phạm vi thực tế vẫn phụ thuộc vào policy, bucket và signing key cụ thể.

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

Lỗ hổng phá vỡ mục tiêu giới hạn thường có của presigned PUT URL. Một URL được cấp cho việc tải lên một object có thể cho phép người giữ URL khiến server sao chép dữ liệu từ các object khác mà signing key có quyền đọc.

  • Dữ liệu trong nhiều bucket hoặc tenant có thể bị lộ nếu signing key có phạm vi đọc rộng.
  • Các bản sao object ngoài dự kiến có thể được tạo trong vùng ghi mà URL cho phép, làm sai lệch dữ liệu hoặc quy trình xử lý downstream.
  • Ranh giới giữa quyền upload và quyền đọc bị suy yếu, đặc biệt trong các hệ thống cấp URL cho ứng dụng hoặc người dùng không tin cậy.
  • Mức độ ảnh hưởng thực tế phụ thuộc vào quyền đọc của signing key và việc các endpoint S3 bị ảnh hưởng có được công khai hay không.

Cách khắc phục

  1. Với pgsty/silo, triển khai một build có chứa commit 1233254. Bản sửa này kiểm tra mọi request header x-amz-* và từ chối header không có trong tập header đã ký, trên cả presigned signature và Authorization-header signature.
  2. Với MinIO upstream, xác định chính xác commit hoặc build đang chạy. Bản ghi hiện có chỉ xác nhận phạm vi bị ảnh hưởng đến 7aac2a2 và không cung cấp một upstream release cụ thể làm mốc sửa lỗi, vì vậy không nên giả định rằng một phiên bản mới hơn chưa được xác minh đã an toàn.
  3. Trong thời gian chưa thể nâng cấp, thu hồi hoặc làm hết hạn các presigned PUT URL còn tồn tại có thể bị ảnh hưởng, đặc biệt các URL do signing key có quyền đọc nhiều bucket cấp ra.
  4. Giảm quyền đọc của signing principal xuống đúng phạm vi cần thiết cho từng workflow. Đây là biện pháp giảm rủi ro tạm thời, không thay thế cho bản sửa xác minh chữ ký.
  5. Rà soát các object được tạo qua các workflow presigned PUT và các hoạt động CopyObject bất thường để đánh giá khả năng đã xảy ra sao chép ngoài dự kiến.

Cách phát hiện

Thực hiện các kiểm tra sau:

  1. Lập inventory các server MinIO và Silo đang chạy, sau đó đối chiếu build với ranh giới ảnh hưởng của MinIO và commit sửa 1233254 của pgsty/silo.
  2. Xác định các luồng phát hành presigned PUT URL mà signing principal có quyền đọc rộng hơn object đích, đặc biệt khi quyền đọc bao phủ nhiều bucket.
  3. Rà soát audit log hoặc request log, nếu có, để tìm các hoạt động CopyObject phát sinh trong quy trình presigned PUT và các request có x-amz-copy-source nhưng không nằm trong tập header đã ký.
  4. Kiểm tra các URL còn hiệu lực và quyền của signing key. Đây là biện pháp đánh giá phạm vi phơi nhiễm, không phải một IOC đã được xác nhận.

Không nên coi việc không thấy log liên quan là bằng chứng hệ thống an toàn, vì bản ghi không cung cấp định dạng log hoặc indicator cụ thể để loại trừ khai thác.

Nguồn (6)
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.

Khám phá các giải pháp khác liên quan