flawopen.com/AI Security/cve-2026-107322-aws-databases-on-aws-psql-command-injection
CVE-2026-107322: инъекция команд в плагине AWS для агентов
CVE-2026-107322 затрагивала необязательный helper psql в плагине AWS databases-on-aws. Фильтр пропускал метакоманды psql; удалённый контент мог привести к выполнению команд на хосте только если агент позднее передавал значение helper. Обновите версию до 1.7.1 или новее.[1], [2], [4]
Сотрудник проверяет записку на дополнительные SQL-инструкции, но забывает, что у клиента базы данных есть собственный язык команд. Внешний контент попадёт ко второму интерпретатору лишь если агент передаст его локальному helper. Исправление отклоняет такую синтаксическую конструкцию до запуска.[1], [2]
Ключевые понятия и термины
Метакоманда psql- Инструкция интерактивного клиента PostgreSQL, а не сервера базы. Это отдельная граница разбора наряду с SQL.[2], [3]
CWE-184: неполный список запрещённых данных- Фильтр отклоняет одни формы, но пропускает другую, которую следующий компонент понимает особым образом.[2], [4]
Контент, полученный агентом- Данные из удалённого или недоверенного источника. AWS не указывает, как подготовленный контент попадает к агенту.[1]
Связи со стандартами
- Ссылка CWE для слабого места, описанного в этом руководстве: CWE-184
Пошаговый сценарий атаки
Анализ первопричины
AWS и сопровождающий проекта связывают CVE-2026-107322 с неполной фильтрацией во вспомогательном скрипте подключения psql из databases-on-aws. До исправления проверка удаляла SQL-литералы в одинарных кавычках из рабочей копии и отклоняла разделители операторов и SQL-комментарии, но пропускала обратные косые черты, которые клиент psql интерпретирует как синтаксис метакоманд. Исправление отклоняет оставшиеся обратные косые черты после обработки литералов и до прежних проверок, закрывая пропущенную границу разбора.[1], [2], [3]
Исходный код: Уязвимый vs Защищённый вариант
Upstream-патч отклоняет оставшиеся обратные косые черты после удаления SQL-литералов в одинарных кавычках, до вызова psql и прежних проверок. Это сокращённый фрагмент, а не универсальный SQL-парсер; у исходной обработки кавычек есть документированные крайние случаи. Для сложных или недоверенных запросов не используйте необязательный shell-helper: AWS рекомендует DSQL MCP-сервер или вручную проверенный SQL. Запускайте процесс с минимальными правами: это ограничивает последствия, но не заменяет обновление.[2], [3]
Фрагмент исходного кода: plugins/databases-on-aws/scripts/psql-connect.sh — сокращённый фрагмент фильтра --command
# Сокращённый фрагмент: проверки SQL не отклоняли синтаксис метакоманд psql.
stripped=$(echo "$COMMAND" | sed "s/'[^']*'//g")
if echo "$stripped" | grep -q ';'; then
echo "Error: multiple SQL statements are not allowed." >&2
exit 1
fi
if echo "$stripped" | grep -q -- '--'; then
echo "Error: SQL comments are not allowed." >&2
exit 1
fi
psql --command "$COMMAND"
# Сокращённый фрагмент на основе исправления upstream в версии 1.7.1.
stripped=$(echo "$COMMAND" | sed "s/'[^']*'//g")
if echo "$stripped" | grep -q '\\'; then
echo "Error: psql meta-commands are not allowed." >&2
exit 1
fi
if echo "$stripped" | grep -q ';'; then
echo "Error: multiple SQL statements are not allowed." >&2
exit 1
fi
if echo "$stripped" | grep -q -- '--'; then
echo "Error: SQL comments are not allowed." >&2
exit 1
fi
psql --command "$COMMAND"
Чек-лист по защите системы для инженеров
- ✓Обновите databases-on-aws до 1.7.1 или новее; закреплённые checkout должны использовать коммит 8b13a503746a4ebb0402b936645163224058bde3 или новее.[1], [2], [3]
- ✓До обновления отключите необязательный helper psql; используйте проверенный вручную SQL или DSQL MCP-сервер.[1]
- ✓Учитывайте отдельный язык метакоманд клиента psql, а не только SQL-фильтры.[2], [3]
- ✓Проверьте тестами, что отклонённый ввод останавливает процесс до запуска psql; добавьте допустимые SQL-примеры.[3]
- ✓Запускайте агента и helper без привилегий, с IAM-ролью только для dsql:DbConnect и ограниченной ролью БД; не используйте dsql:DbConnectAdmin.[1]
- ✓При признаках доступа следуйте AWS: смените или отзовите доступные учётные данные и проверьте роли и IAM-сопоставления.[1], [2]
Источники
- AWS Security Bulletin 2026-130 — CVE-2026-107322
- Amazon Agent Plugins for AWS — GHSA-x7f2-wxc8-qpxq
- Upstream fix commit 8b13a503746a4ebb0402b936645163224058bde3
- CVE Program record — CVE-2026-107322
- Related FlawOpen analysis — AWS Security Agent MCP Git argument injection
- Related FlawOpen analysis — PostgreSQL CVE-2025-1094 and the BeyondTrust incident