Серверы MCP (Model Context Protocol) предоставляют LLM реальные инструменты: прочитать файл, выполнить команду, получить URL-адрес. Проблема: аргументы в пользу этих инструментов основаны на ненадежном контенте — веб-странице, документе, другой модели. Это учебник по инъекциям...
Серверы MCP (Model Context Protocol) предоставляют LLM реальные инструменты: прочитать файл, выполнить команду, получить URL-адрес. Проблема: аргументы в пользу этих инструментов основаны на ненадежном контенте — веб-странице, документе, другой модели. Это стандартная поверхность для внедрения, и серверы MCP снова и снова поставляются с одними и теми же шестью дырами. Вот каждый из них с исправлением копирования-вставки.
1. Обход пути → чтение произвольного файла
Инструмент read_file, который выполняет open(base + user_path), пропускает /etc/passwd в тот момент, когда модели приказывают прочитать ../../../../etc/passwd. Символические ссылки и абсолютные пути обходят наивные проверки префиксов.
из пути импорта pathlib
defsolve_within(base: str, user_path: str) -> Путь | Нет:
base_p = Путь(база).resolve()
target = (base_p / user_path).resolve() # разрешает .. и символические ссылки
если base_p отсутствует в target.parents и target != base_p:
return None # отказаться, не зажимать
возвратная цель
Отказаться от «Нет». Никогда не «чистите» путь и продолжайте — именно так регресс снова открывается.
2. Выполнение команды → RCE
subprocess.run(f"convert {name}",shell=True) игра окончена. Любой инструмент, на который влияет модель, контролируется злоумышленником.
subprocess.run(["convert", name],shell=False, timeout=10) # список аргументов, nev