Ін'єкція команд через MCP

Ін'єкція команд через MCP

Крапка з комою в аргументі інструмента стає командою оболонки.

Що таке Ін'єкція команд через MCP?

Інструмент MCP працює на сервері, тож кожен аргумент, який він отримує, — недовірений ввід. Якщо збирати команду оболонки, вклеюючи цей ввід у рядок, крапка з комою чи зворотний апостроф перестає бути даними й стає командою, яку виконує ваш сервер. Ви знайдете підсунутий аргумент у трасуванні агента й побачите, що інструмент повертає звичайну порожню відповідь, тоді як root-оболонка зі зворотним з'єднанням викрадає облікові дані бази даних. Після цього ви викличете git напряму, без оболонки на шляху. Виправлення коду не скасовує код, який уже виконався.

Що ви дізнаєтесь у Ін'єкція команд через MCP

Ін'єкція команд через MCP — Кроки навчання

  1. Інструмент, що запускає git

    У компанії Sarnholt працює публічний помічник для репозиторіїв. Один із його інструментів, commit_search, шукає коміти за автором. Боб не знає, як цей інструмент написаний, але будь-який інструмент, що шукає в git за іменем, яке вводить сам Боб, варто перевірити. Він відкриває того самого агента, яким може скористатися будь-хто.

  2. Подивіться, як це працює

    Спочатку звичайний запит: Боб дізнається, що інструмент робить з іменем, яке отримує. Введене ім'я автора перетворюється на запит до git. Git працює з командного рядка, тож десь на сервері це ім'я майже напевно підставляється в команду git. Якщо воно потрапляє туди як текст, Боб може дописати до команди своє.

  3. Куди потрапляє ім'я

  4. Закрийте аргумент, додайте команду

    Боб просить коміти автора, чиє «ім'я» насправді не ім'я: крапкою з комою воно завершує команду git і додає команду самого Боба — завантажити зі свого хоста скрипт і запустити його.

  5. Буденна відповідь приховала шкоду

    Відповідь помічника нічим не вирізняється: жоден коміт не знайдено. Саме на це й розрахунок. Підсунута команда не дає про себе знати у відповіді інструмента, а тихо виконується на сервері.

  6. Оболонка на сервері

    Скрипт, який віддав сервер Боба, відкрив з'єднання просто до його слухача. Боб перемикається на нього, щоб побачити, що йому дав один виклик commit_search. Інструмент зробив саме те, що велів його код. Питання в тому, що в цьому коді перетворило аргумент на команду.

  7. Чому це спрацювало

  8. Оболонка там, де її не має бути

    Алісі терміново пише команда SOC. Сповіщення не про вхід і не про файл, а про процес.

  9. Що встановлює сповіщення

    Сповіщення звузило пошук до одного інструмента й одного виду вхідних даних.

  10. Виклик у трасуванні

    Агент веде запис кожного виклику інструмента. Серед них — і виклик із підсунутою командою.

Охоплення стандартів безпеки

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