Віддалена вразливість в IPv6-стеку OpenBSD

У фоновому процесі slaacd, що відповідає в OpenBSD за автоконфігурацію адрес IPv6 (IPv6 Stateless Address Autoconfiguration, RFC 4862), виявлена ​​вразливість, що призводить до переповнення буфера при отриманні спеціально оформленого анонсу маршрутизатора IPv6 (RA, Router Advertise).

Спочатку функціональність автоналаштування адрес IPv6 була реалізована на рівні ядра, але починаючи з OpenBSD 6.2 була винесена в окремий непривілейований процес slaacd. Вказаний процес відповідає за надсилання повідомлень RS (Router Solicitation) та розбору відповідей RA (Router Advertisement) з інформацією про маршрутизатор та параметри мережного підключення.

У лютому slaacd була виправлена ​​помилка, що призводить до аварійного завершення у разі вказівки 7 серверів у списку RDNSS (Recursive DNS Servers). Подібна помилка привернула увагу незалежних дослідників, які спробували вивчити код slaacd щодо інших помилок, що виникають при розборі полів у повідомленнях RA. Аналіз показав, що код має ще одну проблему, що виявляється при обробці поля DNSSL (DNS Search List), що включає списків доменних імен і шаблонів хостів для DNS.

Кожне ім'я в списку DNSSL кодується з використанням роздільника з нульовим кодом і проміжних однобайтових міток, що визначають розмір даних, що слідують. Вразливість викликана тим, що в коді аналізу списку поле з розміром копіюється в змінну зі знаковим типом integer («len = data[pos]»). Відповідно, у разі вказівки у полі значення з виставленим старшим бітом, це значення буде сприйнято в умовному операторі як від'ємне число та перевірка на максимальний допустимий розмір («if (len > 63 || len + pos + 1 > datalen) {«) не спрацює, що призведе до виконання виклику memcpy з параметром, розмір копійованих даних при якому перевищує розмір буфера.

Віддалена вразливість в IPv6-стеку OpenBSD
Віддалена вразливість в IPv6-стеку OpenBSD


Джерело: opennet.ru

Додати коментар або відгук