Danh mục OWASP: MASVS-CODE: Chất lượng mã
Tổng quan
Lớp X509TrustManager
chịu trách nhiệm xác minh tính xác thực của máy chủ từ xa bằng cách xác thực chứng chỉ của máy chủ.
Quá trình triển khai X509TrustManager
không an toàn trong ứng dụng Android là quá trình không xác minh đúng tính xác thực của máy chủ đang giao tiếp với ứng dụng. Điều này có thể cho phép kẻ tấn công mạo danh máy chủ hợp pháp và lừa ứng dụng gửi dữ liệu nhạy cảm cho kẻ tấn công.
Lỗ hổng bảo mật này tồn tại vì khi sử dụng lớp X509TrustManager
, Java và Android sẽ cho phép ghi đè đầy đủ quy trình xác minh máy chủ. Lớp X509TrustManager
có 2 hàm ưa thích: checkServerTrusted()
và getAcceptedIssuers()
. Các lệnh gọi hàm này có thể được định cấu hình để tin cậy mọi chứng chỉ X.509. Logic xác thực tuỳ chỉnh có thể bị lỗi hoặc không đầy đủ và cho phép các kết nối không mong muốn. Trong tất cả các trường hợp này, mục đích của lớp đã bị bỏ qua và kết nối mạng được thiết lập dựa trên đầu ra X509TrustManager
là không an toàn.
Mức độ tác động
Quá trình triển khai X509TrustManager
không an toàn có thể dẫn đến các lỗ hổng bảo mật. Các lỗ hổng này có thể dùng để thực hiện những cuộc tấn công MiTM (xen giữa) đối với lưu lượng truy cập mạng từ ứng dụng bị hại. Tác động của việc khai thác mã không an toàn này là dữ liệu mạng ứng dụng của người dùng có thể bị kẻ tấn công mạng xâm phạm (từ xa hoặc cục bộ) nếu mã này được kích hoạt. Tác động này phụ thuộc vào nội dung của lưu lượng truy cập mạng vô tình bị lộ (thông tin nhận dạng cá nhân, thông tin cá nhân, giá trị phiên hoạt động nhạy cảm, thông tin đăng nhập dịch vụ, v.v.).
Giải pháp giảm thiểu
Hãy sử dụng chức năng NetworkSecurityConfig.xml để đảm bảo rằng tất cả các kết nối ở giai đoạn chính thức, kiểm thử, gỡ lỗi và phát triển đều được xử lý đúng cách thay vì sử dụng hoặc triển khai mã xác thực chứng chỉ TLS/SSL tuỳ chỉnh. Nếu cần sử dụng chứng chỉ tự ký để kiểm thử và gỡ lỗi bản dựng, hãy cân nhắc dùng NetworkSecurityConfig thay vì triển khai X509TrustManager
tuỳ chỉnh.