Как безопасно проверить Routinator: RRDP XML разбирается без DTD: точная версия, reachability, обратимый fixture, измеримые PASS/FAIL/Unknown и stop-rule без production-данных.
Граница проблемы: Routinator: RRDP XML разбирается без DTD
Самостоятельная пользовательская боль: DTD внутри полученного RRDP XML приводит parser к crash вместо безопасного отказа от объекта. Защитное правило для проверки сформулировано заранее: «как безопасно проверить что rrdp parser запрещает dtd external entities и возвращает scoped repository error без panic в routinator rrdp xml ingestion без production данных». GitHub Reviewed Advisory ghsa-5qf9-cf9c-hjc6 описывает: «Routinator crashes when encountering maliciously crafted RRDP XML files»; запись опубликована 2026-06-08 и обновлена 2026-06-12. Эти сведения подтверждают технический сигнал и upstream-контекст, но не доказывают наличие затронутой версии, достижимость пути, эксплуатацию конкретной системы или популярность запроса. Поэтому итог по локальной среде начинается как Unknown и меняется только после inventory, reachability и изолированного теста.
Сверьте версии и достижимость для routinator-rrdp-xml-dtd-disabled
До fixture зафиксируйте компонент, конфигурацию и достижимость механизма. Boundary из reviewed record и прямого upstream-источника: «rust/routinator <= 0.15.1; first patched 0.15.2». Разнесите состояния в таблице: компонента нет; версия вне диапазона; исправление backported; функция выключена; путь недостижим; provenance неясен; нужен fixture. Рабочий набор полей именно для этой темы: XML feature, DTD present, external fetch calls, parser result, repository status, process liveness. Banner, lockfile без resolved tree или совпадение имени пакета не являются доказательством. Если схема версий форка не сопоставима с upstream, оставьте Unknown и запросите build provenance вместо категоричного PASS.
Обратимый тест без production-данных: XML feature
Безопасный fixture: parser-level fixtures содержат минимальный safe notification и документ с inert DTD marker; сеть и repository cache отключены. До запуска запишите expected invariant, лимиты времени и памяти, допустимые side effects и способ полной очистки. Добавьте положительный control для штатного пути и отрицательный case, который меняет только одну проверяемую границу. Используйте фиктивные identifiers и временное состояние; токены, реальные адреса, пользовательские данные, рабочие конфиги и внешние цели исключены. После каждого case удалите temp-state и повторите малый control: он подтверждает, что отказ относится к механизму, а не к сломанному harness.
Зафиксируйте доказательство по полям process liveness
Артефакт проверки хранит только минимизированные поля: XML feature, DTD present, external fetch calls, parser result, repository status, process liveness. Для каждого поля отметьте источник: configuration, измерение, parser output или решение policy. Критерий PASS определён до запуска: DTD rejected до resolution, external calls=0, control после reject обрабатывается нормально. FAIL допустим только если запрещённый эффект наблюдается в изоляции, boundary и runtime-mode совпали, а оба controls дают ожидаемый результат. Во всех остальных случаях ставьте Unknown или Inconclusive. Не прикладывайте сырые логи: достаточно hash fixture, версии, обезличенной матрицы, результата controls и времени проверки.
Проверьте причинность вывода о как безопасно проверить что rrdp parser запрещает dtd external entities и возвращает scope
Рецензент должен связать наблюдение «DTD внутри полученного RRDP XML приводит parser к crash вместо безопасного отказа от объекта» с конкретной границей «как безопасно проверить что rrdp parser запрещает dtd external entities и возвращает scoped repository error без panic в routinator rrdp xml ingestion без production данных», а не с похожим внешним симптомом. Попросите показать, где в resolved build применяется boundary «rust/routinator <= 0.15.1; first patched 0.15.2», почему операция «parser-level fixtures содержат минимальный safe notification и документ с inert DTD marker; сеть и repository cache отключены» обратима и какие значения XML feature, DTD present, external fetch calls, parser result, repository status, process liveness получены измерением. Затем отдельно объясните, почему результат «DTD rejected до resolution, external calls=0, control после reject обрабатывается нормально» проверяет и отказ, и штатный control. Если хотя бы одно звено отсутствует, вывод возвращается в Unknown; severity advisory нельзя переносить на локальную установку автоматически.
Особенность механизма routinator-rrdp-xml-dtd-disabled
RRDP parser должен отклонять DTD ещё до попытки разрешить сущность. Подставьте inert marker и resolver recorder: число external fetch calls обязано оставаться нулём. Затем тем же parser instance обработайте минимальный безопасный notification control, чтобы отделить защитный отказ от повреждения состояния. Сеть и repository cache отключены; fixture подтверждает порядок XML feature gates, не демонстрируя эксплуатационную цепочку.
Обновление, повторная проверка и граница остановки
Предпочтительное действие — перейти на исправленную upstream-ветку из boundary «rust/routinator <= 0.15.1; first patched 0.15.2», затем повторить тот же fixture и штатный control. Временная мера допустима только если разрывает описанный механизм, имеет владельца, срок действия, наблюдаемый сигнал и проверяемый rollback. Обязательный stop-rule: не размещать XML на RRDP server и не разрешать external entity resolution.. При его срабатывании эксперимент прекращают, не расширяя доступ и не повышая нагрузку. В обращение к maintainer включите provenance, feature state, матрицу полей и ссылки на reviewed advisory и прямой upstream-источник; эксплуатационные инструкции и данные реальной среды исключите.
Минимальный пакет для поддержки по routinator-rrdp-xml-dtd-disabled
Соберите короткую причинную карточку: боль — «DTD внутри полученного RRDP XML приводит parser к crash вместо безопасного отказа от объекта»; invariant — «как безопасно проверить что rrdp parser запрещает dtd external entities и возвращает scoped repository error без panic в routinator rrdp xml ingestion без production данных»; версия — «rust/routinator <= 0.15.1; first patched 0.15.2»; операция — «parser-level fixtures содержат минимальный safe notification и документ с inert DTD marker; сеть и repository cache отключены»; поля — XML feature, DTD present, external fetch calls, parser result, repository status, process liveness; PASS — «DTD rejected до resolution, external calls=0, control после reject обрабатывается нормально». Добавьте hash теста, результат positive/negative controls, cleanup result и причину, по которой тест не касается внешней системы. Не включайте IP, токены, реальные имена, ключи, содержимое документов или полные логи. Если direct source подтверждает только release context, так и укажите: он не является доказательством локальной уязвимости. Граница остановки остаётся неизменной: не размещать XML на RRDP server и не разрешать external entity resolution..
Материал подготовлен редакцией VOne с помощью ИИ; даты, диапазоны, прямые источники, безопасный fixture, privacy-границы и отсутствие рекламных обещаний затем перепроверены.
Источники и проверка
- GitHub Reviewed Advisory ghsa-5qf9-cf9c-hjc6 проверено 2026-08-31
- Прямой upstream-источник для Routinator: RRDP XML разбирается без DTD проверено 2026-08-31
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.