Перейти до вмісту

OWASP MCP Top 10: ризики Model Context Protocol

Схема OWASP MCP Top 10: хост агента викликає три MCP-сервери через межу довіри, а опис інструмента одного з них непомітно змінено

Агент підтримки в SaaS-компанії був підключений до того самого CRM-інструмента чотири місяці. Він читав тікети та готував відповіді. Ніхто не торкався його конфігурації з дня, коли інструмент схвалили.

Потім опис інструмента змінився на сервері. Не код, не схема, не дозволи. Два речення англійського тексту, які агент читає перед кожним викликом, тепер наказували йому надсилати копію кожної підготовленої відповіді на зовнішню адресу.

Агент підкорився. Він не мав як відділити документацію від інструкції, бо для моделі, що читає маніфест інструмента, різниці немає. Це одна категорія з OWASP MCP Top 10, і це один із десяти способів, якими розпадається зʼєднання між агентом та його інструментами.

OWASP MCP Top 10 — це ранжований перелік ризиків безпеки, специфічних для Model Context Protocol, стандарту, який підключає AI-агентів до зовнішніх інструментів, даних та сервісів. Опублікований Open Worldwide Application Security Project, він охоплює десять категорій: неправильне поводження з токенами та розкриття секретів, ескалація привілеїв через розповзання дозволів, отруєння інструментів, атаки на ланцюг постачання та підміна залежностей, інʼєкція та виконання команд, підміна наміру, недостатня автентифікація та авторизація, брак аудиту й телеметрії, тіньові MCP-сервери, інʼєкція контексту та надмірний обмін ним. Перелік лежить під шаром моделі, який описує OWASP LLM Top 10, і поряд із шаром автономії, який описує OWASP Agentic AI Top 10. Його предмет — сантехніка: сервери, токени та маніфести інструментів, що перетворюють рішення моделі на дію в реальній системі. OWASP позначає проєкт як бета-версію v0.1 у пілотному тестуванні, тому формулювання категорій ще можуть змінитися.

Чим безпека MCP відрізняється від безпеки LLM та агентного AI?

Section titled “Чим безпека MCP відрізняється від безпеки LLM та агентного AI?”

Три списки OWASP описують три різні шари, і контроль, що працює на одному шарі, нічого не дає на іншому.

LLM Top 10 — про модель. Prompt injection, отруєння даних та небезпечна обробка виводу є збоями того, що входить у модель і що з неї виходить. Радіус ураження зупиняється на відповіді.

Agentic AI Top 10 — про автономію. Захоплення цілей, отруєння памʼяті та каскадні збої описують, що стається, коли модель зʼєднує рішення в ланцюг через багато кроків без людського схвалення на кожному з них.

MCP Top 10 — про проводку між ними. Він питає, хто запускає сервер на іншому кінці зʼєднання, які облікові дані несе виклик, чи інструмент досі робить те, що заявляв минулого місяця, і чи хоч щось записало цей виклик. Слухняна модель із розумними обмеженнями автономії лишається вразливою, якщо її шар інструментів неавтентифікований.

Ця різниця має операційне значення. Огорожі навколо виводу моделі не зупинять сервер, який ніколи не автентифікували, а процес схвалення дій агента не зупинить токен, що вже витік у транскрипт чату.

Чому опис інструмента поводиться як інструкція?

Section titled “Чому опис інструмента поводиться як інструкція?”

Агент обирає інструменти, читаючи їхні описи. Цей текст є єдиним, що каже моделі, коли інструмент застосовний і як його викликати, а це робить його ближчим до виконуваного коду, ніж до документації.

Змініть опис і ви зміните поведінку, без змін в обробнику, схемі чи наданих дозволах. Код-ревʼю цього не спіймає, бо переглянутий репозиторій не є місцем, де живе цей текст. Invariant Labs опублікували перший широко цитований розбір цього патерну у квітні 2025 року, назвавши і прямий випадок, і rug pull, коли сервер отримує схвалення на чесному формулюванні, а потім підміняє його.

Вправа з отруєними описами інструментів ставить вас перед інструментом, схваленим місяці тому, який тепер наказує агенту слати приховану копію на зовнішню адресу. Ви порівнюєте живий опис зі схваленим формулюванням, а потім блокуєте сервер на шлюзі, а не лише відхиляєте один виклик.

Спорідненим збоєм є підміна наміру, коли закладена інструкція приходить у даних, а не в маніфесті. Нотатку в CRM, тікет підтримки чи публічну вебсторінку може написати той, хто розраховує, що це прочитає модель. У вправі про захоплений намір агента інструкція, надіслана через публічну форму підтримки, потрапляє в картку клієнта, і агент, якого попросили лише підсумувати цю картку, надсилає платіжні дані незнайомцю.

Обидві категорії зводяться до одного правила. Отриманий контент — це дані, і агент, який трактує його як інструкцію, не має вже жодної межі для захисту.

Що ламається ще до того, як агент запуститься?

Section titled “Що ламається ще до того, як агент запуститься?”

Три з десяти категорій є конфігураційними проблемами, що існують з моменту додавання сервера, задовго до першого промпту.

Неправильне поводження з токенами стоїть у списку першим не випадково. Секрет, записаний відкритим текстом у конфіг MCP, розкритий тієї миті, коли будь-що прочитає цей файл, а асистент, якого попросили допомогти з поламаним зʼєднанням, прочитає його. Вправа про витік токенів MCP простежує довгоживучий токен без терміну дії з конфігураційного файлу в транскрипт чату, а звідти в повторне відтворення проти справжнього API клієнтів.

Розповзання дозволів іде другим. Радіус ураження агента визначається обсягом його облікових даних, а не формулюванням його завдання, і дозволи, надані під разову задачу, зазвичай її переживають.

У вправі про розповзання дозволів агента агент сортування підкоряється зайвому абзацу в публічному баг-репорті та вставляє приватний ключ підпису в гілку, доступну будь-кому. Далі ви переглядаєте кожен дозвіл за тим, куди він дістає сьогодні, а не за тим, для чого його просили.

Ланцюг постачання іде четвертим. MCP-сервер зазвичай є звичайним пакетом, а встановлення пакета запускає його інсталяційні скрипти від імені поточного користувача ще до того, як хтось прочитає код. Вправа про typosquatted MCP-пакет простежує залежність, опубліковану на один символ далі від довіреної назви, чий postinstall-хук відправляє файли з обліковими даними на хост атакувальника, поки термінал виглядає звично.

Чому MCP-сервер захищати важче, ніж API?

Section titled “Чому MCP-сервер захищати важче, ніж API?”

MCP-сервер є мережевою службою, тож усе, що правдиве для незахищеного API, правдиве і для нього. Різниця в тому, що викликає його мовна модель, яка самостійно вирішує, які аргументи надіслати.

Equixly провела оцінювання безпеки популярних реалізацій MCP та опублікувала результати в березні 2025 року. Вона знайшла вразливості інʼєкції команд у 43% протестованих серверів, обхід каталогів або довільне читання файлів у 22%, а необмежене завантаження URL у 30%. Коли про знахідки повідомили, 30% вендорів випустили виправлення, 45% назвали ризик теоретичним, а 25% не відповіли взагалі.

Інʼєкція команд — категорія пʼять. Кожен аргумент, який отримує MCP-інструмент, є недовіреним входом, і вставляння цього входу в рядок shell-команди означає, що крапка з комою перестає бути даними.

У вправі про інʼєкцію команд MCP ви знаходите інʼєктований аргумент у трасі агента, поки інструмент повертає звичайний порожній результат, а root-реверс-шелл виносить облікові дані бази. Далі ви замінюєте виклик через shell на параметризований.

Недостатня автентифікація — категорія сім, і саме її найчастіше вважають закритою. Схвалення процесом управління не є автентифікацією. У вправі про неавтентифікований MCP-сервер зареєстрований і схвалений сервер привʼязали до 0.0.0.0 заради пілота, і неавтентифікований tools/list тепер повертає інструменти фінансового сховища, які віддають імена рахунків та суми контрактів.

Тіньові сервери — категорія девʼять, і саме через них інвентаризація, побудована з конфігурації клієнта, інвентаризацією не є. Сервер, піднятий для експерименту, працює далі на дефолтних облікових даних, а список у вашому клієнті показує лише те, що хтось свідомо додав. У вправі про тіньові MCP-сервери ви запускаєте скан виявлення, звіряєте його з реєстром в обидва боки та вводите білий список на шлюзі.

Чого не можна виправити після початку інциденту?

Section titled “Чого не можна виправити після початку інциденту?”

Дві категорії мають спільну властивість, через яку їх варто закривати завчасно: жодну не можна доробити тоді, коли вона знадобиться.

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

Надмірний обмін контекстом — категорія десять, і вона найтихіша з усього набору. Агент, що обслуговує багатьох клієнтів, тримає робочий контекст і памʼять, і те, і те є даними. Якщо жодне не обмежене сесією, інформація одного клієнта зʼявляється в розмові наступного, без зловживання інструментом і без зламаного контролю доступу.

Вправа про витік контексту між клієнтами запускає дві сесії та показує, як рахунок та дані картки одного клієнта зʼявляються у відповіді іншому.

Далі ви доводите з траси інструментів, що жоден запит не витягнув чужий запис. Цей доказ і є суттю. Інцидент без жодного відмовленого доступу ваша поточна система виявлення не підніме.

Як навчати організацію ризикам MCP?

Section titled “Як навчати організацію ризикам MCP?”

Читання переліку категорій не будує рефлексу. Збої з цього списку виглядають нормально, поки тривають, і саме тому пройдений сценарій дає більше, ніж документ політики.

Почніть із тих, хто додає сервери. Інженери та платформні команди відповідають за поводження з токенами, перегляд дозволів, фіксацію версій пакетів та конфігурацію шлюзу, а це сім категорій із десяти. Їм потрібні сценарії про ланцюг постачання, інʼєкцію команд та автентифікацію до наступної інтеграції, а не після неї.

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

Команди безпеки отримують слідчу половину. Прогалини аудиту, тіньові сервери та витоки контексту виявляють, а не запобігають їм, і кожен випадок винагороджує знання того, як має виглядати нормальна траса, ще до того, як доведеться читати зламану.

Усі десять категорій охоплені нашим навчальним курсом OWASP MCP Top 10, який працює в браузері без реєстрації. Якщо ви будуєте програму безпеки AI за всіма трьома списками OWASP, напишіть нам про послідовність шарів моделі, агента та протоколу для ваших команд.