[Pkg-javascript-devel] Bug#1034664: unblock: node-xml2js/0.4.23+~cs15.4.0+dfsg-5
Yadd
yadd at debian.org
Fri Apr 21 08:16:32 BST 2023
Package: release.debian.org
Severity: normal
User: release.debian.org at packages.debian.org
Usertags: unblock
X-Debbugs-Cc: node-xml2js at packages.debian.org
Control: affects -1 + src:node-xml2js
Please unblock package node-xml2js
[ Reason ]
node-xml2js version 0.4.23 allows an external attacker to edit or add new
properties to an object (#1034148, CVE-2023-0842)
[ Impact ]
Medium security issue
[ Tests ]
Test updates, passed
[ Risks ]
Low risk, patch is trivial and tested
[ Checklist ]
[X] all changes are documented in the d/changelog
[X] I reviewed all changes and I approve them
[X] attach debdiff against the package in testing
Cheers,
Yadd
unblock node-xml2js/0.4.23+~cs15.4.0+dfsg-5
-------------- next part --------------
diff --git a/debian/changelog b/debian/changelog
index 98492d7..9d9dac7 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,12 @@
+node-xml2js (0.4.23+~cs15.4.0+dfsg-5) unstable; urgency=medium
+
+ * Team upload
+ * Update standards version to 4.6.2, no changes needed.
+ * Update nodejs dependency to nodejs:any
+ * Add patch to prevent prototype pollution (Closes: #1034148, CVE-2023-0842)
+
+ -- Yadd <yadd at debian.org> Fri, 21 Apr 2023 11:11:13 +0400
+
node-xml2js (0.4.23+~cs15.4.0+dfsg-4) unstable; urgency=medium
* Team upload
diff --git a/debian/control b/debian/control
index dc4d6d0..406a88d 100644
--- a/debian/control
+++ b/debian/control
@@ -10,7 +10,7 @@ Build-Depends:
, node-sax <!nocheck>
, dh-sequence-nodejs
, node-diff
-Standards-Version: 4.6.1
+Standards-Version: 4.6.2
Vcs-Browser: https://salsa.debian.org/js-team/node-xml2js
Vcs-Git: https://salsa.debian.org/js-team/node-xml2js.git
Homepage: https://github.com/Leonidas-from-XIV/node-xml2js
@@ -21,8 +21,8 @@ Architecture: all
Depends:
${misc:Depends}
, node-sax
- , nodejs
, node-diff
+ , nodejs:any
Provides: ${nodejs:Provides}
Description: simple XML to JavaScript object converter - Node.js module
xml2js parses XML using node-sax and converts it to a plain JavaScript
diff --git a/debian/patches/CVE-2023-0842.patch b/debian/patches/CVE-2023-0842.patch
new file mode 100644
index 0000000..3d80ed9
--- /dev/null
+++ b/debian/patches/CVE-2023-0842.patch
@@ -0,0 +1,103 @@
+Description: use Object.create(null) to create all parsed objects
+ (prevent prototype replacement)
+Author: James Crosby <james at coggle.it>
+Origin: upstream, commit:581b19a6
+Bug: https://github.com/advisories/GHSA-776f-qx25-q3cc
+Bug-Debian: https://bugs.debian.org/1034148
+Forwarded: not-needed
+Applied-Upstream: 0.5.0, commit:581b19a6
+Reviewed-By: Yadd <yadd at debian.org>
+Last-Update: 2023-04-21
+
+--- a/src/parser.coffee
++++ b/src/parser.coffee
+@@ -103,12 +103,12 @@
+ charkey = @options.charkey
+
+ @saxParser.onopentag = (node) =>
+- obj = {}
++ obj = Object.create(null)
+ obj[charkey] = ""
+ unless @options.ignoreAttrs
+ for own key of node.attributes
+ if attrkey not of obj and not @options.mergeAttrs
+- obj[attrkey] = {}
++ obj[attrkey] = Object.create(null)
+ newValue = if @options.attrValueProcessors then processItem(@options.attrValueProcessors, node.attributes[key], key) else node.attributes[key]
+ processedKey = if @options.attrNameProcessors then processItem(@options.attrNameProcessors, key) else key
+ if @options.mergeAttrs
+@@ -161,7 +161,7 @@
+ # put children into <childkey> property and unfold chars if necessary
+ if @options.explicitChildren and not @options.mergeAttrs and typeof obj is 'object'
+ if not @options.preserveChildrenOrder
+- node = {}
++ node = Object.create(null)
+ # separate attributes
+ if @options.attrkey of obj
+ node[@options.attrkey] = obj[@options.attrkey]
+@@ -179,7 +179,7 @@
+ # append current node onto parent's <childKey> array
+ s[@options.childkey] = s[@options.childkey] or []
+ # push a clone so that the node in the children array can receive the #name property while the original obj can do without it
+- objClone = {}
++ objClone = Object.create(null)
+ for own key of obj
+ objClone[key] = obj[key]
+ s[@options.childkey].push objClone
+@@ -196,7 +196,7 @@
+ if @options.explicitRoot
+ # avoid circular references
+ old = obj
+- obj = {}
++ obj = Object.create(null)
+ obj[nodeName] = old
+
+ @resultObject = obj
+--- a/test/parser.test.coffee
++++ b/test/parser.test.coffee
+@@ -531,13 +531,13 @@
+
+ 'test single attrNameProcessors': skeleton(attrNameProcessors: [nameToUpperCase], (r)->
+ console.log 'Result object: ' + util.inspect r, false, 10
+- equ r.sample.attrNameProcessTest[0].$.hasOwnProperty('CAMELCASEATTR'), true
+- equ r.sample.attrNameProcessTest[0].$.hasOwnProperty('LOWERCASEATTR'), true)
++ equ {}.hasOwnProperty.call(r.sample.attrNameProcessTest[0].$, 'CAMELCASEATTR'), true
++ equ {}.hasOwnProperty.call(r.sample.attrNameProcessTest[0].$, 'LOWERCASEATTR'), true)
+
+ 'test multiple attrNameProcessors': skeleton(attrNameProcessors: [nameToUpperCase, nameCutoff], (r)->
+ console.log 'Result object: ' + util.inspect r, false, 10
+- equ r.sample.attrNameProcessTest[0].$.hasOwnProperty('CAME'), true
+- equ r.sample.attrNameProcessTest[0].$.hasOwnProperty('LOWE'), true)
++ equ {}.hasOwnProperty.call(r.sample.attrNameProcessTest[0].$, 'CAME'), true
++ equ {}.hasOwnProperty.call(r.sample.attrNameProcessTest[0].$, 'LOWE'), true)
+
+ 'test single attrValueProcessors': skeleton(attrValueProcessors: [nameToUpperCase], (r)->
+ console.log 'Result object: ' + util.inspect r, false, 10
+@@ -559,21 +559,21 @@
+
+ 'test single tagNameProcessors': skeleton(tagNameProcessors: [nameToUpperCase], (r)->
+ console.log 'Result object: ' + util.inspect r, false, 10
+- equ r.hasOwnProperty('SAMPLE'), true
+- equ r.SAMPLE.hasOwnProperty('TAGNAMEPROCESSTEST'), true)
++ equ {}.hasOwnProperty.call(r, 'SAMPLE'), true
++ equ {}.hasOwnProperty.call(r.SAMPLE, 'TAGNAMEPROCESSTEST'), true)
+
+ 'test single tagNameProcessors in simple callback': (test) ->
+ fs.readFile fileName, (err, data) ->
+ xml2js.parseString data, tagNameProcessors: [nameToUpperCase], (err, r)->
+ console.log 'Result object: ' + util.inspect r, false, 10
+- equ r.hasOwnProperty('SAMPLE'), true
+- equ r.SAMPLE.hasOwnProperty('TAGNAMEPROCESSTEST'), true
++ equ {}.hasOwnProperty.call(r, 'SAMPLE'), true
++ equ {}.hasOwnProperty.call(r.SAMPLE, 'TAGNAMEPROCESSTEST'), true
+ test.finish()
+
+ 'test multiple tagNameProcessors': skeleton(tagNameProcessors: [nameToUpperCase, nameCutoff], (r)->
+ console.log 'Result object: ' + util.inspect r, false, 10
+- equ r.hasOwnProperty('SAMP'), true
+- equ r.SAMP.hasOwnProperty('TAGN'), true)
++ equ {}.hasOwnProperty.call(r, 'SAMP'), true
++ equ {}.hasOwnProperty.call(r.SAMP, 'TAGN'), true)
+
+ 'test attrValueProcessors key param': skeleton(attrValueProcessors: [replaceValueByName], (r)->
+ console.log 'Result object: ' + util.inspect r, false, 10
diff --git a/debian/patches/series b/debian/patches/series
index 2840ff2..c9bf5bb 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,2 +1,3 @@
fix-for-coffeescript-2.patch
drop-test-not-compatible-with-coffe-2.patch
+CVE-2023-0842.patch
More information about the Pkg-javascript-devel
mailing list