CVE-2026-50029 in js-toml
요약
\~에 의해 VulDB • 2026. 08. 14.
js-toml은 JavaScript용 TOML 파서입니다. 버전 1.1.2 이전의 인터프리터는 `if (object[key])`를 사용하여 키가 이미 존재하는지 확인하지만, 이는 올바른 방법인 `if (key in object)` 대신 사용되었습니다. 기존 값이 거짓으로 평가되는 원시 타입(`false`, `0`, `0n`, `0.0`, `-0`, 또는 `""`)일 경우 중복 키 분기가 건너뛰어지고, 동일한 이름을 공유하는 후속 서브 테이블(dot-key sub-table)이나 배열 오브젝트(array-of-tables)에 의해 값이 묵시적으로 덮어씌워집니다. TOML 1.0.0 사양("키를 여러 번 정의하는 것은 무효입니다", "임의의 키나 테이블을 한 번 이상 정의할 수 없습니다")에 따르면 이는 파싱 오류여야 합니다. 그 결과 `load()`가 반환하는 값에서 공격자가 지정한 키들에 대해 구조적 타입 혼란(structural type confusion)이 발생합니다. 부울 타입인 `false`(또는 숫자형 `0`)가 참으로 평가되는 객체(truthy object)로 변합니다. `if (config.flag)`, `if (!user.banned)`, `if (config.allowDelete)` 또는 `if (config.publicMode)`와 같은 조건문에서 동작을 제어하는 호스트 애플리케이션은 묵시적으로 참 분기(truthy branch)를 따르게 됩니다. 이는 GHSA-65fc-cr5f-v7r2(1.0.2의 프로토타입 오염 수정 사항)와는 구별됩니다. `Object.prototype`이 오염되지 않습니다. 1.0.2에서 도입된 `Object.create(null)` 완화 조치는 그대로 유지되며, 여기서 발견된 버그는 컨테이너 생성 과정이 아닌 중복 키 상태 머신(duplicate-key state machine)에 있습니다. 버전 1.1.2에서는 잘못된 비교 연산을 패치하여 이 문제를 해결했습니다.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.