Lỗi bỏ qua kiểm tra lai lịch hostname trong SSL client (CVE-2013-4073)

Một lỗ hổng trong SSL client của Ruby giúp người tấn công ở vai trò trung gian lừa SSL server với những giấy chứng nhận giả nhưng hợp lệ.

Lỗ này được gán với CVE-2013-4073.

Tóm tắt

SSL client của Ruby có kiểm tra chứng thực của hostname nhưng nó không xử lý được các giấy chứng nhận có kèm null bytes.

Chi tiết

OpenSSL::SSL.verify_certificate_identity triển khai chuẩn RFC2818 Kiểm tra lai lịch của server cho SSL client của Ruby nhưng nó không xử lý đúng hostname trong trường hợp subjectAltName X509 extension có kèm null bytes.

Mã hiện hữu trong lib/openssl/ssl.rb dùng OpenSSL::X509::Extension#value để trích ra lai lịch từ subjectAltName. Extension#value lệ thuộc vào hàm OpenSSL X509V3_EXT_print() và đối với dNSName của subjectAltName nó sử dụng hàm sprintf(), được biết là không an toàn khi xử lý null byte. Kết quả là Extension#value trả về ‘www.ruby-lang.org’ nếu subjectAltName là ‘www.ruby-lang.org\0.example.com’ và OpenSSL::SSL.verify_certificate_identity nhận dạng sai giấy chứng nhận, nhầm nó với một trong ‘www.ruby-lang.org’.

Đối với một CA uy tín, một SSL client cho phép cấp giấy chứng nhận có giá trị null byte trong subjectAltName, người tấn công ở xa có thể lấy được giấy chứng nhận của ‘www.ruby-lang.org\0.example.com’ từ CA đó để đánh lừa ‘www.ruby-lang.org’ và tấn công với vai trò trung gian giữa SSL client và server.

Phiên bản bị ảnh hưởng

  • Tất cả phiên bản ruby 1.8 trước ruby 1.8.7 patchlevel 374
  • Tất cả phiên bản ruby 1.9 trước ruby 1.9.3 patchlevel 448
  • Tất cả phiên bản ruby 2.0 trước ruby 2.0.0 patchlevel 247
  • Trước trunk revision 41671

Giải pháp

Tất cả người dùng khuyến khích nâng lên Ruby 2.0.0-p247, 1.9.3-p448 hay 1.8.7-p374.

Công lao

Lỗ hổng này được tìm thấy bởi William (B.J.) Snow Orvis và được sửa với giúp đỡ của David Thiel từ iSEC Partners trên security@ruby-lang.org.

Lịch sử

  • Được công bố vào 11:00:00 (UTC) ngày 27-06-2013