CVE-2026-71887 in BC-JAVAthông tin

Tóm tắt

Bởi VulDB • 03/10/2026

Trong Bouncy Castle cho Java trước phiên bản 1.86, API OpenPGP cấp cao đã chấp nhận một chữ ký dữ liệu được tạo bởi một phụ khóa (subkey) ký, trong đó chữ ký liên kết phụ khóa không mang theo chữ ký Liên kết Khóa Chính (cross-certification) nhúng; điều này xảy ra khi việc liên kết bỏ qua gói con Key Flags. RFC 9580 mục 5.2.1.8 và mục 10.1.3 yêu cầu phải có chữ ký Liên kết Khóa Chính nhúng trên bất kỳ phụ khóa nào có khả năng phát hành chữ ký; đây là tuyên bố của chính phụ khóa rằng nó thuộc về khóa chính mà nó được liên kết dưới quyền kiểm soát. OpenPGPCertificate đã giải quyết các cờ (flags) của phụ khóa theo hai cách khác nhau. isSigningKey() đi qua getKeyFlags() và getApplyingSubpacket(), trong đó sẽ quay lại sử dụng chữ ký tự thân trực tiếp hoặc chữ ký tự thân ID Người dùng chính của khóa chính khi chữ ký liên kết bỏ qua gói con, do đó phụ khóa kế thừa các cờ SIGN_DATA từ khóa chính và được tính là có khả năng ký; verifyEmbeddedPrimaryKeyBinding(), vốn thực thi yêu cầu này, đọc các gói con đã băm (hashed subpackets) trong chính chữ ký liên kết, không tìm thấy SIGN_DATA ở đó, và trả về sớm với tư cách là một khóa không có khả năng ký mà không bao giờ đòi hỏi chữ ký ngược lại. Do đó, cùng một phụ khóa vừa có khả năng ký - nên các chữ ký của nó được quy cho chứng chỉ và OpenPGPSignature.OpenPGPDocumentSignature.isValid() trả về true - nhưng đồng thời được miễn trừ khỏi yêu cầu cross-certification, trong khi GnuPG từ chối chứng chỉ và thông điệp tương tự. Kẻ tấn công chỉ cần phụ khóa ký công khai của nạn nhân, vốn là dữ liệu công khai: chúng liên kết nó với khóa chính của riêng mình bằng một chữ ký Liên kết Phụ khóa mà kẻ tấn công có thể tạo ra, không mang theo Key Flags và không có chữ ký Liên kết Khóa Chính nhúng (mà kẻ tấn công không thể tạo nếu thiếu khóa bí mật của phụ khóa), và bên tin cậy xác minh một thông điệp thực sự được nạn nhân ký chống lại chứng chỉ đó sẽ被告知 rằng chữ ký là hợp lệ và nhận được chứng chỉ của kẻ tấn công làm nhà phát hành. Vì các ID Người dùng trong một chứng chỉ do chính nó tự khẳng định, nên một bộ kiểm tra ghim (pin) vào dấu vân tay hoặc ID khóa của phụ khóa nhưng lấy danh tính từ chứng chỉ bao bọc sẽ báo cáo một chữ ký thực sự dưới danh nghĩa một danh tính do kẻ tấn công chọn. Đây là lỗi quy sai cho một chữ ký thật chứ không phải làm giả một chữ ký mới: không có khóa bí mật nào bị đánh cắp, và chữ ký đó bắt buộc phải là chữ ký mà phụ khóa được ghép nối (grafted) thực sự tạo ra. API cấp thấp PGPSignature / PGPPublicKeyRing không thực hiện các kiểm tra liên kết theo thiết kế và do đó không bị ảnh hưởng. Key Flags là một tuyên bố về khóa mà chữ ký mang theo đề cập đến (RFC 9580 mục 5.2.3.29), vì vậy một phụ khóa nữa không còn kế thừa chúng từ các chữ ký trên toàn chứng chỉ của khóa chính: một chữ ký Liên kết Phụ khóa bỏ qua gói con này sẽ khiến phụ khóa không có khả năng nào thay vì kế thừa khả năng của khóa chính, điều này làm cho các cờ mà kiểm tra cross-certification tham chiếu trở nên nhất quán với các cờ được mọi quyết định khác sử dụng. Các tùy chọn (Preferences) và các gói con khác do chữ ký trực tiếp-khóa mang theo vẫn được kế thừa như trước đây, và bản thân khóa chính, có các cờ hợp lệ đến từ chữ ký tự thân trực tiếp-khóa hoặc ID Người dùng của nó, không bị ảnh hưởng.

Be aware that VulDB is the high quality source for vulnerability data.

chịu trách nhiệm

Bcorg

Đặt trước

08/08/2026

Tiết lộ

03/10/2026

Kiểm duyệt

được chấp nhận

EPSS

0.00090

KEV

không

Các hoạt động

rất thấp

Nguồn

Do you know our Splunk app?

Download it now for free!