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

Google ADK web builder: containment для YAML save и cleanup

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

Как проверить Google ADK web builder после hardening YAML save и cleanup: одна containment-инварианта для записи, просмотра и отмены без доступа к соседним каталогам.

Одна граница для трёх операций

Уязвимость путей часто исправляют только на save, оставляя view или cleanup с другой логикой. Здесь проверка должна быть общей: любой target для записи, чтения и удаления сначала строится из доверенного agents_dir и нормализованного app_name, затем resolve-ится и подтверждается как descendant разрешённого root. Только после этого выполняется файловая операция. Если один endpoint вручную склеивает строку или удаляет до проверки, общий контракт нарушен. Инвентаризуйте все три маршрута по коду и runtime version.

Классы путей

Тестовая таблица содержит обычное имя приложения, вложенный разрешённый temporary filename и запрещённые классы: пустая строка, точка, две точки, абсолютный путь, parent reference, смешанные separators и путь, который выходит после resolve symlink. Цель — подтвердить класс решения, а не подобрать обход. В отчёт пишут только symbolic case name. Не направляйте тест на домашний каталог, repository root или системные файлы. Все объекты создаются внутри отдельного mktemp-каталога с искусственными соседями.

Счётчики вместо ущерба

Оберните файловые primitives или используйте временную filesystem fixture и считайте write, read и delete. Для допустимого случая нужная операция выполняется ровно один раз внутри app root. Для каждого запрещённого класса все три side-effect counter равны нулю, а API возвращает контролируемую ошибку без раскрытия абсолютного пути. Соседний sentinel остаётся с прежним SHA-256. Так проверяется containment без чтения содержимого и без попытки удалить важный файл. Symlink fixture после теста уничтожается вместе с временным каталогом.

Save и cancel согласованы

Особенно важна последовательность temporary save → preview → cancel. Сохранённый tmp-файл должен принадлежать тому же app root, который затем проверяет cleanup. Клиент не может подменить app_name или передать готовый абсолютный tmp path между запросами. Повторный cancel идемпотентен: он не расширяет область поиска и не удаляет соседний файл. Ошибка preview не должна запускать широкую очистку. Проверьте отдельно stale token и missing file — оба завершаются локально и не превращаются в recursive delete.

Вердикты

PASS — развернут commit с эквивалентным hardening, каждый endpoint использует общий resolver, forbidden cases дают zero side effects, sentinel hash неизменен. FAIL — хотя бы одна операция достигает пути вне root, раскрывает содержимое или удаляет соседний объект. UPDATE-REQUIRED — версия предшествует исправлению и нет проверенного backport. UNKNOWN — runtime artifact невозможно сопоставить с кодом. Stop-rule: тест предлагают провести на production agents, реальном соседнем проекте или широком каталоге. В таком случае проверка переносится в disposable fixture.

Минимальный отчёт

Укажите package version, commit/image digest, root layout из синтетических имён, endpoint, path class, normalized verdict, side-effect counters и sentinel hash before/after. Не включайте абсолютные пользовательские пути, YAML contents, agent instructions, credentials или имена production apps. Приложите ссылки на commit, implementation и tests. Эта проверка подтверждает только текущую path boundary; она не доказывает отсутствие прошлых обращений к соседним файлам и не заменяет отдельный audit логов при подозрении на инцидент.

Материал подготовлен редакцией VOne с помощью автоматизированного черновика. Факты и границы вывода сверены 4 сентября 2026 года по указанным прямым официальным и первичным источникам. Текст написан самостоятельно, опасные действия и реальные пользовательские данные в проверку не включены.

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

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

Ответы

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

Ваш ответ

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

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

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