Một mã khai thác PoC (Proof-of-Concept) công khai hiện đã được tung ra cho CVE-2026-55200, một lỗ hổng nghiêm trọng trong libssh2. Lỗ hổng này cho phép một máy chủ SSH độc hại hoặc bị xâm nhập kích hoạt tình trạng hư hỏng bộ nhớ trên máy khách đang kết nối, dẫn đến khả năng thực thi mã từ xa (RCE). Đáng chú ý, cuộc tấn công không yêu cầu thông tin đăng nhập hay sự tương tác từ phía người dùng. Lỗi này ảnh hưởng đến mọi phiên bản của thư viện cho đến 1.11.1 và có điểm CVSS 4.0 là 9.2.
libssh2 là một thư viện SSH phía máy khách (client-side), không phải máy chủ. Sự khác biệt này rất quan trọng. Nó được tích hợp trong nhiều công cụ phổ biến như curl, Git, PHP, các tác nhân sao lưu (backup agents), trình cập nhật firmware và một danh sách dài các thiết bị mạng.
Bất kỳ ứng dụng nào liên kết với thư viện này và kết nối tới một điểm cuối SSH không tin cậy đều là mục tiêu tiềm năng. Nhiều bản sao của libssh2 được liên kết tĩnh (statically linked), do đó việc cập nhật gói phần mềm của hệ điều hành sẽ không thể khắc phục được chúng, và bạn thậm chí có thể không biết sự tồn tại của chúng trong hệ thống.
Cách thức hoạt động của lỗ hổng
Lỗi nằm trong hàm ssh2_transport_read() trong tệp transport.c, đây là hàm phân tích các gói tin SSH đến trong quá trình bắt tay (handshake). Hàm này đọc trường packet_length do kẻ tấn công kiểm soát và chỉ từ chối các giá trị nhỏ hơn 1, mà không bao giờ thực thi một giới hạn trên.
Quá trình tính toán kích thước sẽ cộng packet_length với một vài giá trị nhỏ khác bằng số học 32-bit. Do đó, một giá trị độ dài như 0xffffffff sẽ bị xoay vòng (wrap around) thành một con số cực nhỏ. Sau đó, libssh2 cấp phát một bộ nhớ đệm (buffer) dựa trên con số nhỏ này, trong khi các mã lệnh sau đó lại ghi toàn bộ gói tin quá khổ vào đó.
Kết quả là một hành vi ghi đè bộ nhớ heap ngoài phạm vi (out-of-bounds heap write), được phân loại là CWE-680 (tràn số nguyên dẫn đến tràn bộ nhớ đệm) – một kỹ thuật kinh điển để thực thi mã. Bản vá lỗi đã bổ sung bước kiểm tra còn thiếu, từ chối bất kỳ packet_length nào vượt quá LIBSSH2_PACKET_MAXPAYLOAD trước khi thực hiện các phép tính toán.
libssh2 từng gặp phải vấn đề tương tự trước đây. Vào năm 2019, phiên bản 1.8.1 đã được phát hành để khắc phục một loạt 9 lỗ hổng, đứng đầu là CVE-2019-3855, một lỗi tràn số nguyên gần như y hệt trong quá trình đọc gói tin vận chuyển, cũng cho phép máy chủ độc hại thực thi mã trên máy khách. Bảy năm sau, cùng một loại lỗi đã quay trở lại trong chính đoạn mã đó.
Nhà nghiên cứu bảo mật Tristan Madani đã báo cáo vấn đề này. Các nhà duy trì đã hợp nhất bản vá thông qua pull request #2052 vào ngày 12 tháng 6. VulnCheck đã công bố mã CVE vào ngày 17 tháng 6.
Mã khai thác PoC công khai đã được đăng tải trong "exploitarium", một kho lưu trữ mã khai thác trên GitHub. Theo tác giả, các mục nhập được đăng mà không báo cáo trước. Kho lưu trữ chứa một khung kích hoạt SSH đã được xác minh cục bộ và một bộ khung RCE cục bộ có kiểm soát cho lỗi libssh2, chứ không phải là một mã khai thác từ xa hoàn chỉnh (turnkey remote exploit). Việc thực thi mã đáng tin cậy trên một ứng dụng thực tế sẽ vẫn phụ thuộc vào tệp thực thi mục tiêu, hành vi của bộ cấp phát bộ nhớ, các biện pháp giảm thiểu và cách phần mềm tích hợp libssh2.
Cũng cần cân nhắc bối cảnh cụ thể. Tác giả thừa nhận kho lưu trữ được đưa ra khi chưa hoàn thiện, một số mục nhập còn yếu và sử dụng AI để thực hiện fuzzing. Hiện tại, xếp hạng khai thác của CISA cho CVE này vẫn ở mức "none" (không có) và chưa có báo cáo nào về việc sử dụng lỗ hổng trong thực tế.
Các biện pháp cần thực hiện
Hiện tại vẫn chưa có phiên bản libssh2 chính thức nào được phát hành để sửa lỗi. Bản vá hiện chỉ nằm trong mã nguồn chính (mainline source) và một phiên bản được gắn thẻ (tagged release) vẫn đang được chuẩn bị. Do đó, các bản phân phối Linux và các dự án hạ nguồn đang tự thực hiện backport (áp dụng bản vá vào phiên bản cũ); ví dụ, Debian đã có một bản dựng đã sửa lỗi đang trong quá trình thử nghiệm.
NHS England Digital đã ban hành một cảnh báo thúc giục các tổ chức bị ảnh hưởng tiến hành cập nhật.
- Kiểm kê tất cả các ứng dụng liên kết với libssh2, bao gồm các bản sao tĩnh hoặc đi kèm mà các trình quản lý gói có thể không phát hiện ra. Các triển khai curl, Git và PHP là những đối tượng phổ biến nhất.
- Áp dụng bản dựng có chứa commit
97acf3d, cho dù đó là bản backport từ distro hoặc bản dựng từ nguồn đã được vá, đồng thời theo dõi các kênh thông báo của nhà cung cấp để biết trạng thái phát hành. - Cho đến khi được vá, hãy hạn chế các kết nối SSH gửi đi (outbound) tới các máy chủ tin cậy và xác minh host keys. Ưu tiên các máy khách kết nối với máy chủ SSH bên ngoài hoặc phân giải máy chủ qua các tên miền mà kẻ tấn công có thể chuyển hướng. Theo dõi các bất thường về gói tin quá khổ và các lỗi crash máy khách không rõ nguyên nhân.
Ngoài ra, hãy vá cả các lỗ hổng khác trong đợt này: CVE-2026-55199 (CVSS 8.2), một lỗi từ chối dịch vụ (DoS) làm kẹt máy khách trong vòng lặp CPU thông qua số lượng extension giả mạo, và CVE-2025-15661 (CVSS 8.3), một lỗi đọc quá phạm vi bộ nhớ heap trong SFTP.
Vấn đề cốt lõi là lỗi hư hỏng bộ nhớ trước xác thực nằm trong mã nguồn được phân phối bên trong nhiều máy khách và thiết bị hơn bất kỳ ai có thể thống kê đầy đủ.
Câu hỏi đặt ra là bao lâu nữa thì ai đó sẽ biến bộ khung khai thác cục bộ thành một mã khai thác từ xa đáng tin cậy, và có bao nhiêu bản sao libssh2 đi kèm sẽ vẫn tồn tại lỗ hổng vì không ai nhớ rằng họ đã nhúng nó bên trong sản phẩm của mình.