Một lỗ hổng CVE kéo dài đã được phát hiện trong ngăn xếp mạng của OpenBSD, cho phép kẻ tấn công bỏ qua hoàn toàn cơ chế xác thực PAP do một lỗi logic có từ hàng thập kỷ.
Chi tiết Lỗ hổng và Cơ chế Khai thác
Vấn đề nằm ở hàm sppp_pap_input() trong phân hệ sppp(4) của OpenBSD, chịu trách nhiệm quản lý các liên kết PPP đồng bộ được sử dụng trong kết nối PPPoE.
Vai trò của PAP trong Xác thực PPP
Trong giai đoạn xác thực PPP, các hệ thống sử dụng Giao thức Xác thực Mật khẩu (PAP) cần xác thực thông tin người dùng trước khi thiết lập phiên mạng. Tuy nhiên, các nhà nghiên cứu đã phát hiện ra rằng logic xác thực này đã có sai sót cơ bản kể từ khi được giới thiệu vào năm 1999.
Cơ chế Lỗi Logic
Lỗi bắt nguồn từ việc xử lý không đúng các trường độ dài do kẻ tấn công kiểm soát trong quá trình so sánh thông tin xác thực. Logic xác thực PAP so sánh tên người dùng và mật khẩu do kẻ tấn công cung cấp bằng hàm bcmp(), nhưng lại tin tưởng vào các giá trị độ dài lấy trực tiếp từ khung PAP đến.
Do các giá trị có độ dài bằng không có thể vượt qua các kiểm tra giới hạn trên, quá trình so sánh không bao giờ thất bại. Điều này dẫn đến việc OpenBSD chấp nhận yêu cầu xác thực mà không kiểm tra bất kỳ thông tin xác thực nào, tạo điều kiện cho một cuộc tấn công mạng bỏ qua xác thực hoàn toàn.
Hệ quả của Việc Quá Giới Hạn Đọc Bộ Nhớ
Một vấn đề liên quan phát sinh từ cùng một lỗi thiết kế. Nếu kẻ tấn công cung cấp độ dài lớn hơn kích thước thực tế của vùng đệm thông tin xác thực được cấp phát, hàm bcmp() sẽ đọc vượt ra ngoài ranh giới bộ nhớ dự kiến. Điều này gây ra tình trạng kernel heap overread, có khả năng làm lộ nội dung của bộ nhớ liền kề.
Tình trạng này trở nên có thể khai thác được sau một bản cập nhật năm 2009, khi các bộ đệm có kích thước cố định được thay thế bằng bộ nhớ được cấp phát động, làm tăng rủi ro truy cập ngoài giới hạn.
Kịch bản Tấn công và Bằng chứng Khái niệm
Lỗ hổng có thể bị khai thác thông qua đường dẫn dữ liệu PPPoE mà không yêu cầu thông tin xác thực hợp lệ. Kẻ tấn công có thể vận hành một máy chủ PPPoE giả mạo trong cùng một miền quảng bá để giả mạo máy chủ hợp pháp.
Minh họa Tấn công Thành công
Một bằng chứng khái niệm đã chứng minh khả năng thiết lập phiên hoàn chỉnh, bao gồm cả cấu hình IP và giao tiếp ICMP, xác nhận tính khả thi thực tế của cuộc khai thác. Điều này cho thấy mức độ nghiêm trọng của lỗ hổng và khả năng xâm nhập hệ thống.
Nguồn gốc và Lịch sử Lỗ hổng
Mã nguồn dễ bị tổn thương có nguồn gốc từ FreeBSD và ban đầu được phát triển từ một bản triển khai của Cronyx Engineering vào giữa những năm 1990. Mặc dù đã trải qua nhiều bản cập nhật, logic so sánh lỗi vẫn tồn tại không thay đổi trong suốt 27 năm.
Sự tồn tại lâu dài của lỗ hổng này là một lời nhắc nhở về tầm quan trọng của việc đánh giá mã nguồn và kiểm thử bảo mật định kỳ, ngay cả đối với các hệ thống được coi là ổn định.
Biện pháp Khắc phục và Vá lỗi
Bản sửa lỗi phản ánh mẫu an toàn đã có trong trình xử lý CHAP bằng cách thêm các kiểm tra độ dài chính xác trước mọi lệnh gọi bcmp().
Chi tiết Bản vá Lỗi
Theo blog của Argus Systems, vấn đề đã được tiết lộ một cách có trách nhiệm vào ngày 12 tháng 6 năm 2026 và được khắc phục trong vòng hai ngày. Bản vá bổ sung các kiểm tra xác thực độ dài nghiêm ngặt để từ chối các đầu vào có độ dài bằng không và quá khổ trước khi so sánh.
Các tổ chức sử dụng OpenBSD, đặc biệt là trong các môi trường dựa vào xác thực PPPoE, được khuyến cáo mạnh mẽ nên áp dụng các bản vá mới nhất ngay lập tức để ngăn chặn khả năng bị khai thác. Việc cập nhật bản vá kịp thời là bước quan trọng để đảm bảo an toàn thông tin.
Để có thông tin chi tiết về việc vá lỗi, bạn có thể tham khảo thông báo bảo mật chính thức tại OpenBSD Security Advisories.
Tầm quan trọng của Việc Rà soát Mã nguồn
Lỗ hổng này nhấn mạnh tầm quan trọng của việc rà soát mã nguồn kỹ lưỡng và kiểm thử bảo mật thường xuyên để phát hiện sớm các sai sót logic có thể dẫn đến các lỗ hổng bảo mật nghiêm trọng.
Các hệ thống cần đảm bảo rằng mọi thao tác xử lý dữ liệu đầu vào, đặc biệt là các giá trị liên quan đến độ dài và kích thước, đều được xác thực chặt chẽ trước khi sử dụng trong các hoạt động so sánh hoặc truy cập bộ nhớ.










