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

API Platform Core: проверка изоляции cache normalizer между пользователями

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

Защитная инструкция по API Platform Core и ghsa-pjhx-3c3w-9v23: применимость, обратимый тест «разделение атрибутов JSON:API и HAL при кэшировании normalizer», измеримый результат, stop-rule и обезличенный пакет для поддержки.

Когда проверка применима к API Platform Core

Эта инструкция решает одну узкую задачу: разделение атрибутов JSON:API и HAL при кэшировании normalizer. Сначала снимите версию реально запущенного компонента, способ установки, lockfile и digest сборки. Reviewed advisory задаёт пакетную границу «composer:api-platform/core >= 2.6.0, < 4.1.29 → fixed 4.1.29; composer:api-platform/core >= 4.2.0, < 4.2.25 → fixed 4.2.25; composer:api-platform/core >= 4.3.0, < 4.3.8 → fixed 4.3.8; composer:api-platform/json-api >= 4.0.0, < 4.1.29 → fixed 4.1.29; composer:api-platform/json-api >= 4.2.0, < 4.2.25 → fixed 4.2.25; composer:api-platform/json-api >= 4.3.0, < 4.3.8 → fixed 4.3.8; composer:api-platform/hal >= 4.0.0, < 4.1.29 → fixed 4.1.29; composer:api-platform/hal >= 4.2.0, < 4.2.25 → fixed 4.2.25; composer:api-platform/hal >= 4.3.0, < 4.3.8 → fixed 4.3.8», но одна запись в dependency-файле не доказывает, какой код исполняется сейчас. Отдельно установите, достижим ли затронутый путь в вашей конфигурации. Если runtime-версия, provenance или доступность функции не подтверждены, результат называется unknown, а не vulnerable и не safe. Такой порядок не переносит severity на конкретную систему.

Что подтверждено в ghsa-pjhx-3c3w-9v23

GitHub Reviewed Advisory опубликована 2026-07-10, обновлена 2026-07-10 и связывает API Platform Core с механизмом: небезопасный cache key может вернуть второму пользователю атрибут, доступный только первому. В ней указана граница версий «composer:api-platform/core >= 2.6.0, < 4.1.29 → fixed 4.1.29; composer:api-platform/core >= 4.2.0, < 4.2.25 → fixed 4.2.25; composer:api-platform/core >= 4.3.0, < 4.3.8 → fixed 4.3.8; composer:api-platform/json-api >= 4.0.0, < 4.1.29 → fixed 4.1.29; composer:api-platform/json-api >= 4.2.0, < 4.2.25 → fixed 4.2.25; composer:api-platform/json-api >= 4.3.0, < 4.3.8 → fixed 4.3.8; composer:api-platform/hal >= 4.0.0, < 4.1.29 → fixed 4.1.29; composer:api-platform/hal >= 4.2.0, < 4.2.25 → fixed 4.2.25; composer:api-platform/hal >= 4.3.0, < 4.3.8 → fixed 4.3.8». Upstream-репозиторий подтверждает происхождение проекта; он не подтверждает версию вашей установки, факт эксплуатации или ущерб. Поэтому карточка отделяет факт advisory от локальной применимости. Новостной заголовок, форумная реплика и поисковый сниппет остаются только лидами и не используются как доказательство причины, массовости либо затронутости конкретного сервиса.

Обратимый стендовый опыт: разделение атрибутов JSON:API и HAL при кэшировании normalizer

Безопасный сценарий: в test kernel создать два вымышленных пользователя с разными serializer groups, последовательно запросить один fixture-resource в порядках A→B и B→A для JSON:API и HAL. До запуска зафиксируйте baseline, версию, digest артефакта, ограничения CPU, памяти, времени и файлов, а также точную команду cleanup. Ожидаемый результат: каждый формат возвращает только разрешённые текущему пользователю поля независимо от порядка прогрева cache. Опыт проводится только с синтетическими данными и на loopback либо в закрытом одноразовом namespace. Нельзя переносить туда production-конфигурацию, токены, журналы, адреса, пользовательские документы или чужие endpoints. Один граничный пример и один normal control достаточны для решения; расширять нагрузку ради демонстрации не нужно.

Измеримый результат для API Platform Core

Полезный артефакт этой темы — матрица format / request order / principal class / returned field set / cache hit с синтетическими данными. Он позволяет различить четыре ветви. Passed означает, что граничный fixture дал ожидаемое защитное решение, normal control сохранил функцию, а все ресурсы вернулись к baseline. Failed означает одно воспроизводимое расхождение без увеличения масштаба. Not-applicable требует доказанной runtime-версии вне диапазона или недостижимого пути. Unknown сохраняют, если нельзя доказать provenance либо наблюдение неоднозначно. В отчёт входят числа, статусы и хэши, но не содержимое входных данных и не предположение о намерениях атакующего.

Развилка диагностики: разделение атрибутов JSON:API и HAL при кэшировании normalizer

Serializer cache проверяется перестановкой порядка запросов. Если A→B и B→A дают разные field sets для одного principal, результат зависит от прогрева. JSON:API и HAL тестируют отдельно, поскольку normalizer и cache path могут различаться. Тестовые поля называют public_marker и private_marker, не помещая в fixtures секреты. Cache hit фиксируют через test instrumentation; одного сравнения HTTP body недостаточно для локализации причины.

Обновление, повтор и отрицательный контроль

Если runtime попадает в «composer:api-platform/core >= 2.6.0, < 4.1.29 → fixed 4.1.29; composer:api-platform/core >= 4.2.0, < 4.2.25 → fixed 4.2.25; composer:api-platform/core >= 4.3.0, < 4.3.8 → fixed 4.3.8; composer:api-platform/json-api >= 4.0.0, < 4.1.29 → fixed 4.1.29; composer:api-platform/json-api >= 4.2.0, < 4.2.25 → fixed 4.2.25; composer:api-platform/json-api >= 4.3.0, < 4.3.8 → fixed 4.3.8; composer:api-platform/hal >= 4.0.0, < 4.1.29 → fixed 4.1.29; composer:api-platform/hal >= 4.2.0, < 4.2.25 → fixed 4.2.25; composer:api-platform/hal >= 4.3.0, < 4.3.8 → fixed 4.3.8», обновление берут только из доверенного канала проекта и сверяют его provenance. После обновления запускают тот же fixture с теми же лимитами: замена сценария не доказывает исправление. Затем повторяют normal control, чтобы увидеть регрессию доступности или совместимости. Временное containment допустимо лишь как узкое, обратимое и измеримое ограничение затронутого пути; оно не переименовывается в исправление. Rollback заранее привязывают к конкретному признаку, а не к субъективному ощущению стабильности.

Stop-rule и минимальный пакет для поддержки

Жёсткое правило остановки: не использовать реальные сущности и прекратить при первом поле вне ожидаемого field set, сохранив только названия тестовых атрибутов. Для поддержки достаточно версии runtime и dependency, digest сборки, точного режима функции, минимального synthetic fixture, expected/observed, resource limits, времени опыта и решения passed/failed/not-applicable/unknown. Перед передачей удалите credentials, cookies, IP-адреса, внутренние имена, абсолютные пути и любые пользовательские данные. Если обезличивание меняет результат, пакет не отправляют автоматически: его пересобирают в отдельной лабораторной среде. Статья не является инструкцией по эксплуатации и не обещает отсутствие риска.

Материал подготовлен редакцией VOne с помощью ИИ, затем вручную проверен по двум прямым HTTPS-источникам; факты, диапазоны версий, безопасный опыт и отсутствие рекламных обещаний сверены человеком.

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

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

Ответы

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

Ваш ответ

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

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

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