Package: release.debian.org
Severity: normal
Tags: buster
User: release.debian....@packages.debian.org
Usertags: pu
X-Debbugs-Cc: pkg-javascript-de...@lists.alioth.debian.org

[ Reason ]
dojo/dijit is vulnerable to cross-site-scripting (#970000,
CVE-2020-4051).

[ Impact ]
Medium vulnerability

[ Tests ]
Test passed during build, including upstream new checks

[ Risks ]
Upstream patch applied without any changes, not trivial but not a big
change. From patch comment:

 This update should minimally affect production applications:
 * The behavior of existing links with HTML content will be unchanged
 * Existing links that are edited and saved will be filtered (this is only if
   the link is edited, other content within the editor can be edited without
   affecting the link)
 * Newly created links will be filtered by default
 * For production code to continue working as-is with new data the application
   code will have to be updated to specify `true` for the `LinkDialog` plugin's
   `allowUnsafeHtml` option

[ 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 (old)stable
  [X] the issue is verified as fixed in unstable

[ Changes ]
in plugin dijit/_editor/plugins/LinkDialog.js, a new chack was added

I didn't add any debian/NEWS entry since risk is tagged as "low". Do you
think it is required here? Maybe something inspired from comment below.

Cheers,
Xavier
diff --git a/debian/changelog b/debian/changelog
index d4aae875..407f7c48 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+dojo (1.14.2+dfsg1-1+deb10u3) buster; urgency=medium
+
+  * Team upload
+  * Fix cross-site-scripting vulnerability (Closes: #970000, CVE-2020-4051)
+
+ -- Yadd <y...@debian.org>  Fri, 16 Apr 2021 09:39:01 +0200
+
 dojo (1.14.2+dfsg1-1+deb10u2) buster; urgency=medium
 
   * Team upload
diff --git a/debian/patches/CVE-2020-4051.patch 
b/debian/patches/CVE-2020-4051.patch
new file mode 100644
index 00000000..714b93d2
--- /dev/null
+++ b/debian/patches/CVE-2020-4051.patch
@@ -0,0 +1,135 @@
+Description: fix cross-site scripting vulnerability in the Editor's LinkDialog 
plugin
+ * Add config option `allowUnsafeHtml`: default is `false` which results in
+   `<` being replaced with `&lt;`
+ * Add config option `linkFilter`: can be a function or array of filter pairs
+   to control exactly what filtering is applied
+ .
+ This update should minimally affect production applications:
+ .
+ * The behavior of existing links with HTML content will be unchanged
+ * Existing links that are edited and saved will be filtered (this is only if
+   the link is edited, other content within the editor can be edited without
+   affecting the link)
+ * Newly created links will be filtered by default
+ * For production code to continue working as-is with new data the application
+   code will have to be updated to specify `true` for the `LinkDialog` plugin's
+   `allowUnsafeHtml` option
+Author: Mangala Sadhu Sangeet Singh Khalsa <mssskha...@gmail.com>
+Origin: upstream, https://github.com/dojo/dijit/commit/7d9d4927
+Bug: https://github.com/dojo/dijit/security/advisories/GHSA-cxjc-r2fp-7mq6
+Bug-Debian: https://bugs.debian.org/970000
+Forwarded: not-needed
+Reviewed-By: Yadd <y...@debian.org>
+Last-Update: 2021-04-16
+
+--- a/dijit/_editor/plugins/LinkDialog.js
++++ b/dijit/_editor/plugins/LinkDialog.js
+@@ -1,5 +1,6 @@
+ define([
+       "require",
++      "dojo/_base/array",
+       "dojo/_base/declare", // declare
+       "dojo/dom-attr", // domAttr.get
+       "dojo/keys", // keys.ENTER
+@@ -11,7 +12,7 @@
+       "../_Plugin",
+       "../../form/DropDownButton",
+       "../range"
+-], function(require, declare, domAttr, keys, lang, on, has, query, string,
++], function(require, array, declare, domAttr, keys, lang, on, has, query, 
string,
+       _Plugin, DropDownButton, rangeapi){
+ 
+       // module:
+@@ -26,6 +27,21 @@
+               //
+               //              - createLink
+ 
++              // allowUnsafeHtml: boolean
++              //              If false (default), the link description will 
be filtered to prevent HTML content.
++              //              If true no filtering is done, allowing for HTML 
content within the link element.
++              //              The filter can be specified with the 
'linkFilter' option.
++              allowUnsafeHtml: false,
++
++              // linkFilter: function or array of replacement pairs
++              //              If 'allowUnsafeHtml' is false then this filter 
will be applied to the link Description value.
++              //              function: the function will be invoked with the 
string value of the Description field and its
++              //                      return value will be used
++              //              array: each array item should be an array of 
two values to pass to String#replace
++              linkFilter: [
++                      [/</g, "&lt;"]
++              ],
++
+               // Override _Plugin.buttonClass.   This plugin is controlled by 
a DropDownButton
+               // (which triggers a TooltipDialog).
+               buttonClass: DropDownButton,
+@@ -252,6 +268,16 @@
+                       if(args && args.urlInput){
+                               args.urlInput = args.urlInput.replace(/"/g, 
"&quot;");
+                       }
++                      if(!this.allowUnsafeHtml && args && args.textInput){
++                              if(typeof this.linkFilter === 'function'){
++                                      args.textInput = 
this.linkFilter(args.textInput);
++                              }
++                              else{
++                                      array.forEach(this.linkFilter, function 
(currentFilter) {
++                                              args.textInput = 
args.textInput.replace(currentFilter[0], currentFilter[1]);
++                                      });
++                              }
++                      }
+                       return args;
+               },
+ 
+@@ -629,8 +655,15 @@
+       });
+ 
+       // Register these plugins
+-      _Plugin.registry["createLink"] = function(){
+-              return new LinkDialog({command: "createLink"});
++      _Plugin.registry["createLink"] = function(args){
++              var pluginOptions = {
++                      command: "createLink",
++                      allowUnsafeHtml: ("allowUnsafeHtml" in args) ? 
args.allowUnsafeHtml : false
++              };
++              if("linkFilter" in args){
++                      pluginOptions.linkFilter = args.linkFilter;
++              }
++              return new LinkDialog(pluginOptions);
+       };
+       _Plugin.registry["insertImage"] = function(){
+               return new ImgLinkDialog({command: "insertImage"});
+--- a/dijit/tests/editor/test_LinkDialog.html
++++ b/dijit/tests/editor/test_LinkDialog.html
+@@ -7,6 +7,10 @@
+       <script type="text/javascript" src="../boilerplate.js"></script>
+ 
+       <script type="text/javascript">
++              function filterLink () {
++                      return 'Filtered Value';
++              }
++
+               require([
+                       "dojo/parser",
+                       "dijit/Editor",
+@@ -35,6 +39,22 @@
+                       <br>
+               </div>
+       </div>
++
++      <p>Editor with <code>allowUnsafeHtml</code> set to <code>true</code></p>
++      <div style="border: 1px dotted black;">
++              <div id="editorUnsafe" data-dojo-type="dijit/Editor" 
data-dojo-props='"aria-label":"editor",extraPlugins:[{name: "createLink", 
allowUnsafeHtml: true}, "insertImage", "viewSource"]'>
++                      <p>This editor will allow unrestricted HTML in the 
Description field of links</p>
++                      <br>
++              </div>
++      </div>
++
++      <p>Editor with custom <code>linkFilter</code> function</p>
++      <div style="border: 1px dotted black;">
++              <div id="editorLinkFilter" data-dojo-type="dijit/Editor" 
data-dojo-props='"aria-label":"editor",extraPlugins:[{name: "createLink", 
linkFilter: filterLink}, "insertImage", "viewSource"]'>
++                      <p>Links created in this editor will always have a 
description of "Filtered Value", which is the value returned by the custom 
<code>linkFilter</code> function.</p>
++                      <br>
++              </div>
++      </div>
+ 
+       <p>RTL Editor:</p>
+       <div style="border: 1px dotted black;">
diff --git a/debian/patches/series b/debian/patches/series
index d5b7db42..04f730d1 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -4,3 +4,4 @@
 CVE-2019-10785.patch
 CVE-2020-5258.diff
 CVE-2020-5259.diff
+CVE-2020-4051.patch

Reply via email to