Файловый tool AI и symlink: почему префикса пути недостаточно
Символическая ссылка может вести из разрешённого каталога наружу, хотя видимая строка пути начинается правильно. Проверяйте фактическое разрешение пути и права исполнителя; простое startswith не является границей файловой безопасности.
Пример из разработки
Агенту разрешено читать папку workspace. Внутри неё лежит ссылка reports, указывающая на другой каталог. Запрос workspace/reports/private.txt проходит строковую проверку префикса, а реальное чтение обращается за пределы области. Есть и более простая ошибка: workspace-old начинается с тех же букв, но не является дочерним каталогом workspace. Эти два случая требуют понимания структуры пути, а не более строгой формулировки инструкции модели.
Почему это работает
Для существующего пути разрешите ссылки подходящим механизмом и сравните компоненты с разрешённым корнем. В Python Path.resolve помогает получить разрешённый путь; сам по себе он не превращает последующее открытие в атомарную безопасную операцию. Другой процесс может подменить ссылку между проверкой и чтением. Для чувствительных tools выбирайте доступные в вашей ОС безопасные файловые механизмы и изоляцию: исполнитель не должен иметь права читать произвольные рабочие каталоги. Запись нового файла требует отдельной проверки родительского каталога.
Проверка перед использованием
| Проверка | Ожидаемое поведение |
|---|---|
| Файл действительно находится внутри рабочей области | Чтение разрешено по согласованным правам; проверяется структура пути, а не совпадение первых символов строки. |
| Внутренняя ссылка ведёт на внешний контрольный каталог | Операция отклоняется либо безопасно ограничивается исполнителем; содержимое внешнего файла не попадает в ответ. |
| Ссылка меняется во время операции | Проверка выявляет зависимость от гонки; продукт не объявляет предварительный resolve полной защитой от одновременной подмены. |
Поведение символических ссылок, junction и механизмов открытия различается между ОС. Не копируйте универсальную функцию из нескольких строк без проверки платформы и модели конкурирующих изменений файловой системы.
Для агентов с доступом к репозиториям и документам важно понимать реальные полномочия файлового инструмента, а не только разрешённые имена папок. В платном курсе LLM Security PRO: Prompt Injection, утечки, tool-abuse можно продолжить изучение соответствующего инженерного направления. Перед покупкой сравните программу и открытые материалы со своей задачей.
Документация для проверки технических деталей: Документация Python pathlib.
Следующий шаг: Безопасность LLM-приложений: практические проверки. По смежным вопросам: Checkpoint AI в pickle: почему нельзя загружать чужой файл состояния, Ответ инструмента просит вызвать другой tool: кто принимает решение.
