DevOps & giám sát

OpenSSH 10.6 phá vỡ tính năng nén và cú pháp tên người dùng để vá các lỗ hổng rò rỉ

OpenSSH 10.6 vô hiệu hóa nén LZ77 và chặn các ký tự đặc biệt trong tên người dùng trên dòng lệnh nhằm khắc phục các lỗ hổng bảo mật được phát hiện bởi nghiên cứu hỗ trợ bởi AI.

Server rack with a glowing red padlock and fragmented data streams
Ảnh minh họa tạo riêng cho bài viết

Bài được dịch tự động từ bản gốc tiếng Anh.

Dự án OpenSSH đã phát hành phiên bản 10.6 vào ngày 7 tháng 10 năm 2026, giới thiệu những thay đổi cố ý gây gián đoạn (breaking changes) để bịt kín hai lỗ hổng bảo mật riêng biệt. Bản cập nhật này làm suy yếu khả năng nén của SSH và từ chối các ký tự cụ thể trong tên người dùng trên dòng lệnh, những hành động mà các nhà duy trì dự án thừa nhận sẽ gây xáo trộn cho các tập lệnh tự động hóa và quy trình truyền tệp hiện có. Phiên bản này đánh dấu sự chuyển dịch sang việc áp dụng các bản vá bảo mật thường xuyên hơn khi các công cụ AI đẩy nhanh tốc độ khám phá các lỗ hổng có thể bị khai thác trong phần mềm cơ sở hạ tầng nền tảng.

Chuyện gì đã xảy ra

Thay đổi lớn đầu tiên giải quyết một lỗ hổng rò rỉ văn bản thuần túy (plaintext leak) trong tính năng nén của SSH. Các nhà nghiên cứu Fabian Bäumer và Marcus Brinkmann từ Đại học Ruhr Bochum đã chứng minh rằng khi bật tính năng nén, nhiều kênh trong một phiên SSH đơn lẻ chia sẻ cùng một trạng thái nén. Một kẻ tấn công có thể chèn văn bản thuần túy được chọn vào một kênh có thể quan sát lưu lượng mã hóa và sử dụng lịch sử từ điển LZ77 được chia sẻ để khôi phục các bí mật từ một kênh khác. Vector tấn công này tương tự với các cuộc tấn công CRIME và BREACH nhắm vào HTTP qua TLS, dựa trên thực tế là các chuỗi dữ liệu trùng khớp dẫn đến đầu ra nén ngắn hơn, làm lộ thông tin về dữ liệu bí mật.

Để giảm thiểu rủi ro này, OpenSSH 10.6 vô hiệu hóa bộ mã hóa từ điển LZ77 ở cả thành phần máy khách và máy chủ trong khi vẫn giữ lại mã hóa Huffman. Tính năng nén vẫn hoạt động nhưng hiệu quả giảm đáng kể. Dự án khuyến nghị chuyển việc nén sang tầng ứng dụng để đạt hiệu suất và bảo mật tốt hơn. Mặc dù các phiên tương tác có thể không nhận thấy sự khác biệt lớn, nhưng các tác vụ tự động truyền lượng lớn dữ liệu có thể nén được qua các kết nối hạn chế băng thông có thể sẽ thấy hiệu suất giảm và có thể cần điều chỉnh kiến trúc.

Thay đổi thứ hai nhắm vào các rủi ro chèn lệnh shell liên quan đến tên người dùng trên dòng lệnh. Các phiên bản trước cho phép các ký tự như $ và \ trong tên người dùng được truyền trực tiếp qua dòng lệnh, những ký tự này có thể được diễn giải như cú pháp shell khi được sử dụng trong các chỉ thị như ProxyCommand hoặc Match exec. Phiên bản 10.3 đã cố gắng giải quyết vấn đề này bằng cách kiểm tra các ký tự đặc biệt (metacharacters) ở giai đoạn sau của quá trình, nhưng phiên bản 10.6 hiện tại từ chối nghiêm ngặt các ký tự này trong đầu vào dòng lệnh. Tên người dùng chứa các ký tự này vẫn có thể được sử dụng nếu chúng được định nghĩa trong tệp cấu hình SSH thông qua chỉ thị User, nhưng các tập lệnh truyền tên người dùng một cách động phải được cập nhật để tránh lỗi kết nối.

Chi tiết chính

  • OpenSSH 10.6 được phát hành vào ngày 7 tháng 10 năm 2026, với các thay đổi gây gián đoạn đã biết nhằm cải thiện bảo mật.
  • Bộ mã hóa từ điển LZ77 cho tính năng nén SSH bị vô hiệu hóa để ngăn chặn các cuộc tấn công khôi phục văn bản thuần túy giữa các kênh.
  • Mã hóa Huffman vẫn hoạt động, vì vậy tính năng nén vẫn chạy nhưng với hiệu quả giảm.
  • Tên người dùng trên dòng lệnh chứa $ hoặc \ hiện bị từ chối để ngăn chặn chèn lệnh shell qua ProxyCommand và các chỉ thị tương tự.
  • Tên người dùng có ký tự đặc biệt vẫn có thể hoạt động nếu được chỉ định trong tệp cấu hình SSH bằng cách sử dụng chỉ thị User.
  • Thuật toán chữ ký hậu lượng tử lai ssh-mldsa44-ed25519 đã loại bỏ hậu tố thử nghiệm, yêu cầu tạo lại khóa cho các triển khai trước đó.

Bối cảnh

Tính năng nén SSH giảm mức sử dụng băng thông bằng cách mã hóa dữ liệu trước khi mã hóa bảo mật. Thuật toán LZ77 hoạt động bằng cách tìm các chuỗi byte lặp lại và thay thế chúng bằng các tham chiếu đến các lần xuất hiện trước đó. Trong một phiên SSH đa hợp (multiplexed), nơi nhiều luồng dữ liệu chia sẻ một kết nối, việc chia sẻ lịch sử nén này cho phép kẻ tấn công tương quan đầu vào của họ với dữ liệu bí mật. Nếu đầu vào của kẻ tấn công khớp với một phần của dữ liệu bí mật, kích thước đầu ra nén sẽ thay đổi, tiết lộ thông tin về nội dung của dữ liệu bí mật. Đây là lý do tại sao dự án đã loại bỏ hoàn toàn thành phần từ điển chia sẻ.

Chèn lệnh shell xảy ra khi đầu vào do người dùng cung cấp được hệ thống shell thực thi như mã. Trong SSH, tên người dùng thường được nội suy vào các chỉ thị cấu hình thực thi lệnh shell. Nếu tên người dùng chứa các ký tự đặc biệt như $, shell có thể diễn giải nó như một biến hoặc thay thế lệnh thay vì một chuỗi nguyên văn. Bằng cách từ chối các ký tự này ở cấp độ dòng lệnh, OpenSSH đảm bảo rằng tên người dùng không thể vô tình kích hoạt hành vi shell ngoài ý muốn, đóng đường dẫn cho các cuộc tấn công thực thi mã từ xa hoặc leo thang đặc quyền tiềm năng.

Tại sao điều này quan trọng

Đối với các đội ngũ quản lý cơ sở hạ tầng tự host (self-hosted), bản cập nhật này đòi hỏi sự chú ý ngay lập tức đối với các pipeline tự động hóa. Nhiều hệ thống CI/CD và tập lệnh triển khai xây dựng lệnh SSH một cách động, thường truyền tên người dùng từ biến môi trường hoặc đầu vào của người dùng. Nếu các tập lệnh này không làm sạch đầu vào hoặc phụ thuộc vào đối số tên người dùng trên dòng lệnh, chúng sẽ thất bại sau khi nâng cấp lên 10.6. Sự gián đoạn này có thể làm tê liệt các đợt triển khai, tác vụ sao lưu và nhiệm vụ quản lý từ xa cho đến khi các tập lệnh được tái cấu trúc để sử dụng tệp cấu hình hoặc đầu vào đã được làm sạch.

Ngoài ra, việc giảm hiệu quả nén ảnh hưởng đến các quy trình làm việc phụ thuộc vào SSH để truyền tải lượng lớn dữ liệu qua băng thông hạn chế. Các đội ngũ sử dụng đường hầm SSH để nhân bản cơ sở dữ liệu hoặc đồng bộ hóa tệp có thể trải nghiệm tốc độ truyền chậm hơn. Mặc dù lợi ích bảo mật vượt trội so với chi phí hiệu suất, các kỹ sư phải đánh giá xem việc chuyển tính năng nén sang tầng ứng dụng có khả thi hay cần các phương pháp truyền tải thay thế cho các thao tác dữ liệu khối lượng lớn.

Bạn có thể làm gì

  • Kiểm toán tất cả các tập lệnh tự động hóa và pipeline CI/CD để tìm các lệnh SSH truyền tên người dùng qua dòng lệnh.
  • Tái cấu trúc các tập lệnh để định nghĩa tên người dùng trong tệp cấu hình SSH bằng cách sử dụng chỉ thị User nếu cần các ký tự đặc biệt.
  • Kiểm tra tốc độ truyền tệp sau khi nâng cấp để đánh giá tác động của việc giảm hiệu quả nén đối với khối lượng công việc của bạn.
  • Tạo lại bất kỳ khóa nào sử dụng thuật toán thử nghiệm ssh-mldsa44-ed25519 để phù hợp với cách đặt tên tiêu chuẩn mới.
  • Lên kế hoạch kiểm toán tất cả các tập lệnh tự động hóa và pipeline CI/CD để tìm các lệnh SSH truyền tên người dùng qua dòng lệnh.

Tin khác

Tất cả tin