Введення команд MCP
Крапка з комою в аргументі інструменту стає командою оболонки.
Що таке Введення команд MCP?
Інструмент MCP працює на сервері, тому кожен аргумент, який він отримує, є ненадійним введенням. Створіть команду оболонки, вставивши цей вхідний сигнал у рядок, і крапка з комою або зворотна галочка перестануть бути даними: вони стають командою, яку виконує ваш сервер. Ви знайдете введений аргумент у трасуванні агента, спостерігаєте, як інструмент повертає звичайний порожній результат, поки коренева зворотна оболонка виконує облікові дані бази даних, а потім викликаєте git безпосередньо без оболонки в шляху. Виправлення коду не скасовує вже запущений код.
Що ви дізнаєтесь у Введення команд MCP
- Визнайте, що інструмент MCP працює на сервері, тому будь-який аргумент, який він використовує для створення команди, є ненадійним введенням, яке може містити код
- Поясніть, як об’єднання вхідних даних у командний рядок оболонки перетворює такі метасимволи, як ; та | у синтаксис команд, створюючи віддалене виконання коду
- Зрозумійте, що введена команда виконується поза діапазоном, тому звичайна відповідь інструмента не є доказом того, що нічого не сталося
- Застосуйте довговічне виправлення: викликайте програму напряму та передайте кожне значення як окремий аргумент, без оболонки для його інтерпретації
- Відрізнити параметризацію від екранування чи блокування та пояснити, чому видалення оболонки усуває категорію помилки, а не один примірник
- Доведіть виправлення коду, відтворивши оригінальний експлойт, і визнайте, що хост, який уже запускав код зловмисника, має змінити свої секрети та перебудувати
Введення команд MCP — Кроки навчання
-
Інструмент, який запускає Git
Sarnholt керує помічником публічного репо. Один із його інструментів, commit_search, шукає коміти за автором. Боб не знає, як це написано, але інструмент, який шукає git за ім’ям, яке він надає, вартий перевірки. Він відкриває той самий агент, яким може скористатися кожен.
-
Подивіться, як це працює
Спочатку звичайний запит, щоб дізнатися, що інструмент робить із наданою назвою.
-
Назва десь закінчується
Автор, якого він вводить, повертається як git-запит. Git — це інструмент командного рядка, тож десь на сервері це ім’я майже напевно додається до команди git. Якщо його помістити як текст, Боб може додати до команди.
-
Закрийте аргумент, додайте команду
Боб запитує коміти автора, чиє ім’я не є іменем. Він закінчує команду git крапкою з комою та додає свою власну: отримати сценарій із свого хоста та запустити його.
-
Нудна відповідь приховала шкоду
Відповідь помічника нічим не примітна: не знайдено відповідних комітів. Це суть. Введена команда не звітує через інструмент, вона тихо виконується на сервері.
-
Оболонка на сервері
Сценарій, який повернув сервер Боба, відкрив з’єднання прямо до його слухача. Він перемикається на нього, щоб побачити, що отримав один виклик commit_search.
-
Чому це спрацювало
Інструмент робив саме те, про що говорив його код. Питання в тому, що в цьому коді перетворило аргумент на команду.
-
Оболонка, де її бути не повинно
Алісу викликає служба безпеки. Сповіщення стосується не входу чи файлу, а процесу.
-
Що сповіщення закріплює
Сповіщення звузило його до одного інструменту та однієї форми введення.
-
Дзвінок у слід
Агент веде облік кожного виклику інструменту. В ньому отруєний.
Охоплення стандартів безпеки
OWASP MCP Top 10
- MCP05:2025 Command Injection & Execution
CWE
- CWE-78 Improper Neutralization of Special Elements used in an OS Command
CIS Controls
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security