Mô tả
libcurl có chức năng pin cert khóa PubKey máy chủ cho HTTPS transfer. libcurl không thực hiện kiểm tra khóa công khai của chứng chỉ máy chủ (public key pinning) trong trường hợp dùng QUIC/HTTP3, khi TLS backend là wolfSSL.
Cơ chế
Khái niệm
Certificate pinning là một cơ chế bảo mật được dùng để xác thực kết nối giữa client và server
Mục tiêu chính của certificate pinning là:
- Chống tấn công man-in-the-middle (MITM): Kẻ tấn công không thể chèn vào giữa phiên kết nối để giả mạo server.
- Đảm bảo rằng client chỉ kết nối với đúng server đáng tin cậy, bằng cách lưu trữ sẵn trong ứng dụng một bản sao của public key hoặc certificate của server.
Hoạt động
-
Xác thực tiêu chuẩn (Standard TLS validation):
Khi client kết nối đến server, server gửi certificate cho client. Client sẽ kiểm tra xem:
- Kiểm tra CA có hợp lệ không.
- Kiểm tra chữ ký, ngày hết hạn.
- Có thể kiểm tra public key (nếu có pinning).
-
Pinning trust (ghim lòng tin): Ngoài việc kiểm tra CA, client có thể được cấu hình sẵn để chỉ tin những certificate cụ thể hoặc public key cụ thể. Nếu certificate từ server không trùng khớp với cái đã pin, kết nối sẽ bị từ chối – ngay cả khi nó hợp lệ về mặt CA.
Trong trường hợp cụ thể là CVE-2025-5025
- Nếu client app dùng certificate pinning, nghĩa là: Ứng dụng sẽ so khớp certificate hoặc public key cụ thể của server.
- Khi attacker dùng một certificate giả (dù hợp lệ về mặt CA), pinning sẽ phát hiện ra sai khác → ngăn chặn kết nối.
- Nhưng trong lỗ hổng này: libcurl không kiểm tra public key, nên pinning không có tác dụng nếu phụ thuộc vào libcurl.
Khi nào certificate pinning được kiểm tra trong libcurl
Khi client dùng --pinnedpubkey, libcurl sẽ thực hiện:
- Lấy public key từ chứng chỉ server khi bắt tay TLS.
- So sánh với nội dung trong file pinned key (
pinnedkey.pem).
- Nếu khớp → kết nối tiếp tục.