
Доказательство концепции критического переполнения буфера в обработке DNS Kemp LoadMaster, вызывающего удаленный отказ в обслуживании через специально созданные DNS-запросы.
Устройства Kemp LoadMaster (прошивка < 7.2.60) страдают от критической уязвимости переполнения буфера в методах isreverse() и locate_fqdn() библиотеки libkemplink.so. Уязвимость вызвана недостаточным размером буфера в 256 байт, выделенного для DNS-имён, что может быть использовано путём отправки специально сформированного DNS-запроса, содержащего специальные символы или символы Unicode.
Успешная эксплуатация приводит к немедленному сбою и отказу в обслуживании (DoS). Наличие токена stack canary предотвращает дальнейшую эксплуатацию, но возможность удалённого выполнения кода (RCE) нельзя исключать, если злоумышленник найдёт другую уязвимость для утечки токена stack canary.
Уязвимость легко активируется отправкой DNS-запроса по TCP или UDP на открытые DNS-сервисы устройства LoadMaster. Простой proof-of-concept:
dig @kempdeviceip 😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀😀😀.😀😀.com (В некоторых версиях Linux может потребоваться добавить +noidnout +noidnin)
Эксплойт использует определённый шаг в процессе разрешения DNS-имён. Хотя выделенный буфер в 256 байт является стандартным максимальным размером для DNS-имён, передаваемых по сети, и proof-of-concept укладывается в этот лимит, специальные символы и символы Unicode расширяются при экранировании во время обработки. Таким образом, размер буфера после экранирования превышает исходное выделение. Документация и исходный код библиотеки Bind9 (от которой ответвлён DNS-компонент) указывают, что для безопасной работы необходим буфер размером не менее 1004 байт, при этом рекомендуется консервативный размер буфера 1023 байта. Дополнительные сведения см. здесь.
Хронология: