Защитная памятка по http4k и GHSA-p28p-j94q-pg32: граница версий, безопасный synthetic-тест, матрица наблюдений, stop-критерий, канарейка, возврат и очищенный пакет владельцу без опасного payload.
Решение для http4k
Полезный вывод этой проверки — воспроизводимый verdict с понятным путём назад. Опубликованная advisory GHSA-p28p-j94q-pg32 подтверждает следующий технический класс: DigestAuthProvider.verify не сопоставлял uri из Authorization response с фактическим request URL, нарушая per-URI binding. Advisory отделяет область версий — ветка 6.x ниже 6.50.0.0, ветка 5.x ниже 5.42.0.0 и legacy 4.x из advisory — но не говорит, установлен ли компонент у конкретной команды и достижим ли проблемный путь. Рабочее правило: стартовый статус всегда unknown. Его меняют только при повторе сопоставления фактически загруженного runtime, включённой функции и evidence из первичного первичного свидетельства. Операционный вопрос формулируется без обещаний: можно ли безопасно показать, что исправленный http4k сохраняет штатную функцию и закрывает именно описанную границу? Ответ нельзя строить по одному номеру в manifest, тишине журнала или зелёному health-check. Рабочий лист именно для этой темы разворачивает цепочку без универсальных подстановок. Зафиксированный механизм: DigestAuthProvider.verify не сопоставлял uri из Authorization response с фактическим request URL, нарушая per-URI binding. Версионная отсечка: ветка 6.x ниже 6.50.0.0, ветка 5.x ниже 5.42.0.0 и legacy 4.x из advisory. Локальная процедура наблюдения: в локальном realm создать две безобидные routes и disposable credential; корректный digest для route A принимается только на A, тот же header на route B отвергается. Её нормальный защитный исход: A отвечает при повторе корректной проверки, перенос на B не проходит, журнал не сохраняет credential или полный digest. Недопустимое расширение опыта сформулировано заранее: понадобится перехват настоящего заголовка, рабочий realm или публикация nonce и response values. Для при повторедующей независимой сверки владелец заполняет поля «realm | request URI | digest URI | nonce class | auth result | route» и выполняет remediation «для 6.x перейти на http4k-security-digest 6.50.0.0 или соответствующую patched-версию ветки». Подобная доказательная цепочка связывает причину, версию, измерение, отказ, сохранение функции и возврат именно для http4k; если хотя бы одно звено отсутствует, уверенность не повышают и решение остаётся на повторной проверке.
Граница применимости
Инвентарь собирают по схеме «realm | request URI | digest URI | nonce class | auth result | route». Для каждой реплики отдельно записывают loaded version, digest артефакта, способ resolution зависимости, owner и доступность функции. Lockfile, image tag и панель обновления являются указателями, а не доказательством работающего кода. Подтверждённая remediation-опора: для 6.x перейти на http4k-security-digest 6.50.0.0 или соответствующую patched-версию ветки. Когда версия видна только в файле сборки или не удалось связать process с артефактом, вывод остаётся blocked. В журнал не переносят hostname, IP, usernames, cookies, токены, полные environment, пользовательские объекты и содержимое базы. Такая дисциплина отличает not affected by reachability от простого отсутствия жалоб.
Минимальный изолированный стенд
Стенд должен быть одноразовым, без внешних пользователей и с жёстким лимитом времени, памяти, файлов или событий. Безопасный regression-класс для этой темы: в локальном realm создать две безобидные routes и disposable credential; корректный digest для route A принимается только на A, тот же header на route B отвергается. На входе выполняют положительный контроль, затем меняют ровно один параметр для отрицательного, при повторе чего повторяют нормальную операцию. Expected outcome записывается до запуска; observed outcome — при повторе, без подгонки. Никакой вывод теста здесь не заявляется как уже полученный: это процедура, которую владельцу компонента ещё предстоит выполнить в своей среде. Для cleanup заранее задают удаление synthetic fixtures и возврат исходной конфигурации песочницаа.
Наблюдения до и после
До обновления оставляют baseline по тем же полям: realm | request URI | digest URI | nonce class | auth result | route. После установки исправления повторяют идентичный harness и сравнивают не только ответ проблемной ветви, но и обычную функцию, resource ceiling и следующую операцию. Целевой признак сформулирован конкретно: A отвечает при повторе корректной проверки, перенос на B не проходит, журнал не сохраняет credential или полный digest. Timeout сам по себе двусмыслен — он может означать защитный отказ, сломанный маршрут или потерю наблюдаемости. Рабочее правило: required evidence включает status, очищенный reason, digest, счётчик перезапусков и отсутствие нежелательного изменения состояния. Когда положительный контроль перестал работать, отрицательный ответ нельзя объявить защитой.
Развилка вердикта
Verdict passed допустим только при одновременном выполнении четырёх условий: runtime входит в исправленную область, нормальный сценарий успешен, ограниченный отрицательный сценарий получает ожидаемый ранний отказ, а состояние при повторе опыта совпадает с baseline. Failed означает нарушение хотя бы одного проверяемого инварианта. Blocked выбирают, если неизвестны loaded version, reachability или наблюдаемость. Специальная строка решения для http4k — «realm | request URI | digest URI | nonce class | auth result | route». Стоп-линия также предметна: понадобится перехват настоящего заголовка, рабочий realm или публикация nonce и response values. При её достижении опыт прекращают, оставляют только обезличенный error-class и не расширяют вход ради наглядности.
Канарейка и возврат
Изменение выпускают одной канарейкой: для 6.x перейти на http4k-security-digest 6.50.0.0 или соответствующую patched-версию ветки. Рядом должны лежать прежний digest, совместимый snapshot и проверенная команда возврата. Code rollback и state rollback отмечают раздельно, поскольку старый бинарник не обязательно понимает уже изменённое состояние. На канарейке вновь выполняют положительный и отрицательный контроли, затем выдерживают малое окно наблюдения. Распространение останавливают при росте ошибок, ресурсов, restart counter, при изменении штатного вывода или утрате telemetry. Исчезновение исходного симптома без сохранности нормальной функции не является основанием для общего зелёного verdict.
Пакет владельцу
Узкий очищенный пакет содержит GHSA-p28p-j94q-pg32, URL advisory и первичной release/registry-страницы, версии до и при повторе, SHA-256 или image digest, timestamp Europe/Moscow, expected/observed и строку «realm | request URI | digest URI | nonce class | auth result | route». Добавляют длительность малого окна, статус snapshot и один обезличенный reason. Удаляют абсолютные домашние пути, адреса, идентификаторы аккаунтов, ключи, session values, сырой payload и пользовательские документы. Источники подтверждают класс дефекта и существование patched поставки 6.50.0.0, но не заменяют локальную проверку, не доказывают затронутость конкретной установки и ничего не обещают о будущей индексации или позициях страницы.
Материал подготовлен редакцией VOne с помощью ИИ по открытым официальным и первичным источникам; факты, версии и ссылки перепроверены. Реальные пользовательские данные, активные опасные payload и вымышленные результаты тестов не использовались.
Источники и проверка
- GitHub Advisory Database: GHSA-p28p-j94q-pg32 проверено 2026-08-30
- Maven Central: http4k Digest 6.50.0.0 проверено 2026-08-30
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.