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

Vue I18n 11.1.2: тест handleFlatJson без изменения prototype

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

Практическая защитная инструкция для Vue I18n и GHSA-p2ph-7g93-hw3m: как подтвердить границу версии 9.14.3 / 10.0.6 / 11.1.2, выполнить обратимый synthetic-тест, распознать безопасный отказ, вовремя остановиться и передать владельцу минимальные данные без активного payload.

Применимость и версия Vue I18n

Начальная развилка для Vue I18n опирается на реально загруженный компонент. Advisory задаёт область «семейство Vue I18n 9.x, 10.x и 11.x до веточных исправлений 9.14.3, 10.0.6 и 11.1.2» и исправленную границу «9.14.3 / 10.0.6 / 11.1.2». Описанный дефект: handleFlatJson допускал prototype pollution через служебные ключи в плоском JSON; риск относится к границе разбора переводов, а не к обычной строке локализации. Сначала определяют, присутствует ли именно этот package и используется ли затронутая функция. Затем версию берут из runtime, image digest, lockfile вместе с собранным артефактом или package manager внутри работающего окружения. Если компонент отсутствует, статус — not-applicable. Если версия старая, но функция не подтверждена, фиксируют affected-unverified. Исправленный номер без проверки реально запущенного binary остаётся patched-unverified. Не переносят вывод на одноимённый продукт, соседний plugin, другую ветку или backport дистрибутива. Прямая страница GHSA-p2ph-7g93-hw3m была обновлена 25 августа 2026 года; дата делает проверку своевременной, но сама по себе не говорит о состоянии вашей установки.

Инвентарь до изменения Vue I18n

До обновления собирают узкий предметный инвентарь: точные версии vue-i18n и @intlify packages в bundle, включён ли flatJson, источник locale-файлов, способ merge и baseline собственных свойств нового объекта. Для каждого поля записывают факт, not-applicable или unknown; пустое значение нельзя считать безопасным. Отдельно сохраняют точный dependency snapshot, конфигурацию только затронутой функции, baseline health и путь возврата. Логи минимизируют: оставляют время, версию, класс входа, код результата и correlation id, удаляя tokens, cookies, IP, usernames, абсолютные пути, содержимое документов и рабочие payload. Если baseline уже не проходит, исправление и прежнюю поломку не смешивают. Сначала возвращают известное состояние, затем повторяют инвентарь. Такая пауза отделяет проблему поставки пакета от конфигурации, proxy, прав, данных и соседних зависимостей.

Ограниченная проверка Vue I18n

Проверка выполняется только в изолированной среде: в unit-тесте передать отдельный объект с безопасным marker и зарезервированным prototype-key, затем проверить только собственные свойства результата и свежего пустого объекта; глобальный runtime после теста перезапустить. До запуска задают один ожидаемый штатный исход A, один защитный исход B, повтор A2, временной лимит, memory/CPU ceiling и владельца остановки. Безопасный результат сформулирован заранее: служебный ключ отклонён или игнорирован, marker остаётся в своём namespace, у нового объекта не возникает добавленного свойства, а обычный перевод разрешается. Между A, B и A2 не меняют одновременно версию, сеть, права, proxy, database role и соседние packages. Реальные пользовательские данные, чужие сервисы, production credentials и активные exploit payload не применяют. Если тест подтверждает только отказ, но не его причину, это unknown, а не passed. Если исправление доступно, сначала ставят его; материал не предлагает воспроизводить дефект на рабочей системе.

Матрица решения для Vue I18n

Матрица содержит версию и artifact hash, применимость функции, baseline A, защитный исход B, повтор A2 и состояние после cleanup. passed-bounded-check допустим только когда одновременно верно: служебный ключ отклонён или игнорирован, marker остаётся в своём namespace, у нового объекта не возникает добавленного свойства, а обычный перевод разрешается. Контролируемый отказ должен быть диагностируемым: validation error, policy reject или documented parser error. Общий 500, native crash, timeout, OOM, потеря readiness или пустой ответ не считаются защитой. Если одна колонка неизвестна, итог остаётся unknown. При mixed versions вывод делят по каждому процессу или image. Так можно отличить неполный rollout, несовместимость ветки и локальную регрессию от подтверждённой работы исправления, не обещая полной безопасности продукта.

Стоп-линия, возврат и передача Vue I18n

Жёсткая стоп-линия: проверка затрагивает рабочий bundle переводов, общий browser context, сторонний JSON либо требует наблюдать последствия в production UI. При первом совпадении опыт прекращают и выполняют возврат: удалить fixture, завершить отдельный test process, восстановить lockfile при несовпадении ветки и повторить штатный lookup одной строки. Расширять входы, права, нагрузку или переносить тест в production до подтверждённого cleanup нельзя. Для владельца готовят минимальный пакет: версии всех @intlify packages, режим flatJson, имена ключей без значений, own-property результаты, обычный lookup и подтверждение нового процесса. К нему прикладывают две прямые первичные ссылки, точное время, ожидаемый и фактический исходы, но не копируют advisory целиком. Секреты, персональные данные, полные журналы и содержимое рабочих объектов исключают. Финальный статус выбирают из not-applicable, update-required, patched-unverified, passed-bounded-check, failed-safe-check или unknown. Он описывает только эту узкую границу и не гарантирует отсутствие других дефектов.

Материал подготовлен редакцией VOne с помощью ИИ по открытым официальным и первичным источникам; факты, даты, версии и ссылки перепроверены. Реальные пользовательские данные, активные опасные payload и вымышленные результаты тестов не использовались.

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

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

Ответы

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

Ваш ответ

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

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

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