Qt vá lỗi có thể làm lộ thông tin đăng nhập khi kết nối lại

Cảnh báo QWebSocket của Qt nhắm vào phần mềm dùng lại cùng một đối tượng cho nhiều kết nối. Nhà phát triển cần kiểm tra cả thư viện đi kèm bản cài.

Qt vá lỗi có thể làm lộ thông tin đăng nhập khi kết nối lại

Một ứng dụng mất mạng có thể tự kết nối lại mà người dùng chỉ thấy màn hình đứng vài giây. Ở phía sau, lập trình viên phải quyết định tạo một kết nối mới bằng một đối tượng mới hay dùng lại đối tượng cũ. Ngày 6/11/2026, Qt công bố lỗ hổng CVE-2026-114366 trong phần xử lý xác thực của QWebSocket, với hậu quả tiềm ẩn là lộ thông tin đăng nhập. Khuyến nghị tạm thời của hãng rất cụ thể: đừng dùng cùng một đối tượng QWebSocket cho nhiều kết nối. Với phần mềm đã đóng gói và gửi tới khách hàng, còn một câu hỏi quan trọng hơn: bản cài đang dùng thư viện nào?

Kết nối trực tiếp khác gì tải lại một trang?

Hãy nghĩ đến màn hình theo dõi đơn hàng trong một kho. Nếu máy phải hỏi máy chủ theo chu kỳ, nó sẽ gửi nhiều yêu cầu ngay cả khi không có gì thay đổi. WebSocket cho phép hai đầu trao đổi qua một kết nối còn mở: máy chủ có thể báo ngay khi đơn đổi trạng thái, còn ứng dụng có thể gửi yêu cầu qua cùng đường truyền. Trước khi hai bên chuyển sang trao đổi dữ liệu kiểu đó, chúng phải thực hiện một lượt mở kết nối, còn gọi là bắt tay. Đặc tả WebSocket mô tả lượt bắt tay và cách dữ liệu được đóng thành từng khung để chuyển đi.

QWebSocket là phần Qt cung cấp để chương trình làm việc với giao thức này. Một đối tượng QWebSocket trong mã ứng dụng có thể sống lâu hơn một kết nối mạng cụ thể: kết nối đã đóng, nhưng ứng dụng vẫn giữ đối tượng và gọi mở lần nữa. Đây là hai vòng đời khác nhau. Trên màn hình, cả hai cách triển khai đều có thể hiện cùng dòng chữ “đang kết nối lại”; kiểm tra giao diện sẽ không cho biết mã phía dưới đã đi theo đường nào.

Cảnh báo của Qt áp dụng đến đâu?

Trong thông báo bảo mật, Qt xác định vấn đề ở phần xác thực của QWebSocket trong mô đun Qt WebSockets. Hãng chấm 2,3 theo thang CVSS 4.0, mức thấp, và nêu ảnh hưởng tiềm ẩn đến tính bí mật của thông tin đăng nhập. Thông báo này không nói mọi phiên WebSocket sẽ làm lộ mật khẩu, cũng không xác nhận một vụ tấn công cụ thể. Phạm vi được công bố là lỗi trong cách triển khai của thư viện Qt; giao thức WebSocket tự nó không phải thành phần được chỉ tên.

Vì sao khuyến nghị lại tập trung vào việc dùng lại đối tượng? Một đối tượng mạng thường quản lý nhiều thứ ngoài đường truyền: trạng thái đang mở hay đã đóng, các sự kiện báo lỗi và những gì cần cho quá trình xác thực. Hai lượt kết nối có thể cần những trạng thái riêng. Tạo một đối tượng mới cho mỗi lượt là cách để chương trình không dựa vào giả định rằng đối tượng cũ đã được dọn sạch đúng lúc. Đây là giải thích vì sao biện pháp của Qt nhắm vào vòng đời đối tượng; thông báo công khai không mô tả đầy đủ từng điều kiện khiến thông tin bị lộ.

Mã lỗ hổng là một cách để nhóm bảo mật, nhóm phát triển và nhà cung cấp cùng nói về một vấn đề. Điểm mức thấp giúp đặt việc này cạnh các bản vá khác, nhưng không thay cho việc đọc mã của ứng dụng. Một công cụ nội bộ tự kết nối lại nhiều lần và dùng thông tin truy cập có giá trị có thể cần đánh giá sớm hơn một ứng dụng có Qt nhưng không dùng mô đun WebSockets. Hai chương trình mang cùng tên thư viện trên danh sách phụ thuộc có thể khác hẳn về đường chạy thực tế.

Kiểm tra bản cài, không chỉ phiên bản trên máy lập trình

Các bản được Qt nêu là từ 6.6.0 đến 6.8.9, từ 6.9.0 đến 6.11.2 và 6.12.0. Hãng chưa xác định tình trạng của các bản trước 6.6.0. Các mốc có bản sửa được nêu là Qt 6.8.10, 6.11.3 và 6.12.1, hoặc bản mới hơn có bản vá phù hợp. Thông báo cũng liên kết các bản vá cho những nhánh liên quan. Nếu nhà phân phối duy trì gói riêng, hãy kiểm tra ghi chú của họ thay vì chỉ nhìn tên phiên bản để đoán đã có bản sửa hay chưa.

Với một ứng dụng phát hành cho khách, cập nhật Qt trên máy của lập trình viên chưa thay thư viện trong bản cài đã phát hành. Đội kỹ thuật nên truy từ bản đóng gói đang chạy về thư viện mà nó thực sự dùng. Một số sản phẩm mang theo thư viện riêng; một số lấy thư viện từ hệ điều hành. Hướng xử lý vì thế có thể là phát hành lại ứng dụng hoặc cập nhật gói do hệ điều hành cung cấp. Biết mô hình phân phối giúp tránh cảnh nhóm phát triển đã sửa môi trường thử nhưng phần mềm của khách vẫn chạy bản cũ.

Một lần thử kết nối lại nên quan sát gì?

Trong môi trường kiểm thử, có thể mô phỏng lần mất mạng rồi mở lại kết nối bằng tài khoản thử. Theo dõi đối tượng nào được tạo, đối tượng nào đã đóng và ứng dụng xử lý yêu cầu xác thực ra sao, mà không ghi mật khẩu vào nhật ký. Nếu triển khai biện pháp tạm thời, nên thử cả việc đăng xuất hoặc chuyển máy chủ: tạo đối tượng mới phải đi kèm việc ngừng dùng đối tượng cũ, nếu không ứng dụng có thể nhận sự kiện trùng hoặc giữ nhầm trạng thái trên giao diện.

Người sử dụng phần mềm đóng gói không cần tự chỉnh thư viện bằng tay. Thông tin hữu ích hơn là tên sản phẩm, phiên bản đang dùng và phản hồi của nhà cung cấp về việc họ có sử dụng Qt WebSockets hay không. Với đội làm ứng dụng, giá trị lớn nhất của cảnh báo này là chỉ đúng chỗ để kiểm tra: đường dẫn mở lại kết nối và bản thư viện mà khách hàng đang chạy.

Nguồn: Qt Group — cảnh báo CVE-2026-114366; RFC 6455 — giao thức WebSocket.

Minh họa bảo mật: khóa và mạch điện, MarkJFernandes, 2020. Trang nguồn; CC0 1.0. Ảnh dùng nguyên bản.

Chia sẻ