Проблемы в systemd и Apache httpd при обработке DNS-имён с символом подчёркивания
В соответствии с RFC 1123 в DNS запрещено использовать символ подчёркивания в именах хостов, но разрешено в именах меток. Т.е. в записях типа "A" и "MX", а также в содержимом полей "SOA" и "NS", символы подчёркивания не допускаются, но, в соответствии с RFC-2782, они разрешены во вспомогательных полях, подобных "TXT" и "SRV", что активно используется в системе DomainKeys (например, имя "_domainkey.ebay.com" корректно в контексте применения как метки с TXT-записью в DNS, но будет некорректно если для него применить A-запись).
Обычно клиентское и серверное ПО достаточно лояльно относится к символу "_" в именах хостов, не требуя жесткого следования RFC, поэтому в обиходе часто встречается нецелевое применение поддоменов с символом подчёркивания. Например, в популярном на Западе сервисе доставки видео Netflix используются имена подобные "ipv6_1-cxl0-c088.1.lhr004.ix.nflxvideo.net" (применение не корректно, так как имя связано с записью "A" в DNS), а проект Fedora использует "_443._tcp.fedoraproject.org" (применение корректно, так как имя определено записью NSEC).
Проблемы всплыли после формировния новых выпусков systemd и Apache httpd. В systemd 234 была добавлена экспериментальная поддержка использования библиотеки libidn2 вместо libidn для обработки доменных имён с символами национальных алфавитов. При сборке c libidn2 в systemd-resolver применялся предлагаемый в libidn2 фильтр имён хостов, который просто вырезал символ "_", что привело к проблемам с использованием сервиса Netflix на клиентских системах с systemd-resolver. Проблема уже решена в libidn2 путем исключения IDN2_USE_STD3_ASCII_RULES из списка опций, применяемых по умолчанию, и войдёт в состав следующего обновления. Для systemd также выпущен патч, обходящий проблему при использовании старых версий libidn2.
Администраторы серверных систем столкнулись с похожей проблемой при переходе на Apache 2.4.25 или установке в RHEL/CentOS обновления httpd-2.2.15-60. В рамках устранения уязвимости CVE-2016-8743 код разбора HTTP-заголовков был приведён в строгое соответствие с RFC 7230. В случае наличия некорректного заголовка, оформление параметров которого не соответстует требованиям стандарта, теперь выдаётся ошибка 500 "Bad Request". В основном исправление было нацелено на блокирование использования закодированных символов пробелов в именах, но заодно было запрещено и применение других недопустимых символов, в том числе подчёркивания. Таким образом, после установки обновления перестали обрабатываться запросы к хостам, в именах которых присутствует символ "_". Для обхода проблемы в Apache 2.4.25 можно использовать настройку "HttpProtocolOptions Unsafe".
Дополнение: Проект GNU выпустил обновление библиотеки libidn2 2.0.3, поведение фильтров в котором приведено в соответствие с поведением библиотеки libidn. По умолчанию теперь отключен режим фильтрации IDN2_USE_STD3_ASCII_RULES, наличие которого привело к проблемам с неверной обработкой доменных имён с символом подчёркивания в systemd-resolver.
Источник: http://www.opennet.ru/opennews/art.shtml?num=46905
|
0 | Tweet | Нравится |
|