🇰🇷 한글 설명
i18next의 deepExtend 함수가 상속된 내장 객체를 통해 Object.prototype의 내장 함수 객체에 접근할 수 있어, 공격자가 제어하는 리소스 데이터를 deep 및 overwrite 옵션과 함께 addResourceBundle에 전달하면 프로세스 전역의 내장 함수가 오염될 수 있습니다. 이로 인해 TypeError가 발생하고 서비스 거부(DoS) 및 제한적인 무결성 영향이 발생할 수 있습니다. 26.3.4 버전에서 수정되었습니다.
💡 쉬운 설명
i18next라는 다국어 처리 라이브러리에서, 특정 설정을 사용할 때 외부 입력으로 자바스크립트의 기본 함수들이 망가질 수 있는 취약점입니다. 이로 인해 애플리케이션이 멈추거나 오작동할 수 있습니다.
🇺🇸 원문 (English)
i18next is an internationalization framework for JavaScript. Prior to version 26.3.4, `deepExtend` in `src/utils.js` checks property existence with the in operator and recurses into inherited built-ins reached through `Object.prototype`. An application must explicitly pass attacker-controlled resource data to `addResourceBundle(lng, ns, data, deep, overwrite)` with both `deep: true` and `overwrite: true`. Source keys such as `hasOwnProperty`, `toString` and `valueOf` can then select shared inherited built-in function objects, and a nested value can overwrite a property of those objects process-wide. For example, making `Object.prototype.hasOwnProperty.call` non-callable causes subsequent uses, including i18next internals, to throw TypeError, resulting in unrecoverable denial of service and limited integrity impact. The `__proto__`/`constructor` guard does not prevent this mechanism because the corruption target is an inherited built-in function rather than the prototype object itself. Default calls without deep merging or with overwrite falsy are unaffected, and no standard i18next backend or integration uses the vulnerable configuration. This issue is distinct from the setPath/key-walking prototype-pollution flaws in i18next-fs-backend (CVE-2026-48713) and i18next-http-middleware (CVE-2026-48714). This issue is fixed in version 26.3.4.
📍 영향받는 시스템
i18next 26.3.4 미만 버전을 사용하며 addResourceBundle에 deep:true와 overwrite:true를 사용하는 Node.js/JavaScript 애플리케이션
⚔️ 공격 벡터
공격자가 제어하는 리소스 데이터에 hasOwnProperty, toString, valueOf 등의 키를 포함시켜 deep 병합과 overwrite 옵션 조합으로 전역 내장 함수를 덮어쓰는 방식
🛡️ 대응 방법
i18next를 26.3.4 이상으로 업그레이드하고, 신뢰할 수 없는 데이터를 addResourceBundle에 deep:true 및 overwrite:true와 함께 전달하지 않도록 합니다.
🔧 검증 코드
출력된 i18next 버전이 26.3.4 미만이면 취약하며, 26.3.4 이상이면 수정된 버전입니다.
npm ls i18next 2>/dev/null | grep i18next