Проблемы в systemd и Apache httpd при обработке DNS-имён с символом подчёркивания

Администраторы ресурсов, использующих имена хостов с символом подчёркивания, столкнулись с проблемами, проявляющимися в новых выпусках systemd и Apache httpd, и вызванными неоднозначной трактовкой требований к именам в DNS.

В соответствии с RFC 1123 в DNS запрещено использовать символ подчёркивания в именах хостов, но разрешено в именах меток. Т.е. в записях типа «A» и «MX», а также в содержимом полей «SOA» и «NS» символы подчёркивания недопускаются, но в соответствии с RFC-2782 разрешены в полях подобных «TXT» и «SRV», что активно используется, например, в системе DomainKeys. Обычно клиентское и серверное ПО достаточно лояльно относится к символу »_» в именах хостов, не требуя жесткого следования RFC, поэтому обиходе часто встречаются поддомены с символом подчёркивания, например, в популярном на западе сервисе доставки видео Netflix используются имена подобные «ipv6_1-cxl0-c088.1.lhr004.ix.nflxvideo.net».

Проблемы всплыли после формировния новых выпусков systemd и Apache httpd. В systemd 234 была добавлена экспериментальная поддержка использования библиотеки libidn2 вместо libidn для обработки доменных имён с символами национальных алфавитов. При сборке c libidn2 в systemd-resolver применялся предлагаемый в libidn2 фильтр имён хостов, который просто вырезал символ »_», что привело к проблемам с использованием сервиса Netflix на клиентских систмах с systemd-resolver. Проблема уже решена в libidn2 и войдёт в состав следующего обновления. Для systemd также выпущен патч, обходящий проблему при использовании старых версий libidn2.

Администраторы серверных систем столкнулись с похожей проблемой при переходе на Apache 2.4.25 или установке в RHEL/CentOS обновления httpd-2.2.15–60. В рамках устранения уязвимости CVE-2016–8743 код разбора HTTP-заголовков был приведён в строгое соответствие с RFC-7230. В случае наличия некорректного заголовка, оформление параметров которого не соответстует требованиям стандарта, теперь выдаётся ошибка 500 «Bad Request». В основном исправление было нацелено на блокирование использования закодированных символов пробелов к именах, но за одним было запрещено и применение других недопустимых символов, в том числе подчёркивания. Таким образом после установки обновления, перестали обрабатываться запросы к хостам, в именах которых присутствует символ »_». Для обхода проблемы можно использовать настройку «HttpProtocolOptions Unsafe».

©  OpenNet