Progress Kendo UI Editor 跨站脚本漏洞

QQ空间 新浪微博 微信 QQ facebook twitter
漏洞ID 1328819 漏洞类型 跨站脚本
发布时间 2018-09-27 更新时间 2019-08-02
CVE编号 CVE-2018-14037 CNNVD-ID CNNVD-201809-1218
漏洞平台 N/A CVSS评分 N/A
Progress Kendo UI Editor是美国Progress Software公司的一款富文本编辑器。 Progress Kendo UI Editor 2018.1.221版本中存在跨站脚本漏洞。远程攻击者可利用该漏洞向WYSIWYG editor的DOM注入任意JavaScript代码。
SEC Consult Vulnerability Lab Security Advisory < 20180926-0 >
              title: Stored Cross-Site Scripting
            product: Progress Kendo UI Editor
 vulnerable version: v2018.1.221
      fixed version: none, see workaround
         CVE number: CVE-2018-14037
             impact: medium
              found: 2018-04-23
                 by: M. Tomaselli (Office Munich)
                     SEC Consult Vulnerability Lab

                     An integrated part of SEC Consult
                     Europe | Asia | North America



Vendor description:
"The Editor allows users to create rich text content by means of a WYSIWYG
interface. This HTML5 widget outputs identical HTML across all major browsers,
follows accessibility standards and provides an API for content manipulation.
The generated widget value is comprised of XHTML markup."

Business recommendation:
SEC Consult recommends to implement the workarounds provided by the vendor.

Vulnerability overview/description:
The demo application of the Kendo UI Editor which is hosted at implements a Sanitizer function
which should protect from cross site scripting. However, the implemented
Sanitizer fails to catch certain payloads which allow an attacker to execute
JavaScript in the context of the editor itself.

Proof of concept:
The following, incomplete list, of payloads can be used to trigger an alert
box in the API demo application of the Kendo UI Editor:

<IFRAME SRC="javascript:alert('XSS');"></IFRAME>

After a click on the button the setValue function on line 513 of the beautified
"api.js" is called:

var setValue = function () {

The value function is implemented in line 64383 of the beautified "kendo.all.js"
file and defined as:

value: function (html) {
            var body = this.body, editorNS = kendo.ui.editor, options =
this.options, currentHtml = editorNS.Serializer.domToXhtml(body,
            if (html === undefined) {
                return currentHtml;
            if (html == currentHtml) {
            editorNS.Serializer.htmlToDom(html, body, options.deserialization);
            this.selectionRestorePoint = null;

In order to mitigate certain XSS payloads the editorNS.Serializer.htmlToDom()
function is called which can be seen in the excerpt below:

var Serializer = {
    toEditableHtml: function (html) {
        return (html || '').replace(/<!\[CDATA\[(.*)?\]\]>/g,
'<$1k:script$2>').replace(/<img([^>]*)>/gi, function (match) {
            return match.replace(onerrorRe, '');
        }).replace(/(<\/?img[^>]*>)[\r\n\v\f\t ]+/gi,
'$1').replace(/^<(table|blockquote)/i, br +
'<$1').replace(/^[\s]*( |\u00a0)/i, '$1').replace(/<\/(table|blockquote)>$/i,
'</$1>' + br);

Although certain payloads are detected and sanitized by the function, the
implemented protection fails to detect the data uri payload. The payload is
added unescaped to the editor DOM after several other functions calls.

Vulnerable / tested versions:
The following version has been identified to be vulnerable:
* v2018.1.221

Vendor contact timeline:
2018-05-02: Contacting vendor through email for security contact
2018-05-02: Contact person requests to obtain advisory via unencrypted mail
2018-05-08: Advisory delivered through unencrypted email to vendor
2018-05-29: Contacting vendor for current status and informing them about the
            publishing date
2018-07-02: Reminded the vendor that the advisory will be published soon
2018-07-02: Multiple emails exchanged, vendor demands that customers need to
            issue a support ticket on this case
2018-07-03: Telling them that it is a security issue they already know two months
            without seemingly acting upon it.
            Vendor: product managers have been informed and will contact us;
            no further info
2018-07-11: Asking vendor again for a status update & patch information
2018-07-11: Vendor: "Thank you for following up. I have sent this to the product
            team to take into consideration. They will be following up with you as
            they may need. We appreciate you following up regarding this request."
2018-07-12: Detailed answer from vendor regarding workaround
2018-07-13: Requested CVE number
2018-09-26: Public release of security advisory

There is no fix available from the vendor. Check the vendor's website for
potential future updates.

The following workaround was provided by the vendor which has to be extended in
order to mitigate all of the above mentioned payloads.

First, one thing to keep in mind with the Kendo UI Editor is that since it is
a HTML editor that many users implement in order take advantage of HTML content
 (compared to straight text). This means that while we often sanitize many
things (script tags, DOM event attributes, etc.) in order to prevent
cross-site scripting [...] there are certain cases that we cannot automatically
sanitize because of use cases that customers of ours have a this being one of

Because the value that is set to the Editor is done through the jQuery method
`$(a#valuea).val()` it is possible to sanitize or encode values before being
set to the editor.

This is can be done through implementing some custom sanitations through the
options available in the Editor today.

<!DOCTYPE html>
  <meta charset="utf-8">

  <link rel="stylesheet"
  <link rel="stylesheet"
  <link rel="stylesheet"
  <link rel="stylesheet"

  <script src=""></script>
  <script src=""></script>
  <script src=""></script>
  <textarea id="editor"></textarea>
    function sanitizeHtml(html) {
      var temp = $("<div></div>").html(html);
      return temp.html() || "\ufeff";

      tools: [
      deserialization: {
        custom: function(html) {
          return sanitizeHtml(html);
      serialization: {
        custom: function(html) {
          return sanitizeHtml(html);

    var editor = $("#editor").getKendoEditor();


Advisory URL:


SEC Consult Vulnerability Lab

SEC Consult
Europe | Asia | North America

About SEC Consult Vulnerability Lab
The SEC Consult Vulnerability Lab is an integrated part of SEC Consult. It
ensures the continued knowledge gain of SEC Consult in the field of network
and application security to stay ahead of the attacker. The SEC Consult
Vulnerability Lab supports high-quality penetration testing and the evaluation
of new offensive and defensive technologies for our customers. Hence our
customers obtain the most current information about vulnerabilities and valid
recommendation about the risk profile of new technologies.

Interested to work with the experts of SEC Consult?
Send us your application

Interested in improving your cyber security with the experts of SEC Consult?
Contact our local offices

Mail: research at sec-consult dot com

EOF M. Tomaselli / @2018