Агенти й MCPВплив: Високий
Вразливість у Postgres Model Context Protocol Server дозволяє віддалене виконання коду
AWS повідомила про CVE-2026-87911 (CVSS 9.6) у postgres-mcp-server, де режим тільки для читання обходиться через синтаксис PostgreSQL COPY TO PROGRAM. Якщо роль бази даних має надмірні привілеї, зловмисний промпт виконує команди операційної системи на хості.

Чому це важливо
Негайно заберіть розширені ролі Postgres у підключень агентів, щоб ін'єкції промптів не перетворилися на виконання шелл-команд на хості.
TL;DR
- 01Списки заборонених слів на рівні застосунку не здатні надійно гарантувати режим тільки для читання в базі даних.
- 02Команда Postgres COPY ... TO PROGRAM виконує шелл-команди навіть усередині транзакцій BEGIN READ ONLY.
- 03AWS RDS та Aurora блокують ці привілеї за замовчуванням, але self-hosted інсталяції Postgres залишаються вразливими.
Ключові факти
- Ідентифікатор CVE
- CVE-2026-87911
- Оцінка CVSS
- 9.6 Critical
- Виправлена версія
- postgres-mcp-server 1.1.7
- Вектор атаки
- PR:N/UI:R (Неавтентифіковане підкидання промпту)
Пастка списків заборонених слів. AWS Labs postgres-mcp-server намагався гарантувати режим тільки для читання через перевірку регулярними виразами у файлі mutable_sql_detector.py, відфільтровуючи команди на кшталт INSERT, UPDATE та DROP. Проте Postgres підтримує вираз COPY ... TO PROGRAM, який передає результат запиту у командний рядок ОС. Оскільки ця команда діє на рівні хоста, а не таблиць даних, звичайний режим транзакції BEGIN READ ONLY її не зупиняє. ### Ін'єкція команд через підкинуті промпти. Вразливість отримала ідентифікатор CVE-2026-87911 з оцінкою CVSS 9.6. Неавтентифікований зловмисник може впровадити шкідливий SQL у зовнішній контент, який обробляє агент. Якщо агент підключається як суперкористувач або член ролі pg_execute_server_program, на сервері виконується довільний шелл-код. Керовані сервіси RDS та Aurora блокують цю роль за замовчуванням, тому небезпека загрожує переважно self-managed інсталяціям Postgres. ### Аудит безпеки у чотири кроки. Надійний захист вимагає конфігурації ролей бази даних, а не нескінченного розширення regex-фільтрів. Спершу виконайте pg_has_role, щоб перевірити наявність прав pg_execute_server_program у вашого MCP-користувача. Далі оновіть postgres-mcp-server щонайменше до версії 1.1.7, де додано COPY_PROGRAM_PATTERN. Насамкінець надайте ролі виключно привілеї CONNECT, USAGE та SELECT на потрібні схеми.
Спробуй за 2 хвилини
SELECT pg_has_role(rolname, 'pg_execute_server_program', 'member') AS exec_program FROM pg_roles WHERE rolname = current_user;sql
✓ Коли використовувати
- Підключення агентів Claude або Cursor до бази даних PostgreSQL для аналітики та вивчення схем.
- Аудит безпеки інструментів під час розгортання агентів у внутрішній інфраструктурі.
✕ Коли НЕ варто
- Не покладайтеся на прапорці тільки для читання в застосунку, якщо користувач БД має права superuser.
- Не підключайте застарілі незафіксовані версії MCP-серверів до обробки неперевірених вхідних даних.
Що зробити сьогодні
- Оновіть пакет postgres-mcp-server до версії 1.1.7 або новішої на PyPI.
- Перевірте ролі користувача бази даних та відкличте права pg_execute_server_program і superuser.
- Обмежте дозволи для MCP-користувача виключно діями CONNECT, USAGE та SELECT.