Защитная проверка Caddy forward_auth with php_fastcgi по ghsa-f59h-q822-g45g: применимость, безопасный fixture, client-header / trusted-copy / normalized-cgi-name / collision-count / final-value-source, pass-rule и stop-rule без production-данных.
Какая граница сломана в Caddy forward_auth with php_fastcgi
Пользовательская проблема здесь узкая: underscore alias переживает удаление trusted header и после CGI normalization совпадает с ним. Механизм по прямой upstream advisory: Два разных HTTP header могут стать одним CGI variable после замены дефиса на подчёркивание. Trust decision должен учитывать post-normalization namespace и collision. Поэтому проверяем не общий класс уязвимостей, а invariant «все алиасы trusted identity header удаляются до copy, а нормализованное имя имеет единственный auth-gateway source». GitHub Reviewed Advisory ghsa-f59h-q822-g45g опубликована 2026-06-16, обновлена 2026-07-24; package boundary: «go/github.com/caddyserver/caddy/v2 < 2.11.4; first patched 2.11.4». Эти факты не доказывают affected code в конкретном fork, эксплуатацию, популярность или поисковый спрос.
Сначала докажите применимость сборки и пути
Запишите source package, runtime version, build digest, commit provenance, feature/config state и роль, достигающую Caddy forward_auth with php_fastcgi. Отдельно отметьте самый ранний side effect. Нормальный контроль: без alias final value приходит только от fake auth gateway. Если component заменён, feature выключен или backport подтверждён по diff, укажите not-reachable/not-affected с доказательством. Если provenance неизвестна, статус unknown; номер версии из «go/github.com/caddyserver/caddy/v2 < 2.11.4; first patched 2.11.4» остаётся фильтром, а не готовым выводом.
Проведите один обратимый лабораторный опыт
Безопасный fixture: В adapter pipeline передать trusted X-User и client X_User/варианты регистра, затем записать FastCGI params без backend. Все значения синтетические; persistence — memory adapter или rollback transaction, filesystem — mkdtemp, сеть отключена либо заменена recorder. До запуска сохраните input digest, ожидаемый pass-rule и нулевые counters. После — строку «client-header / trusted-copy / normalized-cgi-name / collision-count / final-value-source», final-state digest и cleanup proof. Эксплуатационный payload, реальный credential, массовый перебор и production traffic не нужны.
Решение по строке client-header / trusted-copy / normalized-cgi-name / collision-count / final-value-source
Сначала убедитесь, что control действительно достиг нужной ветви. Затем читайте «client-header / trusted-copy / normalized-cgi-name / collision-count / final-value-source» слева направо: где нормализован input, когда применена policy и был ли чувствительный action. PASS только если client alias не влияет на final CGI identity, collision даёт deny или trusted overwrite после очистки. Отсутствие exception или один HTTP status недостаточны. При async/race boundary используйте фиксированные barriers и один малый повтор, а не нагрузочный тест. Любой необъяснимый side effect переводит результат в fail/unknown до расследования.
Проверьте patch provenance и красные флаги
Исправление обязано реализовать смысл «все алиасы trusted identity header удаляются до copy, а нормализованное имя имеет единственный auth-gateway source», а не только изменить номер релиза. На одинаковом fixture сравните affected и candidate build, сохранив client-header / trusted-copy / normalized-cgi-name / collision-count / final-value-source. Красные флаги: policy после side effect, несовпадение verified/effective target, fail-open при ошибке, другой code path для transport/формата или отсутствие negative control. Production update не разрешён этой статьёй: требуется отдельный rollout с backup, canary, readiness, журналами и rollback.
Stop-rule, support packet и дерево решения
Stop-rule: не запускать PHP/FastCGI и не использовать identity пользователя. Также остановитесь при privilege prompt, данных вне fixture, необратимой записи, росте ресурсов, отсутствии normal control или невозможности cleanup. В обезличенный support packet положите ghsa-f59h-q822-g45g, product/component, version/build provenance, «go/github.com/caddyserver/caddy/v2 < 2.11.4; first patched 2.11.4», строку «client-header / trusted-copy / normalized-cgi-name / collision-count / final-value-source», expected/observed, stop reason и обе source URL. Дерево: patched provenance — not-applicable; недостижимая ветвь — not-reachable; pass-rule выполнен — ready-for-reviewed-update; наблюдается «underscore alias переживает удаление trusted header и после CGI normalization совпадает с ним» — fail; иначе unknown. Ни один лист не обещает универсальную безопасность или индексацию.
Материал подготовлен редакцией VOne с помощью ИИ; даты, диапазоны, прямые источники, безопасный fixture, privacy-границы и отсутствие рекламных обещаний затем перепроверены.
Источники и проверка
- GitHub Reviewed Advisory ghsa-f59h-q822-g45g проверено 2026-08-31
- Primary upstream for Caddy forward_auth with php_fastcgi проверено 2026-08-31
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.