CVE-2026-104634: в beam_mcp булевы и null-аргументы инструментов доходят до диспетчера как строки
В библиотеке beam_mcp (ScriptKittyOS) из-за некорректного преобразования типов JSON-значения true, false и null превращаются в строки "true", "false" и "nil" до вызова диспетчера хоста. Поскольку в Elixir любая строка истинна, логика хоста, проверяющая булевый аргумент, может пойти по неверной ветке — например, воспринять confirm: false как подтверждение. Уязвимость затрагивает версии от 0.1.0 до 0.10.1, оценка CVSS — 2.3 (LOW).
Подробности
Уязвимость затрагивает пакет beam_mcp в версиях от 0.1.0 до 0.10.1 (исправление — в 0.10.1). Проблема находится в модуле BeamMCP.Server и классифицируется как Incorrect Type Conversion or Cast. CVSS-оценка — 2.3 (LOW). Механизм следующий: после того как BeamMCP.Schema.validate/2 принимает значение как boolean, функция normalize_arguments/2 пропускает каждый аргумент через to_json_value/1. В этой функции есть ветка для атомов, которая преобразует true, false и nil в строки "true", "false" и "nil" соответственно. В результате MCP-клиент, отправивший JSON-значения true, false или null, приводит к тому, что диспетчер хоста получает строки вместо булевых значений и null. Ключевая опасность в том, что в Elixir строка является истинной (truthy). Поэтому хост, проверяющий булевый аргумент, например через if args.dry_run, для значения false выберет ветку, соответствующую true. Аналогично guard вида confirm: false будет прочитан как установленный, то есть как подтверждение. Стоит отметить, что клиент контролирует аргумент и в принципе может отправить true напрямую, поэтому практическое влияние ограничено: оно затрагивает хосты, чьё поведение при false отличается от поведения при true, а также любые слои политик перед сервером, которые разрешают false, но запрещают true. Та же нормализация применяется к аргументам prompts/get, существующим начиная с версии 0.5.0.Что делать
Основная рекомендация — обновить beam_mcp до версии 0.10.1 или более поздней, где преобразование типов исправлено. Если обновление невозможно незамедлительно, следует рассмотреть компенсирующие меры: проверять типы аргументов на стороне хоста до их использования в условиях и guard-выражениях, не полагаться на неявную истинность значений, а также пересмотреть логику слоёв политик, различающих true и false. Дополнительно стоит проанализировать, не используются ли в вашем коде конструкции вида if args.dry_run или guard confirm: false, зависящие от точного булева типа. Итог: несмотря на низкую оценку CVSS, CVE-2026-104634 демонстрирует классическую ловушку приведения типов, способную изменить логику выполнения в критичных проверках. Обновление до 0.10.1 и явная проверка типов аргументов устраняют риск.Источник: CVE Project (cvelistV5)
