К обсуждениям

Smarty fetch: повторная проверка trusted_uri после redirect

Редакция VOne Технологии

Защитная проверка Smarty по GHSA-cq55-c7wv-pxmq: runtime inventory, обратимый fixture, матрица PASS/FAIL/Unknown, stop-rule и минимальный пакет доказательств без production-данных.

Короткий ответ для Smarty

Вердикт строится на наблюдаемом контракте, а не на одном баннере версии. Для Smarty отдельная пользовательская боль такова: разрешённый initial URL может перенаправить запрос к адресу вне trusted_uri. Рабочий защитный инвариант: каждый redirect hop заново проходит scheme/host/IP policy либо redirect полностью запрещён. Advisory GHSA-cq55-c7wv-pxmq задаёт inventory-границу «smarty/smarty: >= 5.0.0, < 5.8.2; исправлено в 5.8.2; smarty/smarty: < 4.5.7; исправлено в 4.5.7», но совпадение версии означает только candidate. Оно не доказывает включённую функцию, достижимый маршрут или наличие инцидента. Минимальный ответ должен сохранить строку наблюдения «hop | requested URL | resolved address | policy | request count | verdict» и завершиться по условию «deny target получил запрос, resolver вышел наружу или fixture касается metadata endpoint». Такой формат не смешивает диагностику с эксплуатацией и позволяет повторить проверку после обновления.

Узкая граница темы: {fetch} при активной Security policy

Граница именно этой страницы — «{fetch} при активной Security policy», а наблюдаемая проблема — «разрешённый initial URL может перенаправить запрос к адресу вне trusted_uri». Не подменяйте её общим аудитом Smarty и не переносите вывод на соседние функции. Сначала докажите условие «каждый redirect hop заново проходит scheme/host/IP policy либо redirect полностью запрещён» на контрольном входе, затем повторите с единственным изменённым параметром из fixture «два локальных HTTP stub: allowlisted origin и отдельный deny target без доступа во внешнюю сеть». Доказательство пригодно для ревью только тогда, когда в одной строке видны «hop | requested URL | resolved address | policy | request count | verdict». Отдельно пометьте, какой столбец получен из runtime, какой — из configuration snapshot, а какой является выводом редактора. Условие остановки сформулировано предметно: deny target получил запрос, resolver вышел наружу или fixture касается metadata endpoint. Если оно сработало, verdict остаётся Unknown или FAIL по фактически измеренной границе; нельзя расширять его до утверждения о всём продукте. После исправления тот же кейс должен подтвердить, что каждый redirect hop заново проходит scheme/host/IP policy либо redirect полностью запрещён. Это и есть самостоятельная практическая ценность материала, отличающая его от соседних advisory.

Паспорт проверочного кейса GHSA-cq55-c7wv-pxmq

Паспорт кейса GHSA-cq55-c7wv-pxmq. Объект проверки: {fetch} при активной Security policy. Нежелательное состояние описывается конкретно: разрешённый initial URL может перенаправить запрос к адресу вне trusted_uri. Ожидаемое безопасное состояние: каждый redirect hop заново проходит scheme/host/IP policy либо redirect полностью запрещён. Контрольная лаборатория: два локальных HTTP stub: allowlisted origin и отдельный deny target без доступа во внешнюю сеть. Единица доказательства не является скриншотом или общим health-check; это строка «hop | requested URL | resolved address | policy | request count | verdict». Красная линия эксперимента: deny target получил запрос, resolver вышел наружу или fixture касается metadata endpoint. В отчёте эти пять формулировок оставляют без расширительных синонимов, чтобы следующий инженер мог сопоставить regression result с тем же объектом. Если меняется {fetch} при активной Security policy, создаётся новый кейс, а не дописывается вывод сюда. Если меняется только версия Smarty, повторяют этот паспорт и прикладывают новый digest. Тем самым GHSA-cq55-c7wv-pxmq остаётся отдельным поисковым ответом на боль «разрешённый initial URL может перенаправить запрос к адресу вне trusted_uri», а не механической страницей о продукте.

Ожидаемый before/after для GHSA-cq55-c7wv-pxmq

Ожидаемый before/after для GHSA-cq55-c7wv-pxmq формулируется через один переход. До исправления проверяется только возможность нарушения «каждый redirect hop заново проходит scheme/host/IP policy либо redirect полностью запрещён» на безопасном marker; после исправления тот же marker должен быть отклонён до изменения состояния. Для объекта «{fetch} при активной Security policy» сохраните исходный hash fixture, результат «hop | requested URL | resolved address | policy | request count | verdict» и конечный hash. Расхождение разбирают по причине «разрешённый initial URL может перенаправить запрос к адресу вне trusted_uri», не добавляя гипотезы о других подсистемах Smarty. Нулевой побочный вызов важнее текста ошибки. Если произошло «deny target получил запрос, resolver вышел наружу или fixture касается metadata endpoint», доказательство считается неполным и требует владельца стенда. Такой before/after позволяет повторно проверить именно {fetch} при активной Security policy после официального обновления и не выдаёт общий security verdict для всей установки.

Inventory и достижимость: {fetch} при активной Security policy

Зафиксируйте фактически загруженный артефакт, а не только декларацию зависимости: для {fetch} при активной Security policy нужны resolved version, digest либо revision, способ установки и конфигурационный флаг. Сопоставьте эти данные с границей «smarty/smarty: >= 5.0.0, < 5.8.2; исправлено в 5.8.2; smarty/smarty: < 4.5.7; исправлено в 4.5.7». Классифицируйте результат как absent, out_of_range, candidate или unknown. Absent требует доказательства, что компонент отсутствует в runtime; out_of_range — точной версии; candidate — одновременно версии и достижимости функции; unknown остаётся честным исходом при неполном provenance. Для Smarty дополнительно запишите owner проверки и момент снимка. Backport считается только при наличии commit и regression test, а дата контейнера, HTTP health или название образа сами по себе границу не закрывают.

Обратимый fixture для GHSA-cq55-c7wv-pxmq

Используйте только обратимый стенд: два локальных HTTP stub: allowlisted origin и отдельный deny target без доступа во внешнюю сеть. До запуска отключите реальные учётные данные и внешние назначения, назначьте отдельный temporary root либо in-memory store и включите счётчики побочных вызовов. Проверяйте непосредственно {fetch} при активной Security policy; соседние функции не расширяйте в эту статью. Контрольный случай должен проходить, граничный — получать документированный отказ, а состояние после каждого шага возвращаться к исходному hash. Собирайте колонки «hop | requested URL | resolved address | policy | request count | verdict». Немедленно остановитесь, если deny target получил запрос, resolver вышел наружу или fixture касается metadata endpoint. Такой stop-rule важнее попытки получить зрелищный результат: он удерживает эксперимент в low-risk режиме и не переносит вредные данные в production.

Матрица PASS, FAIL, Unknown и N/A

Матрица решения должна различать как минимум четыре состояния. PASS: resolved-артефакт исправлен либо контроль на проверяемой границе отклоняет граничный input до side effect. FAIL: версия попадает в область advisory, путь достижим и измерение нарушает сформулированный инвариант. UNKNOWN: нет SBOM, runtime provenance, конфигурации или наблюдаемой точки; этот исход нельзя повышать до PASS. NOT_APPLICABLE: {fetch} при активной Security policy доказанно не используется. Для темы «разрешённый initial URL может перенаправить запрос к адресу вне trusted_uri» не объединяйте разные строки в один средний статус: version, reachability, policy decision и side-effect counter хранятся отдельно. После обновления повторите тот же fixture и сравните строки до/после; именно стабильный regression result, а не отсутствие жалоб, закрывает проверку.

Stop-rule, откат и пакет для поддержки

Пакет для владельца Smarty минимизируйте: version/digest, sanitized configuration fragment, точное имя входной точки, одна таблица «hop | requested URL | resolved address | policy | request count | verdict», monotonic timestamps и итог PASS/FAIL/Unknown. Не прикладывайте пароли, токены, адреса пользователей, реальные имена репозиториев, полный environment dump или сырые логи. Сначала применяют документированное обновление и проверяют штатные функции; ручные patch и расширение сетевых прав требуют отдельного change contract. Если сработало условие «deny target получил запрос, resolver вышел наружу или fixture касается metadata endpoint», эксперимент прекращают, сохраняют только обезличенные артефакты и передают вопрос product/security owner. Rollback должен возвращать fixture, а не откатывать production-данные. После исправления сохраните regression case с неопасным marker: он пригодится для последующих обновлений без повторения рискованного сценария.

Материал подготовлен редакцией VOne с помощью автоматизированного черновика; технические границы, даты, версии и ссылки вручную сверены по указанным первичным страницам. Текст не воспроизводит чужие публикации и не содержит эксплуатационных шагов.

Источники и проверка

Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.

Ответы

0 опубликовано
Ответов пока нет. Вы можете начать обсуждение.

Ваш ответ

Добавьте свой опыт или уточнение по теме.

Вы публикуете как Аноним Аватар отличает разговоры, но не раскрывает личные данные.

Ответ появится сразу. Не публикуйте личные данные, ключи и приватные ссылки.