HostnameVerifier không an toàn

Danh mục OWASP: MASVS-CODE: Chất lượng mã

Tổng quan

Quá trình triển khai HostnameVerifier chịu trách nhiệm xác minh rằng tên máy chủ trong chứng chỉ của máy chủ khớp với tên của máy chủ mà ứng dụng đang cố kết nối.

Quá trình triển khai HostnameVerifier không an toàn trong ứng dụng Android là quá trình không xác minh đúng tên 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ì lớp HostnameVerifier có các lệnh gọi hàm có thể bỏ qua quá trình xác thực tên máy chủ của chứng chỉ X.509 và thay vào đó chỉ xác minh hàm băm của chứng chỉ này. Có một sự hiểu nhầm phổ biến là hàm SSLSession#isValid thực hiện một thao tác liên quan đến bảo mật, trong khi thực tế mục đích của hàm này chỉ là kiểm tra xem một phiên hoạt động có hợp lệ và có sẵn không để tiếp tục hoặc tham gia; cả hai đều không xác thực được tính bảo mật của một phiên hoạt động. Lớp HostnameVerifier đã được thay thế bằng NetworkSecurityConfig.

Mức độ tác động

Quá trình triển khai HostnameVerifier 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.

Tài nguyên