Вразливість у uClibc та uClibc-ng, що дозволяє підмінити дані в кеші DNS

У стандартних Сі-бібліотеках uClibc і uClibc-ng, що застосовуються в багатьох вбудовуваних і портативних пристроях, виявлено вразливість (CVE не присвоєно), що дозволяє підставити фіктивні дані в кеш DNS, що можна використовувати для заміни в кеші IP-адреси довільного домену і перенаправлення до домену на сервер зловмисника.

Проблема зачіпає різні Linux-прошивки для маршрутизаторів, точок доступу та пристроїв інтернет-речей, а також Linux-дистрибутиви для систем, що вбудовуються, такі як OpenWRT і Embedded Gentoo. Зазначається, що вразливість проявляється в пристроях багатьох виробників (наприклад, uClibc використовується в прошивках Linksys, Netgear і Axis), але так як у uClibc і uClibc-ng вразливість залишається невиправленою, детальні відомості про конкретні пристрої та виробників, у продуктах яких є проблема, доки не розголошуються.

Вразливість викликана використанням коду відправки DNS-запитів передбачуваних ідентифікаторів транзакції. Ідентифікаційний номер запиту DNS вибирався шляхом простого збільшення лічильника без застосування додаткової рандомізації номерів портів, що дозволяло домогтися отруєння кешу DNS через попереджувальне відправлення UDP-пакетів з фіктивними відповідями (відповідь буде прийнято, якщо він прийшов раніше відповіді реального сервера) і включає коректний На відміну від запропонованого у 2008 році методу Камінського, ідентифікатор транзакції навіть не потрібно вгадувати, оскільки він спочатку передбачуваний (спочатку виставляється значення 1, яке при кожному запиті збільшується, а не вибирається випадковим чином).

Вразливість у uClibc та uClibc-ng, що дозволяє підмінити дані в кеші DNS

У специфікації захисту від підбору ідентифікатора рекомендується додатково застосовувати випадковий розподіл номерів вихідних мережевих портів, з яких надсилаються DNS-запити, що компенсує недостатньо великий розмір ідентифікатора. При включенні рандомізації портів на формування фіктивної відповіді крім підбору 16 бітного ідентифікатора необхідно підібрати номер мережного порту. У uClibc і uClibc-ng подібна рандомізація не включалася явно (при виклику bind не вказувався випадковий вихідний UDP порт) і застосування залежало від налаштувань операційної системи.

При відключенні рандомізації потів визначення ідентифікатора запиту, що інкрементується, відзначається як тривіальне завдання. Але навіть у разі застосування рандомізації, атакуючому необхідно лише вгадати мережевий порт з діапазону 32768-60999, для чого можна використовувати масоване одночасне відправлення фіктивних відповідей різними мережевими портами.

Вразливість у uClibc та uClibc-ng, що дозволяє підмінити дані в кеші DNS

Наявність проблеми підтверджена у всіх актуальних випусках uClibc та uClibc-ng, включаючи найсвіжіші версії uClibc 0.9.33.2 та uClibc-ng 1.0.40. У вересні 2021 року інформацію про вразливість було надіслано до CERT/CC для узгодженої підготовки виправлень. У січні 2022 року дані про проблему було передано понад 200 виробникам, які співпрацюють із CERT/CC. У березні була спроба окремо зв'язатися з супроводжуючим проектом uClibc-ng, але він відповів, що не в змозі виправити вразливість самостійно і рекомендував публічно розкрити інформацію про проблему, розраховуючи отримати допомогу в розробці виправлення від спільноти. Із виробників про випуск оновлення з усуненням уразливості оголосив NETGEAR.

Джерело: opennet.ru

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