← Back to Feed CACHED · 2026-10-17 17:32:31 · CACHE_KEY CVE-2026-102764
CVE-2026-102764 · CWE-290 · Disclosed 2026-10-15

BeyondTrust Remote Support Improper Origin Validation Leading to Unauthenticated Arbitrary File Operations

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

Imagine leaving your master key safe on the sidewalk with the combination taped to the lid — that's what an unpatched BeyondTrust RS appliance is right now

CVE-2026-102764 is an improper origin validation flaw (CWE-290) in an internal messaging component of BeyondTrust Remote Support. Because the component never checks *where* an inbound message actually comes from, an unauthenticated, remote attacker can forge messages that trigger arbitrary file operations on the appliance — including writing a web shell. Exploitation takes seconds: the ARMORY CASTLE campaign went from initial POST request to SAWFLY web shell drop in roughly 11 minutes, then to full root control shortly after. All supported versions through 26.2.3 are affected; the BT26-05-RS patch covers versions 24.3.1 – 26.2.3. Older unsupported branches require a full upgrade before patching.

The vendor rates this CRITICAL at 9.8 (CVSS 3.1) and 9.3 (CVSS 4.0), and for once the vendor severity is dead-on — possibly even underselling it when you factor in the post-exploitation blast radius. This is a network-reachable, zero-click, unauth file-write primitive on an appliance that is *designed* to be internet-facing and that holds or brokers every credential in your privileged session infrastructure. Mandiant's IR confirmed attackers escalated to root, dumped the credential vault via the native bt-secrets CLI, planted reboot-persistent backdoors, modified HAProxy configs for covert tunneling, and pivoted into downstream systems through BeyondTrust's own Jump Item infrastructure. The attack chain requires no authentication, no user interaction, and exploits a low-complexity network vector. There is no daylight between the vendor label and reality.

"Unauth RCE on a PAM appliance holding your credential vault, actively exploited by PRC APT since August."
02 · The Attack Path

6 steps from start to impact.

STEP 01

Forge origin on internal messaging component

The attacker sends a crafted HTTP request to the Remote Support appliance's web interface. The internal messaging subsystem fails to validate the origin of the received message, accepting it as legitimate. This requires only network reachability to the appliance — no credentials, no tokens, no user interaction. The appliance is architecturally designed to be internet-facing (HTTPS on port 443), so this is the default exposure posture.
Conditions required:
  • Network reachability to the BeyondTrust RS appliance on HTTPS (port 443)
  • Appliance running version ≤ 26.2.3 without BT26-05-RS patch
Where this breaks in practice:
  • None meaningful — the appliance is internet-facing by design; Shodan shows ~11,000 exposed instances
Detection/coverage: Tenable, Qualys, and Rapid7 have released authenticated and remote version-check plugins. GreyNoise has not reported mass scanning yet, but targeted exploitation is confirmed.
STEP 02

Arbitrary file write → web shell drop

Exploiting the origin bypass, the attacker performs arbitrary file operations on the appliance filesystem. In observed attacks, ARMORY CASTLE wrote a staging web shell to /app_84304470%2Ephp, then within ~11 minutes created the primary SAWFLY web shell (mangoapi.php) in the Laravel public directory. SAWFLY uses custom Base32 + RC4 encryption and returns HTTP 404 to any request missing the secret _c94mfe parameter, evading automated scanners.
Conditions required:
  • Successful origin validation bypass (Step 1)
Where this breaks in practice:
  • No additional friction — file write is the direct consequence of the origin bypass
Detection/coverage: YARA rule G_Hunting_Webshell_SAWFLY_1 (Google TIG). WAF/reverse-proxy logging for unknown .php paths outside the standard RS path set. IDS signatures for Base32-encoded POST bodies.
STEP 03

Privilege escalation via SUID shell

SAWFLY initially runs under the unprivileged site service account. The attacker copies /bin/sh to /usr/bin/dbus-authd, sets root ownership (chown root), and enables the SUID bit (chmod u+s). This gives any execution of dbus-authd root-level privileges. The binary name mimics a legitimate D-Bus component to avoid casual detection.
Conditions required:
  • Web shell execution on appliance (Step 2)
  • Ability to write to /usr/bin and invoke chown/chmod (appliance filesystem permissions allow this from the service account context)
Where this breaks in practice:
  • Appliance hardening could theoretically restrict write to /usr/bin, but default BeyondTrust RS appliance configuration permits it
Detection/coverage: File integrity monitoring (FIM) on /usr/bin for new SUID binaries. Host-based detection for chmod u+s on shell binaries.
STEP 04

Credential vault exfiltration

With root access, the attacker invokes the proprietary BeyondTrust CLI utility /ns/sbin/bt-secrets get vault to dump the appliance's credential store. This vault contains API secrets, session credentials, endpoint passwords, and any secrets managed through BeyondTrust Vault. The attacker also deletes bt-secrets.log to cover tracks. This single step gives the adversary credentials for every system the appliance manages.
Conditions required:
  • Root-level access on the appliance (Step 3)
Where this breaks in practice:
  • None — bt-secrets is a native appliance utility; there is no secondary auth gate protecting the vault from a root user
Detection/coverage: Monitor for execution of bt-secrets outside of scheduled backup windows. Alert on deletion of bt-secrets.log files.
STEP 05

Persistence via sudoers template + startup script

The attacker creates /home/bomgar/sbin/post_boot.d/zz-root-persist, a startup script that appends %SITE_SERVICE_ACCOUNT% ALL=(ALL) NOPASSWD: ALL to /ns/config/sudoers.template and invokes bt-sysconfig --no-restart misc to rebuild /etc/sudoers. This survives reboots AND configuration resets because it targets the template, not the active config. Combined with the SUID backdoor, the attacker maintains two independent persistence channels.
Conditions required:
  • Root-level access on the appliance (Step 3)
Where this breaks in practice:
  • Configuration resets do not remove post_boot.d scripts — by design, this directory persists
Detection/coverage: FIM on /home/bomgar/sbin/post_boot.d/ for new scripts. Audit sudoers.template for unexpected NOPASSWD entries.
STEP 06

Lateral movement via Jump Items + BARECLAW tunneling

The attacker logs into the BeyondTrust admin console with harvested credentials, escalates the compromised account to Jump Item Administrator, and uses BeyondTrust's native remote session and file transfer capabilities to access every managed endpoint. Simultaneously, the attacker deploys BARECLAW (ingredi_ws), a custom C-based SOCKS5 proxy tunneler using WebSockets, and routes it through the appliance's HAProxy config on a custom /uidchanarge endpoint. This provides a covert tunnel into the internal network that is invisible to external port scans (bound to 127.0.0.1:19800, fronted by HAProxy).
Conditions required:
  • Valid admin credentials from vault dump (Step 4)
  • Root access for HAProxy config modification (Step 3)
Where this breaks in practice:
  • Network segmentation downstream of the appliance could limit lateral reach, but the appliance is typically positioned to reach all managed endpoints by design
Detection/coverage: YARA rule G_Hunting_Backdoor_BARECLAW_1 (Google TIG). Monitor for user_changed events raising Jump Item roles. Detect unknown WebSocket upgrade paths in HAProxy/reverse proxy logs. Alert on new HAProxy backend configurations.
03 · Compensating Control

1
CRITICAL 9.8→IGNORE 0.0
SEVERITY REDUCED
Apply BT26-05-RS patch immediately — This is the only complete fix. Self-hosted customers must apply via the /appliance management interface. If running a version below 24.3.1, upgrade to a supported branch first, then patch. SaaS customers were auto-patched by October 9 — confirm via your BeyondTrust portal. Per the noisgate mitigation SLA for CRITICAL, deploy within 3 days. Given active APT exploitation and KEV listing, treat this as patch immediately, within hours.
2
CRITICAL 9.8→HIGH 7.5
SEVERITY REDUCED
Restrict appliance network exposure via firewall/WAF — Place the BeyondTrust RS appliance behind a WAF or reverse proxy with strict URI allowlisting. Block all paths except the known Remote Support path set. Specifically block unknown .php paths and WebSocket upgrades to non-standard endpoints. Apply IP allowlisting if your support model permits (e.g., restrict /appliance and /login to corporate VPN ranges). This does NOT fix the vulnerability but raises the bar for exploitation. Deploy within 3 days per noisgate mitigation SLA.
3
CRITICAL 9.8→CRITICAL 9.8
Hunt for indicators of compromise on all RS appliances — Before and after patching, run the Mandiant/Google TIG IOC checks: search for mangoapi.php (SAWFLY), dbus-authd SUID binary in /usr/bin, scripts in /home/bomgar/sbin/post_boot.d/, unexpected entries in sudoers.template, HAProxy backend modifications (look for /uidchanarge), and ingredi_ws (BARECLAW). Check web server logs for POST requests to /app_84304470%2Ephp. If ANY indicator is found, treat the appliance as fully compromised — isolate, preserve forensics, and rebuild from a clean patched image. Rotate ALL credentials stored in or brokered by the appliance.
4
CRITICAL 9.8→HIGH 7.0
SEVERITY REDUCED
Rotate all credentials stored in or brokered by the appliance — Even after patching, if the appliance was internet-reachable on a vulnerable version during the exploitation window (August 29 – patch date), assume credential compromise. Rotate: appliance admin passwords, API keys, Vault-stored credentials, Jump Item credentials, SAML/SSO secrets, and any downstream service accounts accessible via RS sessions. Rotation order matters — rotate the appliance admin credentials first, then downstream credentials in dependency order.
5
CRITICAL 9.8→CRITICAL 8.5
Enable SAML SSO with phishing-resistant MFA for admin access — Enforce SAML-based SSO with FIDO2/WebAuthn MFA for all administrative access to the BeyondTrust RS console. This does not prevent the initial unauthenticated file write (the vulnerability bypasses authentication entirely), but it hardens the post-exploitation lateral movement path — if the attacker dumps credentials but those credentials require MFA to use, the Jump Item pivot is blocked.
What doesn't work
  • EDR on the appliance — BeyondTrust RS runs on a proprietary Linux-based appliance with no support for third-party endpoint agents. You cannot install CrowdStrike, SentinelOne, or Defender on it.
  • Network IDS/IPS signature-based detection — SAWFLY's C2 traffic uses custom Base32 + RC4 encryption over standard HTTPS, making it indistinguishable from legitimate appliance traffic without TLS inspection at the appliance itself.
  • Appliance configuration reset — ARMORY CASTLE specifically targeted the sudoers *template* and post_boot.d directory, which survive configuration resets. A reset does NOT remove persistence; only a full rebuild from clean image does.
  • Disabling the messaging component — The vulnerable messaging subsystem is integral to Remote Support functionality. Disabling it would break the product entirely.
04 · Intelligence Metadata

The supporting signals.

In-the-Wild ExploitationConfirmed active since August 29, 2026. ARMORY CASTLE (PRC-nexus, formerly UNC5221) exploited this as a zero-day against at least two targets — one BeyondTrust-hosted SaaS instance and one self-hosted appliance. Mandiant/Google TIG published full IR analysis on October 15, 2026. Post-exploitation included root access, credential vault dump, SAWFLY web shell, BARECLAW tunneler, and lateral movement via Jump Items.
PoC AvailabilityNo public PoC. Checked pocindex.io, GitHub (CVE-2026-102764), ExploitDB, and Nuclei templates — no repositories or exploit code found as of October 18, 2026. However, the Mandiant/Google TIG report provides sufficient technical detail (HTTP POST to messaging component, file write primitive, SAWFLY web shell mechanics) that a competent attacker could reconstruct a working exploit. Weaponized exploit exists in ARMORY CASTLE's toolkit.
EPSS Score0.00601 (approximately 60th percentile). This is misleadingly low — EPSS is a 30-day forward-looking probability and has not yet caught up with the confirmed active exploitation. Do not use EPSS to deprioritize this CVE.
CISA KEV StatusListed October 16, 2026 — one day after public disclosure. CISA alert issued same day. Federal agencies bound by BOD 22-01 remediation deadline.
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H — 9.8 CRITICAL. Network-reachable, low complexity, no privileges required, no user interaction. Full CIA impact. CVSS 4.0 score is 9.3. The vector accurately reflects the attack: unauthenticated remote file write with trivial exploitation conditions.
Affected VersionsBeyondTrust Remote Support all versions through 26.2.3. BeyondTrust Privileged Remote Access (PRA) also potentially affected per vendor advisory scope. Unsupported versions below 24.3.1 are vulnerable but have no patch — upgrade required.
Fixed Version / PatchBT26-05-RS patch, applicable to versions 24.3.1 – 26.2.3. SaaS instances were automatically patched by October 9, 2026. Self-hosted customers must apply via /appliance management interface or confirm auto-update applied. Versions < 24.3.1 must upgrade to a supported branch first.
Internet ExposureShodan identifies approximately ~11,000 internet-facing BeyondTrust RS/PRA instances, including ~8,500 on-premise deployments. The appliance is *architecturally designed* to be internet-facing (it brokers remote support sessions over HTTPS). 75% of Fortune 100 are BeyondTrust customers.
Threat Actor AttributionARMORY CASTLE (Google/Mandiant designation), formerly UNC5221. Suspected PRC-nexus espionage group active since October 2023. Known for zero-day exploitation of edge appliances — previously exploited Ivanti CVE-2023-46805 and CVE-2024-21887. Deploys custom tooling: SAWFLY (PHP web shell), BARECLAW (C SOCKS5 tunneler). Targets wide range of countries and verticals.
Disclosure & ReportingExploited in the wild: August 29, 2026. BeyondTrust identified the defect: September 28, 2026. Patch distribution began: before October 15. Public disclosure: October 15, 2026. CISA KEV listing: October 16, 2026. Mandiant/Google TIG report: October 15, 2026. Reported by BeyondTrust internal security and Mandiant incident response.

Sources.

  1. Mandiant/Google TIG — ARMORY CASTLE Exploits BeyondTrust (full technical analysis)
  2. CISA Alert — Urges Patching Critical Vulnerability in BeyondTrust Remote Support
  3. BeyondTrust Security Advisory BT26-05
  4. BleepingComputer — BeyondTrust patches zero-day exploited in attacks since August
  5. The Hacker News — China-Linked Hackers Exploited BeyondTrust Zero-Day
  6. SecurityWeek — Chinese APT Exploited BeyondTrust Vulnerability as Zero-Day
  7. SOCRadar — CVE-2026-102764 BeyondTrust Zero-Day Exploited
  8. Tenable — CVE-2026-102764
05 · The Call

Final Verdict
= UNCHANGED to CRITICAL (9.8/10)

Why this verdict

  • Zero friction on the network vector: The appliance is internet-facing by design — ~11,000 instances confirmed on Shodan. The attack requires no authentication, no user interaction, and low complexity. There is literally no prerequisite the attacker must overcome beyond TCP reachability to port 443. No friction deduction.
  • Confirmed nation-state zero-day exploitation: ARMORY CASTLE has been exploiting this since August 29, 2026 — 47 days before public disclosure. This is not theoretical risk; the exploit is weaponized, tested, and proven against production targets. KEV-listed within 24 hours of disclosure.
  • Full chain demonstrated to worst-case outcome: The observed attack chain goes from unauthenticated HTTP request → file write → web shell → root → credential vault dump → persistence → lateral movement to all managed endpoints. Every step was executed in the wild. Time from initial access to root: minutes.
  • Role multiplier: BeyondTrust Remote Support is canonically a PAM / privileged remote access appliance. By definition, ≥95% of its installs occupy the high-value role — it IS the credential vault, it IS the remote access broker, it IS the jump server infrastructure. Compromise of a single RS appliance yields: (1) every credential in the vault, (2) remote session access to every managed endpoint via Jump Items, (3) a covert tunnel into the internal network via BARECLAW. Blast radius is fleet-scale (all managed endpoints) and identity-scale (all stored credentials). This is equivalent to compromising the PAM tier — the verdict floor is CRITICAL per the deployment-role rule, and no friction exists to pull it down.
  • No compensating architecture limits blast radius by default: Unlike a vulnerability in a general-purpose OS where segmentation might limit impact, the BeyondTrust appliance is *designed* to have broad network reach to managed endpoints. Network segmentation downstream does not help because the appliance's legitimate function requires that connectivity.

Why not higher?

There is no severity level above CRITICAL. A 9.8 CVSS 3.1 score is the maximum practical score for this vector class. The only theoretical increase would be Scope change (S:C), but the appliance itself is the security boundary being violated — downstream pivot is post-exploitation lateral movement, not a scope change in CVSS terms.

Why not lower?

Every friction-reducing factor is absent here. The appliance is internet-facing by design (no 'requires internal access' deduction). The attack is unauthenticated (no 'requires valid credentials' deduction). No user interaction is needed (no 'requires phishing' deduction). Complexity is low (no 'requires race condition' deduction). The target is a PAM appliance by definition, so the high-value-role floor is CRITICAL with no installed-base exception possible. Active exploitation by a capable nation-state APT with demonstrated full-chain compromise removes any theoretical-only discount. There is no defensible argument for anything below CRITICAL.

06 · Verification

Crowdsourced verification payload.

Run this script from an auditor workstation with curl and network access to each BeyondTrust RS appliance. Pass the appliance FQDN as the argument: bash check_cve_2026_102764.sh appliance.example.com. No authentication is required — it performs a remote version fingerprint via the public login page. For IOC checks, SSH access to the appliance as root is required (uncomment the IOC section).

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check_cve_2026_102764.sh — BeyondTrust Remote Support CVE-2026-102764 checker
# Usage: bash check_cve_2026_102764.sh <appliance-fqdn>
# Exit codes: 1=VULNERABLE, 0=PATCHED, 2=UNKNOWN

set -euo pipefail

if [ $# -lt 1 ]; then
  echo "Usage: $0 <appliance-fqdn>"
  exit 2
fi

TARGET="$1"
URL="https://${TARGET}/login"

echo "[*] Checking BeyondTrust Remote Support at ${TARGET}..."

# Fetch login page and look for version string
RESPONSE=$(curl -sk --connect-timeout 10 --max-time 15 "${URL}" 2>/dev/null || true)

if [ -z "$RESPONSE" ]; then
  echo "[!] Could not reach ${URL}"
  echo "UNKNOWN"
  exit 2
fi

# BeyondTrust RS login pages typically expose version in page source or headers
# Look for version patterns like 26.2.3, 24.3.1, etc.
VERSION=$(echo "$RESPONSE" | grep -oP '(?:version|build|product.version)[":\s]*([0-9]+\.[0-9]+\.[0-9]+)' | grep -oP '[0-9]+\.[0-9]+\.[0-9]+' | head -1)

# Also check Server header and X-headers
HEADERS=$(curl -skI --connect-timeout 10 --max-time 15 "${URL}" 2>/dev/null || true)
HDR_VERSION=$(echo "$HEADERS" | grep -oiP '(?:x-app-version|x-build)[:\s]*([0-9]+\.[0-9]+\.[0-9]+)' | grep -oP '[0-9]+\.[0-9]+\.[0-9]+' | head -1)

DETECTED_VERSION="${VERSION:-$HDR_VERSION}"

if [ -z "$DETECTED_VERSION" ]; then
  echo "[!] Could not extract version from login page."
  echo "[*] Manual check required: log into ${TARGET}/appliance and check Status > Software Version."
  echo "[*] Vulnerable if version <= 26.2.3 without BT26-05-RS patch."
  echo "UNKNOWN"
  exit 2
fi

echo "[*] Detected version: ${DETECTED_VERSION}"

# Compare versions — vulnerable if <= 26.2.3
# Note: presence of version alone doesn't confirm patch status;
# BT26-05-RS is a hotfix that may not change the base version string.
IFS='.' read -r MAJ MIN PAT <<< "$DETECTED_VERSION"

if [ "$MAJ" -lt 24 ]; then
  echo "[!] Version ${DETECTED_VERSION} is BELOW supported range (24.3.1+)."
  echo "[!] No patch available for this version — upgrade required."
  echo "VULNERABLE"
  exit 1
elif [ "$MAJ" -eq 24 ] && [ "$MIN" -lt 3 ]; then
  echo "[!] Version ${DETECTED_VERSION} is BELOW supported range (24.3.1+)."
  echo "VULNERABLE"
  exit 1
elif [ "$MAJ" -gt 26 ]; then
  echo "[+] Version ${DETECTED_VERSION} is above the affected range."
  echo "PATCHED"
  exit 0
elif [ "$MAJ" -eq 26 ] && [ "$MIN" -gt 2 ]; then
  echo "[+] Version ${DETECTED_VERSION} is above 26.2.x — likely patched."
  echo "PATCHED"
  exit 0
elif [ "$MAJ" -eq 26 ] && [ "$MIN" -eq 2 ] && [ "$PAT" -gt 3 ]; then
  echo "[+] Version ${DETECTED_VERSION} is above 26.2.3 — likely patched."
  echo "PATCHED"
  exit 0
else
  echo "[!] Version ${DETECTED_VERSION} is in the vulnerable range (<= 26.2.3)."
  echo "[!] Check /appliance > Updates to confirm BT26-05-RS patch is installed."
  echo "[*] If BT26-05-RS is listed in installed patches, the appliance is PATCHED."
  echo "[*] If BT26-05-RS is NOT listed, the appliance is VULNERABLE."
  echo "VULNERABLE"
  exit 1
fi