Как проверить 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 года по указанным прямым официальным и первичным источникам. Текст написан самостоятельно, опасные действия и реальные пользовательские данные в проверку не включены.
Источники и проверка
- Google ADK hardening commit проверено 2026-09-04
- Google ADK fast_api.py проверено 2026-09-04
- Google ADK test_fast_api.py проверено 2026-09-04
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.