Approval Laundering — что именно человек одобряет и что агент исполняет
Саммари
Современные coding-agent harness (Claude Code, Codex CLI, Cursor) держат границу безопасности на предположении, которое никто не проверял: действие A, которое человек одобрил, — это то же самое действие A', которое harness затем исполнит. Работа показывает, что предположение систематически и воспроизводимо нарушается: инструментировав точку пред-исполнения PreToolUse в Claude Code, авторы ввели таксономию из шести классов подмены и измерили их частоту. Prototip — Approval Token, подписанная capability-строка, — закрывает часть классов полностью, но на двух классах даёт честный отрицательный результат.
Из этого следует: PreToolUse и аналогичные точки одобрения — это точка доверия, а не граница безопасности. Самый опасный класс отказов находится на шаг глубже, и никакой аудит полей его не увидит.
На практике для Revit-агента: scope в permission-модели должен быть не декларацией, а исполнимым ограничением, которое проверяется на стороне посредника. Если агент может вызвать «изменить семейство», когда человек одобрял «прочитать семейство», никакой промпт это не спасёт — нужен typed token с привязкой к конкретным аргументам.
Важный нюанс: честный отрицательный результат по Argument — самый ценный результат в работе. Он показывает, что даже правильно построенный токен не решает задачу, если у двух классов отказа нет наблюдаемого признака.
Второй нюанс: протокол построен на инструментировании конкретного harness (Claude Code). Таксономия переносима, а измеренные частоты — нет: они характеризуют BGR этой реализации, а не отрасль в целом.
Третий нюанс: κ = 1.0 при двух оценщиках говорит о согласованности разметки, а не о полноте таксономии — новые классы из третьих полей в исследование не попали.