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

Cilium addressMatcher: namespace должен ограничивать Service redirect

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

Защитная проверка CiliumLocalRedirectPolicy по ghsa-q6h5-q3q6-f87x: применимость, обратимый fixture для границы «проверка namespace ownership при связывании произвольного ClusterIP через addressMatcher», измеримый результат и stop-rule без production-данных.

Докажите применимость к CiliumLocalRedirectPolicy

Соберите минимальный паспорт компонента до любого опыта. Для CiliumLocalRedirectPolicy и границы «проверка namespace ownership при связывании произвольного ClusterIP через addressMatcher» запишите runtime version, package source, digest сборки, активный feature/config path и роль, которая достигает функции. Reviewed Advisory фиксирует «github.com/cilium/cilium >= 1.19.0, < 1.19.4; first patched 1.19.4 | github.com/cilium/cilium >= 1.18.2, < 1.18.10; first patched 1.18.10 | github.com/cilium/cilium < 1.17.16; first patched 1.17.16», публикацию 2026-07-06 и обновление 2026-07-06, но не служит доказательством наличие у вас уязвимого бинарника, реальную эксплуатацию или спрос. Получившийся паспорт нужен и для воспроизводимости, и для отката решения. Если версия собрана из fork или vendor patch, сохраните commit/patch provenance отдельно: одна строка semver не отвечает, присутствует ли исправление.

Зафиксируйте отдельный защитный контракт

Сформулируйте проверяемый инвариант своими словами: same-namespace применим; foreign Service отклонён; удаление отказанной политики не меняет translation state. Исходная пользовательская боль здесь конкретна — пользователь политики одного namespace может выбрать ClusterIP другого и перенаправить его Service-трафик. Не смешивайте её с общими страницами про обновления, XSS, SSRF или отказ в обслуживании: механизм и ожидаемый ответ должны быть самостоятельными. До опыта укажите субъект, объект, доверенную границу, разрешённый побочный эффект и сигнал нарушения. Для этого материала артефакт решения — матрица policy-namespace / service-namespace / address-owner / add-result / delete-result / state-digest. Он не содержит токены, IP, содержимое файлов или персональные данные; достаточно классов результата, счётчиков и digest тестового состояния.

Поставьте обратимый минимальный опыт

Подготовьте обратимый стенд: fake Kubernetes objects двух namespaces, два ClusterIP и чистый policy reconciler без API server, eBPF и node networking. Затем создать same-namespace и cross-namespace matcher, провести add/delete reconciliation и сравнить service-state snapshot. Используйте минимальные синтетические значения, запрет внешней сети, отдельный temp root и normal-control, который проходит тот же код без пограничного условия. Перед опытом запишите digest fixture, версию и timeout, после — digest состояния и cleanup result. Не переносите пример на production и не увеличивайте нагрузку ради наглядности. Когда компонент нельзя подменить или изолировать, ограничьтесь статической проверкой patch/release и отложите runtime-подтверждение.

Сведите наблюдения в матрицу решения

Результат оценивайте по заранее заданному правилу, а не по впечатлению от лога. Защитный исход: same-namespace применим; foreign Service отклонён; удаление отказанной политики не меняет translation state. Для всякого ряда в «матрица policy-namespace / service-namespace / address-owner / add-result / delete-result / state-digest» сохраните expected и observed, а также точную стадию отказа: parse, validate, authorize, allocate, open, mutate или cleanup. Ошибка до опасного действия и ошибка после него — разные результаты. Normal-control обязан доказать, что тест не сломан целиком. Повторите fixture не менее двух раз только в пределах локального бюджета: одинаковый тип наблюдения важнее длинного stdout.

Остановитесь при первом выходе за границу

Примените stop-rule без торга: применить stop-rule до кластера, CRD write или сетевого namespace; изменение foreign state в fixture означает fail. Вторичные красные флаги — изменение объекта вне temp, неожиданный сетевой вызов, рост памяти, privilege prompt, необратимая запись, расхождение digest или отсутствие normal-control. При каждом таком флаге завершите процесс, сохраните лишь обезличенную матрицу и верните стенд к исходному состоянию. Не публикуйте payload, реальные конфиги и подробности чужой системы. Severity не разрешает расширять тест: цель — подтвердить защитный контракт с минимальным воздействием.

Передайте поддержке минимальный пакет

Для владельца компонента подготовьте короткий пакет: ghsa-q6h5-q3q6-f87x, CiliumLocalRedirectPolicy, installed/build version, upstream commit, применимый диапазон «github.com/cilium/cilium >= 1.19.0, < 1.19.4; first patched 1.19.4 | github.com/cilium/cilium >= 1.18.2, < 1.18.10; first patched 1.18.10 | github.com/cilium/cilium < 1.17.16; first patched 1.17.16», описание fixture без чувствительных значений, матрица policy-namespace / service-namespace / address-owner / add-result / delete-result / state-digest, normal-control, stop-rule, cleanup proof и ссылки на advisory/upstream. Особой строкой отметьте unknown: reachability, vendor backport, runtime configuration и наличие compensating control. Решение может быть только одним из трёх: not-applicable с доказательством, update/test по утверждённому окну или blocked до безопасного стенда. Так поддержка получает минимальные данные для воспроизведения, а публичный материал не создаёт обещания индексацию, позиции, универсальную защищённость или результат на чужой инфраструктуре.

Свяжите исправление с механизмом CiliumLocalRedirectPolicy

Для CiliumLocalRedirectPolicy свяжите исправление именно с механизмом «проверка namespace ownership при связывании произвольного ClusterIP через addressMatcher», а не только с номером релиза. В changelog или diff найдите изменение, которое делает истинным результат «same-namespace применим; foreign Service отклонён; удаление отказанной политики не меняет translation state», и сопоставьте его с диапазоном «github.com/cilium/cilium >= 1.19.0, < 1.19.4; first patched 1.19.4 | github.com/cilium/cilium >= 1.18.2, < 1.18.10; first patched 1.18.10 | github.com/cilium/cilium < 1.17.16; first patched 1.17.16». Затем повторите fixture «fake Kubernetes objects двух namespaces, два ClusterIP и чистый policy reconciler без API server, eBPF и node networking» на текущем и кандидатном артефакте в одинаковой изоляции; сравнивайте «матрица policy-namespace / service-namespace / address-owner / add-result / delete-result / state-digest», а не произвольные строки лога. Если vendor backport меняет номер версии, сохраните commit/diff provenance и сборочный digest. План возврата должен восстанавливать предыдущий тестовый артефакт, но не возвращать production к заведомо сомнительной версии. Критерий приёмки для этой отдельной боли — same-namespace применим; foreign Service отклонён; удаление отказанной политики не меняет translation state; критерий прекращения — применить stop-rule до кластера, CRD write или сетевого namespace; изменение foreign state в fixture означает fail. Пока оба критерия не доказаны, статус обозначьте blocked или unknown, не подменяя результат предположением.

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

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

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

Ответы

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

Ваш ответ

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

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

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