{"id":"CVE-2026-54335","summary":"Feathersjs: Prototype pollution in @feathersjs/commons _.merge via JSON-parsed __proto__","details":"Feathersjs is a framework for creating web APIs and real-time applications with TypeScript or JavaScript. In 5.0.44 and earlier, the _.merge(target, source) utility exported by @feathersjs/commons recursively merges source into target by iterating Object.keys(source). When source was produced by JSON.parse and contains a __proto__, constructor, or prototype key, that key is returned as an own-enumerable property; the recursive merge then resolves target['__proto__'] to Object.prototype and writes attacker-supplied properties onto it, polluting the prototype for all plain objects in the process for the lifetime of the Node process. This issue is fixed in version 5.0.45.","aliases":["GHSA-28xv-ph75-77wh"],"modified":"2026-07-22T05:30:11.846399812Z","published":"2026-07-17T20:56:51.857Z","database_specific":{"osv_generated_from":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/54xxx/CVE-2026-54335.json","cna_assigner":"GitHub_M","cwe_ids":["CWE-1321"]},"references":[{"type":"WEB","url":"https://github.com/feathersjs/feathers/releases/tag/v5.0.45"},{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/54xxx/CVE-2026-54335.json"},{"type":"ADVISORY","url":"https://github.com/feathersjs/feathers/security/advisories/GHSA-28xv-ph75-77wh"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-54335"},{"type":"FIX","url":"https://github.com/feathersjs/feathers/commit/28b3c03c63bdbff53115fdaa46c56980e7942acc"},{"type":"FIX","url":"https://github.com/feathersjs/feathers/pull/3690"}],"affected":[{"ranges":[{"type":"GIT","repo":"https://github.com/feathersjs/feathers","events":[{"introduced":"0"},{"fixed":"28b3c03c63bdbff53115fdaa46c56980e7942acc"},{"fixed":"6cb38594f88c47562f8f96f70a5492f3b6bd0ba8"}],"database_specific":{"extracted_events":[{"introduced":"0"},{"fixed":"5.0.45"}],"source":["AFFECTED_FIELD","REFERENCES"]}}],"versions":["v5.0.44","v5.0.43","v5.0.42","v5.0.41","v5.0.40","v5.0.39","v5.0.38","v5.0.37","v5.0.36","v5.0.35","v5.0.34","v5.0.33","v5.0.32","v5.0.31","v5.0.30","v5.0.29","v5.0.28","v5.0.27","v5.0.26","v5.0.25","v5.0.24","v5.0.23","v5.0.22","v5.0.21","v5.0.20","v5.0.19","v5.0.18","v5.0.17","v5.0.16","v5.0.15","v5.0.14","v5.0.13","v5.0.12","v5.0.11","v5.0.10","v5.0.9","v5.0.8","v5.0.7","v5.0.6","v5.0.5","v5.0.4","v5.0.3","v5.0.2","v5.0.1","v5.0.0","v5.0.0-pre.38","v5.0.0-pre.37","v5.0.0-pre.36","v5.0.0-pre.35","v5.0.0-pre.34","v5.0.0-pre.33","v5.0.0-pre.32","v5.0.0-pre.31","v5.0.0-pre.30","v5.0.0-pre.29","v5.0.0-pre.28","v5.0.0-pre.27","v5.0.0-pre.26","v5.0.0-pre.25","v5.0.0-pre.24","v5.0.0-pre.23","v5.0.0-pre.22","v5.0.0-pre.21","v5.0.0-pre.20","v5.0.0-pre.19","v5.0.0-pre.18","v5.0.0-pre.17","v5.0.0-pre.16","v5.0.0-pre.15","v5.0.0-pre.14","v5.0.0-pre.13","v5.0.0-pre.12","v5.0.0-pre.11","v5.0.0-pre.10","v5.0.0-pre.9","v5.0.0-pre.8","v5.0.0-pre.7","v5.0.0-pre.6","v5.0.0-pre.5","v5.0.0-pre.4","v5.0.0-pre.3","v5.0.0-pre.2","v5.0.0-beta.1","v5.0.0-beta.0","v5.0.0-pre.1","v5.0.0-pre.0","v4.5.2","v4.5.1","v4.5.0","v4.4.3","v4.4.1","v4.4.0","v4.3.11","v4.3.10","v4.3.9","v4.3.8","v4.3.7","v4.3.6","v4.3.5","v4.3.4","v4.3.3","v4.3.2","v4.3.1","v4.3.0","v4.3.0-pre.4","v4.3.0-pre.3","v4.3.0-pre.2","v4.3.0-pre.1","v4.0.0-pre.5","v4.0.0-pre.4","v4.0.0-pre.3","v4.0.0-pre.2","v4.0.0-pre.1","v4.0.0-pre.0","@feathersjs/client@3.7.8","@feathersjs/authentication@2.1.16","@feathersjs/authentication-oauth2@1.3.1","@feathersjs/authentication-oauth1@1.1.1","@feathersjs/authentication-jwt@2.0.10","@feathersjs/authentication-client@1.0.11","@feathersjs/adapter-tests@1.0.1","@feathersjs/adapter-tests@1.0.0","@feathersjs/adapter-commons@2.0.0","@feathersjs/authentication-oauth2@1.3.0","@feathersjs/authentication-oauth1@1.1.0","@feathersjs/transport-commons@4.2.1","@feathersjs/socketio@3.2.9","@feathersjs/socketio-client@1.2.1","@feathersjs/rest-client@1.4.7","@feathersjs/primus@3.2.8","@feathersjs/primus-client@1.1.7","@feathersjs/feathers@3.3.1","@feathersjs/express@1.3.1","@feathersjs/errors@3.3.6","@feathersjs/configuration@2.0.6","@feathersjs/client@3.7.7","@feathersjs/authentication@2.1.15","@feathersjs/authentication-oauth2@1.2.7","@feathersjs/authentication-oauth1@1.0.10","@feathersjs/authentication-local@1.2.9","@feathersjs/authentication-jwt@2.0.9","@feathersjs/authentication-client@1.0.10","@feathersjs/adapter-commons@1.0.7","@feathersjs/adapter-commons@1.0.6","@feathersjs/adapter-commons@1.0.5","@feathersjs/adapter-commons@1.0.4","@feathersjs/adapter-commons@1.0.3","@feathersjs/adapter-commons@1.0.2","@feathersjs/adapter-commons@1.0.1","@feathersjs/transport-commons@4.2.0","@feathersjs/socketio@3.2.8","@feathersjs/socketio-client@1.2.0","@feathersjs/rest-client@1.4.6","@feathersjs/primus@3.2.7","@feathersjs/primus-client@1.1.6","@feathersjs/feathers@3.3.0","@feathersjs/express@1.3.0","@feathersjs/errors@3.3.5","@feathersjs/configuration@2.0.5","@feathersjs/commons@4.0.0","@feathersjs/client@3.7.6","@feathersjs/authentication@2.1.14","@feathersjs/authentication-oauth2@1.2.6","@feathersjs/authentication-oauth1@1.0.9","@feathersjs/authentication-local@1.2.8","@feathersjs/authentication-jwt@2.0.8","@feathersjs/authentication-client@1.0.9","@feathersjs/adapter-commons@1.0.0","@feathersjs/client@3.7.5","@feathersjs/authentication@2.1.13","@feathersjs/authentication-local@1.2.7","@feathersjs/authentication-jwt@2.0.7","@feathersjs/authentication-client@1.0.8","generator-feathers@2.8.0","@feathersjs/transport-commons@4.1.6","@feathersjs/socketio@3.2.7","@feathersjs/socketio-client@1.1.5","@feathersjs/primus@3.2.6","@feathersjs/primus-client@1.1.5","@feathersjs/client@3.7.4","@feathersjs/cli@3.8.7","@feathersjs/authentication@2.1.12","@feathersjs/authentication-oauth2@1.2.5","@feathersjs/authentication-oauth1@1.0.8","@feathersjs/authentication-local@1.2.6","@feathersjs/authentication-jwt@2.0.6","@feathersjs/authentication-client@1.0.7","generator-feathers@2.7.1","@feathersjs/cli@3.8.6","generator-feathers@2.7.0","@feathersjs/client@3.7.3","@feathersjs/cli@3.8.5","generator-feathers@2.6.4","@feathersjs/transport-commons@4.1.5","@feathersjs/socketio@3.2.6","@feathersjs/socketio-client@1.1.4","@feathersjs/rest-client@1.4.5","@feathersjs/primus@3.2.5","@feathersjs/primus-client@1.1.4","@feathersjs/feathers@3.2.3","@feathersjs/express@1.2.7","@feathersjs/errors@3.3.4","@feathersjs/configuration@2.0.4","@feathersjs/client@3.7.2","@feathersjs/cli@3.8.4","@feathersjs/authentication@2.1.11","@feathersjs/authentication-oauth2@1.2.4","@feathersjs/authentication-oauth1@1.0.7","@feathersjs/authentication-local@1.2.5","@feathersjs/authentication-jwt@2.0.5","@feathersjs/authentication-client@1.0.6","generator-feathers@2.6.3","@feathersjs/transport-commons@4.1.4","@feathersjs/socketio@3.2.5","@feathersjs/socketio-client@1.1.3","@feathersjs/rest-client@1.4.4","@feathersjs/primus@3.2.4","@feathersjs/primus-client@1.1.3","@feathersjs/feathers@3.2.2","@feathersjs/express@1.2.6","@feathersjs/errors@3.3.3","@feathersjs/configuration@2.0.3","@feathersjs/commons@3.0.1","@feathersjs/cli@3.8.3","@feathersjs/authentication@2.1.10","@feathersjs/authentication-oauth2@1.2.3","@feathersjs/authentication-oauth1@1.0.6","@feathersjs/authentication-local@1.2.4","@feathersjs/authentication-jwt@2.0.4","@feathersjs/authentication-client@1.0.5","generator-feathers@2.6.2","@feathersjs/transport-commons@4.1.3","@feathersjs/socketio@3.2.4","@feathersjs/socketio-client@1.1.2","@feathersjs/rest-client@1.4.3","@feathersjs/primus@3.2.3","@feathersjs/primus-client@1.1.2","@feathersjs/feathers@3.2.1","@feathersjs/express@1.2.5","@feathersjs/errors@3.3.2","@feathersjs/configuration@2.0.2","@feathersjs/cli@3.8.2","@feathersjs/authentication@2.1.9","@feathersjs/authentication-oauth2@1.2.2","@feathersjs/authentication-oauth1@1.0.5","@feathersjs/authentication-local@1.2.3","@feathersjs/authentication-jwt@2.0.3","@feathersjs/authentication-client@1.0.4","generator-feathers@2.6.1","generator-feathers-plugin@1.0.1","@feathersjs/transport-commons@4.1.2","@feathersjs/socketio@3.2.3","@feathersjs/socketio-client@1.1.1","@feathersjs/rest-client@1.4.2","@feathersjs/primus@3.2.2","@feathersjs/primus-client@1.1.1","@feathersjs/feathers@3.2.0","@feathersjs/express@1.2.4","@feathersjs/errors@3.3.1","@feathersjs/configuration@2.0.1","@feathersjs/commons@3.0.0","@feathersjs/cli@3.8.1","@feathersjs/authentication@2.1.8","@feathersjs/authentication-oauth2@1.2.1","@feathersjs/authentication-oauth1@1.0.4","@feathersjs/authentication-local@1.2.2","@feathersjs/authentication-jwt@2.0.2","@feathersjs/authentication-client@1.0.3","v3.2.0-pre.1","v3.1.7","v3.1.6","v3.1.5","v3.1.4","v3.1.3","v3.1.2","v3.1.1","v3.1.0","v3.0.5","v3.0.4","v3.0.3","v3.0.2","v3.0.1","v3.0.0","v2.2.3","v2.2.2","v2.2.1","v2.2.0","v2.1.7","v2.1.6","v2.1.4","v2.1.3","v2.1.2","v2.1.1","v2.1.0","v2.0.3","v2.0.2","v2.0.1","v2.0.0","v2.0.0-pre.4","v2.0.0-pre.3","v2.0.0-pre.2","v2.0.0-pre.1","v1.2.1","v1.2.0","v1.1.1","v1.1.0","1.1.0-pre.0","1.0.2","1.0.1","1.0.0","1.0.0-pre.5","1.0.0-pre.1","0.4.0","0.3.2","0.3.1","0.3.0","0.2.0","0.1.0","0.0.4","0.0.3","0.0.2"],"database_specific":{"source":"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-54335.json"}}],"schema_version":"1.7.5","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N"}]}