TinyMCE XSS Vulnerability

2013.03.11
Risk: Low
Local: No
Remote: Yes
CWE: CWE-79


CVSS Base Score: 4.3/10
Impact Subscore: 2.9/10
Exploitability Subscore: 8.6/10
Exploit range: Remote
Attack complexity: Medium
Authentication: No required
Confidentiality impact: None
Integrity impact: Partial
Availability impact: None

Vulnerability Report Author: Justin C. Klein Keane <justin () madirish net> Date: 5 March, 2013 CVE-2012-4230 Description of Vulnerability: ----------------------------- "TinyMCE in itself can not be insecure" (http://www.tinymce.com/wiki.php/Security) "TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under LGPL by Moxiecode Systems AB. TinyMCE has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances. TinyMCE is very easy to integrate into other Content Management Systems." (http://www.tinymce.com/) TinyMCE is widely utilized in a number of web application systems. A cross site scripting (XSS), or arbitrary script injection, vulnerability exists in TinyMCE due to the fact that the bbcode plugin violates the explicit security policy of TinyMCE. If the bbcode plugin is enabled, but encoding is enabled using the "encoding" directive, or sanitizing is enabled using the "valid_elements" attribute, these mechanisms fail to function as expected. According to the "encoding" documentation: "Posted content will be converted to an XML string escaping characters such as <, >, ", and & to &lt;, &gt;, &quot;, and &amp;." (http://www.tinymce.com/wiki.php/Configuration:encoding) According to the "valid_elements" attribute documentation: "valid_elements option defines which elements will remain in the edited text when the editor saves. You can use this to limit the returned HTML to a subset." (http://www.tinymce.com/wiki.php/Configuration:valid_elements) However, if the bbcode plugin is enabled these stated functions do not affect content. Systems affected: ----------------- TinyMCE 3.5.8 was tested and found vulnerable using Chrome Version 25.0.1364.97. Impact: ------ Systems using TinyMCE could erroneously assume a level of protection against arbitrary script execution within the client side context of TinyMCE. This could allow attackers to misuse TinyMCE enabled applications to carry out arbitrary script injection (XSS) attacks. Victims could be subject to credential theft, client side attack, or other dangerous condition. Mitigating factors: ------------------- The TinyMCE system must be configured to use the bbcode plugin (included in TinyMCE). Proof of Concept Exploit: --------------------------------- Configuring a TinyMCE textarea using: tinyMCE.init({ mode : "textareas", encoding : "xml", plugins : "preview", theme_advanced_buttons1 : "preview,code", valid_elements : "br,strong", }); will create the expected text area. If a user types HTML tags directly into the textarea then presses the 'Preview' button the HTML characters are properly encoded and show up in the display. Similarly, if the 'Code' button is pressed the pop up will show encoded HTML entities. However, if the bbcode plugin is utilized then this behavior changes, and HTML elements are not encoded, causing HTML tags to be rendered. The explicit security policy of TinyMCE indicates that if the "encoding" option is set then HTML entities will be encoded and if the "valid_elements" option is set HTML elements will be removed, however, the use of the bbcode plugin overrides this behavior, which could lead to vulnerabilities in situations where a developer improperly assumed that HTML would be encoded by the TinyMCE editor. Steps to Reproduce: ------------------- Install TinyMCE and create a textarea with the following init: tinyMCE.init({ mode : "textareas", encoding : "xml", plugins : "preview", theme_advanced_buttons1 : "preview,code", valid_elements : "br,strong", }); Load the page containing the textarea in a browser and enter the text "<b>test</b>" then click the HTML Source Editor button and note that the HTML entities are encoded showing "&lt;b&gt;test&lt;/b&gt;". Next change the init to the following: tinyMCE.init({ mode : "textareas", encoding : "xml", plugins : "bbcode,preview", theme_advanced_buttons1 : "preview,code", valid_elements : "br,strong", }); Type "<b>test</b>" into the textarea and again, click the HTML Source Editor button. Note that the HTML entities have not been encoded. This test can be run using the text "<script>alert('xss');</script>" for a more dramatic demonstration of the issue. Credits: -------- This issue was originally discovered by Zach Alexander Vendor Response: ---------------- Vendor has been alerted to this vulnerability but does not consider it a critical security issue and will look into mitigation at some future time. -- Justin C. Klein Keane http://www.MadIrish.net

References:

http://www.MadIrish.net


Vote for this issue:
50%
50%


 

Thanks for you vote!


 

Thanks for you comment!
Your message is in quarantine 48 hours.

Comment it here.


(*) - required fields.  
{{ x.nick }} | Date: {{ x.ux * 1000 | date:'yyyy-MM-dd' }} {{ x.ux * 1000 | date:'HH:mm' }} CET+1
{{ x.comment }}

Copyright 2024, cxsecurity.com

 

Back to Top