CVE-2026-50251
ŚrednieCVSS 5.3Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 18 - wyżej niż 18% wszystkich znanych CVE
Streszczenie
W NLnet Labs Unbound do wersji 1.25.1 włącznie, gdy włączona jest opcja 'unwanted-reply-threshold', rekordy glue 0.0.0.0/::0 mogą powodować pętlę, która prowadzi do czyszczenia pamięci podręcznej. Atakujący kontrolujący delegację może wielokrotnie wywołać czyszczenie cache bez wysyłania spoofowanych pakietów.
Ocena ryzyka
Ryzyko polega na ciągłym czyszczeniu pamięci podręcznej DNS, co obniża wydajność i może prowadzić do odmowy usługi (DoS) dla klientów korzystających z tego resolvera.
Rekomendacja
Zaleca się aktualizację Unbound do wersji 1.25.2 lub nowszej, która zawiera poprawkę. Tymczasowo można wyłączyć opcję 'unwanted-reply-threshold'.
Inne podatności w Unbound
Zobacz wszystkie- CVE-2026-50252Krytyczne
W bibliotece Unbound od wersji 1.4.22 do 1.25.1 stwierdzono podatność na zatruwanie pamięci podręcznej DNS. Problem wynika z deterministycznego przypisywania zakresów portów UDP do wątków roboczych przy włączonej opcji SO_REUSEPORT, co umożliwia atakującemu przewidzenie portu źródłowego i obniżenie entropii transakcji DNS.
- CVE-2026-42960Krytyczne
NLnet Labs Unbound do wersji 1.25.0 włącznie jest podatny na zatruwanie pamięci podręcznej poprzez promiscuous rekordy w sekcji autorytatywnej. Atakujący może wstrzyknąć rekordy inne niż NS (np. MX) wraz z rekordami adresowymi, które Unbound buforuje, co prowadzi do zatrucia pamięci podręcznej. Wersja 1.25.1 zawiera poprawkę odrzucającą rekordy adresowe z sekcji dodatkowej, jeśli nie są one jawnie związane z rekordami NS.
- CVE-2026-33278Krytyczne
NLnet Labs Unbound od wersji 1.19.1 do 1.25.0 ma podatność w walidatorze DNSSEC polegającą na błędzie przypisania struktury podczas głębokiego kopiowania, co prowadzi do wiszącego wskaźnika i potencjalnego wykonania kodu.
- CVE-2026-56444Średnie
W Unbound od wersji 1.20.0 do 1.25.1, przy konfiguracji 'serve-expired: yes' i 'serve-expired-client-timeout > discard-timeout > 0', logika discard-timeout nieprawidłowo aktualizuje licznik odpowiedzi, co może doprowadzić do odrzucania nowych klientów i degradacji usługi. Atakujący może to wykorzystać, wysyłając zapytania do wolnej strefy autorytatywnej.
- CVE-2026-56416Średnie
W NLnet Labs Unbound do wersji 1.25.1, podczas budowania kanonicznej formy RDATA dla zestawu rekordów RRSIG-covered PX/RP/MINFO/SOA, walidator oblicza adres drugiej osadzonej nazwy domeny jako 'datstart + dname_valid(datstart, ...)' i przekazuje go bezpośrednio do 'query_dname_tolower()' bez sprawdzania, czy druga nazwa faktycznie występuje w RDATA. Atakujący prowadzący autorytatywny serwer DNSSEC może dostarczyć rekord z brakującą drugą nazwą domeny (np. rekord SOA) i spowodować, że 'query_dname_tolower()' będzie przetwarzać nieaktualne bajty w buforze 'env->scratch_buffer', wychodząc poza jego alokację sterty, jeśli 'msg-buffer-size' został zmniejszony. Prowadzi to do przepełnienia bufora sterty.
- CVE-2026-55991Średnie
W Unbound od wersji 1.22.0 do 1.25.1, zdalny, nieuwierzytelniony klient może wywołać asercję w libngtcp2 (jeśli skompilowano z asercjami) i zakończyć proces Unbound przez pojedyncze połączenie DoQ i jedno zapytanie DNS. Problem wynika z błędnego przekazania wartości '-1' do funkcji libngtcp2.
- CVE-2026-55990Średnie
W Unbound od wersji 1.7.0 do 1.25.1, gdy w konfiguracji DNSCrypt jest więcej certyfikatów niż kluczy, Unbound wypełnia pozostałe sloty danymi '0xdb' z alokatora libsodium. Nieuwierzytelniony klient wysyłający datagram UDP ≥68 bajtów z pierwszymi 8 bajtami '0xdb' na port DNSCrypt może spowodować awarię serwera.
- CVE-2026-55717Średnie
W Unbound od wersji 1.10.0 do 1.25.1, przy włączonej opcji 'serve-expired: yes' i regule 'response-ip' lub 'rpz-cname-override', zdalny klient kontrolujący delegowaną domenę może spowodować awarię demona. Problem wynika z niespójności w logice obsługi aliasów CNAME w funkcji serve-expired-client-timeout.
- CVE-2026-55708Niskie
W Unbound od wersji 1.6.0 do 1.25.1, polecenia 'view_local_data' i 'view_local_datas' w 'unbound-control' tworzą gołą strefę lokalną dla widoku bez domyślnych stref chronionych (np. RFC 1918 reverse, AS112, .onion, .localhost). Powoduje to, że zapytania o te nazwy są kierowane do publicznego DNS zamiast odpowiadane lokalnie, omijając politykę lokalną.
- CVE-2026-54478Niskie
W NLnet Labs Unbound od wersji 1.18.0 do 1.25.1, gdy Unbound nasłuchuje na interfejsie 'proxy-protocol-port' z włączoną opcją 'answer-cookie: yes', serwerowe ciasteczko SipHash (RFC 9018) jest obliczane na podstawie adresu sieciowego proxy, a nie adresu klienta zadeklarowanego w PROXYv2. Oznacza to, że jedno ciasteczko uzyskane przez dany węzeł proxy jest ważne dla wszystkich źródeł zadeklarowanych przez to proxy. Atakujący spoza ścieżki może zebrać jedno ciasteczko za pomocą jednego legalnego zapytania, a następnie odtworzyć je pod dowolnym sfałszowanym źródłem, omijając mechanizmy DNS Cookie.
Oryginalny opis (angielski, źródło NVD)
In NLnet Labs Unbound up to and including version 1.25.1, when 'unwanted-reply-threshold' is enabled (set to any value greater than zero), glue records of 0.0.0.0/::0 can short-circuit Unbound, on systems that can direct such traffic, by issuing DNS queries and receiving seemingly unwanted replies since the remote IP does not match the original source IP of 0.0.0.0/::0. This behavior keeps on looping for the glue records and pushing the counter to the configured 'unwanted-reply-threshold' that triggers a defensive cache clear. A malicious actor who controls a delegation that returns in-bailiwick glue of 0.0.0.0/::0 can drive the counter to the limit of 'unwanted-reply-threshold' to the threshold and trigger a cache clean of the message and rrset caches; at will, indefinitely, without sending a single spoofed packet. The iterator uses the 0.0.0.0/::0 glue, and a system that can route this (e.g., Linux kernel routes the datagram over loopback), Unbound's own listener answers from 127.0.0.1. Because of the mismatch of 0.0.0.0 and 127.0.0.1, in this example, Unbound accounts the reply as an unwanted (probably spoofed) answer. The counter resets to zero on every cache flush, so the attack loops forever.

