OpenBSD bị bypass xác thực PAP qua các trường credential có độ dài bằng 0

Lưu ý: Dữ liệu này chỉ có tính chất tham khảo, phục vụ nghiên cứu an ninh mạng.CyStack khuyến nghị người dùng không sử dụng các thông tin này nhằm các mục đích bất hợp pháp

Lỗ hổng CVE-2026-55706 là gì?

Lỗ hổng CVE-2026-55706 là lỗ hổng Improper Validation of Specified Quantity in Input ảnh hưởng tới OpenBSD (phiên bản bị ảnh hưởng: < 076e2b1c1fc4ac0883a72d3544131ad5cee7adf8). Lỗ hổng này được xếp hạng ở mức Cao, với điểm CVSS 8.3. Lỗ hổng này đã có mã hoặc bằng chứng khai thác công khai, nhưng điều đó chưa xác nhận việc khai thác trong thực tế.

Giới thiệu chung

Dữ liệu gốc

Hàm sppp_pap_input trong sys/net/if_spppsubr.c của OpenBSD trước 076e2b1 cho phép vượt qua xác thực thông qua một số giá trị bằng 0 của các trường độ dài.

Sản phẩm và phạm vi ảnh hưởng

  • Báo cáo kỹ thuật công khai xác định OpenBSD qua 7.6 là bị ảnh hưởng.
  • Bản ghi chuẩn hóa biểu diễn phạm vi bị ảnh hưởng là các revision Git bắt đầu từ 0 và nhỏ hơn commit 076e2b1.
  • Bản vá đã được đưa vào nhánh -current tại commit 076e2b1. Chưa có bằng chứng trong hồ sơ này để xác định một số phiên bản đóng gói cụ thể hoặc trạng thái của mọi nhánh phát hành song song.

Chi tiết kỹ thuật

OpenBSD xử lý PAP trong hàm sppp_pap_input thuộc sys/net/if_spppsubr.c. Các trường name_len và passwd_len lấy trực tiếp từ frame PAP do peer gửi và được dùng làm độ dài cho các phép so sánh bcmp với username và password đã cấu hình. Kiểm tra hiện tại chỉ chặn giá trị vượt quá AUTHMAXLEN, vì vậy giá trị bằng 0 vẫn được chấp nhận; bcmp với độ dài 0 trả về thành công mà không so sánh dữ liệu, khiến nhánh xác thực thất bại không được thực thi và peer có thể nhận PAP_ACK mà không cung cấp credential hợp lệ.

Luồng có thể tiếp cận qua đường đi PPPoE đến sppp_pap_input khi hệ thống được cấu hình làm PAP authenticator. Cùng một nguyên nhân còn cho phép cung cấp độ dài lớn hơn vùng cấp phát của credential đã lưu, dẫn đến đọc vượt vùng nhớ heap trong kernel. Bằng chứng công khai xác nhận lỗi đọc vượt vùng nhớ này, nhưng không xác định một kết quả rò rỉ dữ liệu cụ thể ngoài việc đọc quá giới hạn đối tượng.

Khả năng khai thác

Lỗi có thể bị khai thác từ cùng phân đoạn mạng với hệ thống đích thông qua đường đi PPPoE, khi interface được cấu hình sử dụng PAP authentication. Attacker không cần biết username hoặc password và không cần user interaction; việc khai thác yêu cầu tạo và xử lý đúng chuỗi thương lượng PPPoE/PAP, nên không phải là một yêu cầu đơn giản chỉ gửi một gói bất kỳ. Một proof of concept công khai đã được ghi nhận, bao gồm trường hợp gửi các trường độ dài tên và password bằng 0 rồi nhận PAP_ACK và thiết lập được liên kết IP. Bằng chứng được cung cấp không xác nhận việc lỗi đang bị khai thác trong thực tế.

Tác động kỹ thuật

Lỗi cho phép một peer không có credential vượt qua bước kiểm tra PAP và đạt tới trạng thái liên kết mạng PPP đã được thiết lập. Với hệ thống đóng vai trò PPPoE client, server giả mạo trong cùng broadcast domain có thể trở thành endpoint mà hệ thống định tuyến lưu lượng qua đó, làm thay đổi ranh giới tin cậy của kết nối và có thể ảnh hưởng đến tính bí mật hoặc toàn vẹn của lưu lượng. Với hệ thống đóng vai trò authenticator, tác động chính là xác thực peer trái phép. Lỗi đọc vượt vùng nhớ kernel là tác động bổ sung được mô tả trong phân tích công khai, nhưng hồ sơ hiện tại chưa chứng minh việc đọc này trực tiếp dẫn đến thực thi mã hoặc một dạng rò rỉ cụ thể.

Tác động đến tổ chức

OpenBSD dùng PPPoE với PAP có thể chấp nhận một peer trái phép và thiết lập liên kết mạng mà không xác thực được danh tính. Khi OpenBSD hoạt động như PPPoE client, một server giả mạo trong cùng broadcast domain có thể khiến lưu lượng IP được định tuyến qua endpoint của attacker, tạo nguy cơ lộ hoặc bị sửa đổi lưu lượng trong phạm vi đường kết nối đó. Khi OpenBSD hoạt động như PAP authenticator, kết quả trực tiếp là truy cập trái phép vào liên kết PPP được bảo vệ bằng PAP. Khả năng đọc vượt vùng nhớ kernel có thể ảnh hưởng đến tính ổn định hoặc bảo mật, nhưng bằng chứng hiện có không xác định đầy đủ hậu quả dữ liệu của lần đọc này.

Cách khắc phục

  1. Cập nhật mã nguồn hoặc gói OpenBSD sang trạng thái có chứa commit 076e2b1, trong đó sppp_pap_input yêu cầu độ dài username và password nhận được khớp chính xác với độ dài credential đã cấu hình trước khi gọi bcmp.
  2. Xác minh revision thực tế của kernel hoặc gói mạng đang chạy, thay vì chỉ kiểm tra phiên bản hệ điều hành hiển thị, vì bằng chứng sửa lỗi được cung cấp ở cấp commit và không nêu một bản phát hành đóng gói cụ thể.
  3. Trong thời gian chưa thể cập nhật, rà soát và giảm phạm vi các interface PPPoE sử dụng PAP, đồng thời hạn chế peer trong cùng phân đoạn mạng theo chính sách vận hành phù hợp. Đây là biện pháp giảm rủi ro tạm thời, không được xem là thay thế đã được xác nhận cho bản vá.
  4. Sau khi cập nhật, kiểm tra lại các cấu hình PAP authenticator và theo dõi các PAP Auth-Request bất thường để phát hiện việc tiếp tục thử khai thác.

Cách phát hiện

  1. Kiểm kê các hệ thống OpenBSD có interface PPPoE hoặc cấu hình sppp(4), sau đó xác định revision mã nguồn hoặc gói cài đặt có chứa commit sửa lỗi 076e2b1.
  2. Xác định các interface đóng vai trò PAP authenticator, đặc biệt các cấu hình PPPoE có peerproto pap, peername và peerkey.
  3. Nếu có telemetry ở lớp PPP, rà soát các PAP Auth-Request có name_len=0 và passwd_len=0, cùng với phản hồi PAP_ACK hoặc việc chuyển tiếp thành công sang thương lượng IPCP. Đây là dấu hiệu kỹ thuật phù hợp với lỗi đã công bố, không phải IOC được xác nhận cho mọi môi trường.
  4. Rà soát các phiên PPPoE được thiết lập từ peer không mong đợi trong cùng broadcast domain. Việc không thấy log phù hợp không chứng minh hệ thống an toàn, vì khả năng ghi nhận phụ thuộc vào cấu hình logging.
Nguồn (11)
Tìm hiểu thêm

Kiểm tra chuyên sâu cùng giải pháp quản lý rủi ro Web toàn diện

Giải pháp CyStack VulnScan liên tục phát hiện tài sản, xác minh lỗ hổng và giúp đội ngũ bảo mật ưu tiên khắc phục cho toàn bộ doanh nghiệp.