Ad

CVE-2026-50029

MEDIUM CVSS 3.1: 5,3 EPSS 0.23%
Обновлено 17 августа 2026
js-toml
Параметр Значение
CVSS 5,3 (MEDIUM)
Тип уязвимости CWE-697
Поставщик js-toml
Публичный эксплойт Нет

js-toml — это анализатор TOML для JavaScript. До версии 1.1.2 интерпретатор проверяет, существует ли уже ключ в контейнере, созданном анализатором, с помощью `if (object[key])` вместо `if (ключ в объекте)`. Если предыдущее значение является ложным примитивом — «false», «0», «0n», «0.0», «-0» или «"» — ветвь дублирующего ключа пропускается, и значение автоматически перезаписывается более поздней подтаблицей, подтаблицей с точечными ключами или массивом таблиц с тем же именем.

Согласно спецификации TOML 1.0.0 («Определение ключа несколько раз недопустимо»; «Вы не можете определить какой-либо ключ или таблицу более одного раза»), это должна быть ошибка синтаксического анализа. Результатом является путаница структурных типов ключей с именами злоумышленников в значении, возвращаемом функцией load(). Логический тип «false» (или числовой «0») становится истинным объектом.

Хост-приложения, которые контролируют поведение на `if (config.flag)`, `if (!user.banned)`, `if (config.allowDelete)` или `if (config.publicMode)`, автоматически перейдут на правдивую ветвь. Это отличается от GHSA-65fc-cr5f-v7r2 (исправление загрязнения прототипа 1.0.2). `Object.prototype` не загрязнен. Устранение `Object.create(null)` из версии 1.0.2 осталось без изменений; ошибка здесь заключается в конечном автомате с дубликатом ключа, а не в конструкции контейнера.

Версия 1.1.2 исправляет неправильное сравнение.

Показать оригинальное описание (EN)

js-toml is a TOML parser for JavaScript, Prior to version 1.1.2, the interpreter checks whether a key already exists in a parser-built container with `if (object[key])` instead of `if (key in object)`. When the prior value is a falsy primitive — `false`, `0`, `0n`, `0.0`, `-0`, or `""` — the duplicate-key branch is skipped and the value is silently overwritten by a later sub-table, dotted-key sub-table, or array-of-tables sharing the same name. Per the TOML 1.0.0 spec ("Defining a key multiple times is invalid"; "You cannot define any key or table more than once"), this should be a parse error. The result is structural type confusion of attacker-named keys in the value returned by `load()`. A boolean-typed `false` (or numeric `0`) becomes a truthy object. Host applications that gate behavior on `if (config.flag)`, `if (!user.banned)`, `if (config.allowDelete)`, or `if (config.publicMode)` will silently take the truthy branch. This is distinct from GHSA-65fc-cr5f-v7r2 (the 1.0.2 prototype-pollution fix). `Object.prototype` is not polluted. The `Object.create(null)` mitigation from 1.0.2 is intact; the bug here is in the duplicate-key state machine, not in container construction. Version 1.1.2 patches the incorrect comparison.

Характеристики атаки

Способ атаки
По сети
Атака возможна удалённо
Сложность
Низкая
Легко эксплуатировать
Нужны права
Не требуются
Права не нужны
Участие пользователя
Не требуется
Не нужно действие пользователя

Последствия

Конфиденциальность
Нет
Нет утечки данных
Целостность
Низкое
Частичная модификация данных
Доступность
Нет
Нет нарушения работы

Строка CVSS v3.1

Тип уязвимости (CWE)