Đăng bởi nahi vào 27 Jun 2013
Dịch bởi Trung Lê
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