Lỗ hổng từ xa trong ngăn xếp OpenBSD IPv6

Trong quá trình nền slaacd, chịu trách nhiệm tự động cấu hình địa chỉ IPv6 (Tự động cấu hình địa chỉ không trạng thái IPv6, RFC 4862) trong OpenBSD, một lỗ hổng đã được xác định dẫn đến tràn bộ đệm khi nhận được quảng cáo bộ định tuyến IPv6 được thiết kế đặc biệt (RA, Quảng cáo bộ định tuyến) .

Ban đầu, chức năng tự động cấu hình địa chỉ IPv6 được triển khai ở cấp kernel, nhưng bắt đầu với OpenBSD 6.2, chức năng này đã được chuyển sang một quy trình slaacd không có đặc quyền riêng biệt. Quá trình này chịu trách nhiệm gửi các tin nhắn RS (Router Solicitation) và phân tích các phản hồi RA (Quảng cáo bộ định tuyến) cùng với thông tin về các tham số kết nối mạng và bộ định tuyến.

Vào tháng 7, slaacd đã sửa lỗi khiến nó gặp sự cố nếu XNUMX máy chủ được chỉ định trong danh sách RDNSS (Máy chủ DNS đệ quy). Sự giám sát này đã thu hút sự chú ý của các nhà nghiên cứu độc lập, những người đã cố gắng kiểm tra mã slaacd để tìm các lỗi khác xảy ra khi phân tích các trường trong thông báo RA. Phân tích cho thấy có một vấn đề khác trong mã, vấn đề này thể hiện khi xử lý trường DNSSL (Danh sách tìm kiếm DNS), bao gồm danh sách tên miền và mẫu máy chủ cho DNS.

Mỗi tên trong danh sách DNSSL được mã hóa bằng dấu phân cách null và can thiệp vào các thẻ một byte để xác định kích thước của dữ liệu theo sau. Lỗ hổng này xảy ra do trong mã phân tích danh sách, một trường có kích thước được sao chép vào một biến có kiểu số nguyên có dấu (“len = data[pos]”). Theo đó, nếu một giá trị được chỉ định trong trường có tập bit quan trọng nhất, giá trị này sẽ được coi trong toán tử điều kiện dưới dạng số âm và kiểm tra kích thước tối đa cho phép (“if (len > 63 || len + pos + 1 > datalen) {“) sẽ không hoạt động, điều này sẽ dẫn đến lệnh gọi tới memcpy với tham số có kích thước của dữ liệu được sao chép vượt quá kích thước bộ đệm.

Lỗ hổng từ xa trong ngăn xếp OpenBSD IPv6
Lỗ hổng từ xa trong ngăn xếp OpenBSD IPv6


Nguồn: opennet.ru

Thêm một lời nhận xét