Cloud Security Office Hours Banner

3CX / X_TRADER 2023

Step-by-step kill chain mapped to MITRE ATT&CK Cloud, sourced from official post-mortems and primary technical analyses.

March 2023 Critical Cascading Supply Chain

3CX / X_TRADER - Trojanized Trading App on a Personal PC → Stolen 3CX Credentials → VPN Access → Both Build Environments Compromised → Signed Softphone Shipped to Customers

In March 2023 the 3CX desktop softphone, used by hundreds of thousands of organizations, was found shipping with a backdoor. The investigation produced something the industry had not documented before. Mandiant traced the intrusion back to a 3CX employee who downloaded X_TRADER_r7.17.90p608.exe - an end-of-life trading application from Trading Technologies that had itself been trojanized - onto a personal computer. That gave UNC4736, a North Korea-linked cluster associated with AppleJeus, the employee's 3CX credentials. The actor used them over VPN, moved laterally, and compromised both the Windows and macOS build environments, so 3CX signed and shipped a backdoored application to its own customers. A supply chain attack was the delivery mechanism for a second supply chain attack. Mandiant called it the first publicly identified cascading software supply chain compromise, and it remains the clearest demonstration that vendor risk is not one layer deep.

First documented cascading software supply chain compromise
Both Windows and macOS build environments compromised
Entry point: an end-of-life trading app on a personal computer
Actor: UNC4736, North Korea-linked, associated with AppleJeus
📄 Mandiant / Google Cloud - 3CX software supply chain compromise ↗ 📄 3CX - Mandiant security update: initial intrusion vector ↗
Initial Access - A Trojanized Installer for Software Nobody Supports
01
A 3CX employee downloaded and ran X_TRADER_r7.17.90p608.exe, an end-of-life Trading Technologies application that had been backdoored at source, on a personal computer
T1195.002 - Compromise Software Supply Chain T1204.002 - User Execution: Malicious File

Three properties stack here and each one matters. The software was end of life, so nobody was patching, monitoring or thinking about it, and it remained downloadable long after Trading Technologies had stopped supporting it. The download happened on a personal computer, outside any endpoint control 3CX operated. And the application was unrelated to the employee's work - a trading tool, installed for personal reasons - so no vendor risk process would ever have covered it. The installer deployed a modular backdoor, and researchers noted the trojanized package carried a valid signature, which is what let it pass the checks a cautious user would actually run.

Artifact: X_TRADER_r7.17.90p608.exe, from Trading Technologies
Status: End of life - unsupported, unpatched, still downloadable
Device: A personal computer, outside 3CX's endpoint controls
Relevance to work: None, so no vendor review would ever have covered it
Payload: A modular backdoor deployed by the installer
X_TRADEREnd-of-Life SoftwarePersonal DeviceT1195.002
🔑 Credential Access - Corporate Credentials on a Personal Machine
02
The backdoor gave UNC4736 the employee's 3CX corporate credentials, which they used to authenticate over VPN into the company network
T1555 - Credentials from Password Stores T1133 - External Remote Services

The hop that made this possible is mundane and extremely common: corporate credentials present on a personal machine, and a VPN that accepted them. This is the same structural failure as the LastPass intrusion, where a DevOps engineer's home computer became the path into production, and the same one behind Vercel / Context.ai, where a vendor employee's infected laptop reached a hosting platform. The lesson recurs because the boundary is genuinely hard to hold: people work from personal devices, and a VPN that authenticates a password without evaluating the device it came from cannot tell the difference.

Stolen: The employee's 3CX corporate credentials, from a personal machine
Used for: VPN authentication into the 3CX corporate network
Gap: A VPN validating a credential without evaluating device posture
Same shape as: LastPass (home PC to production), Vercel / Context.ai (vendor laptop to platform)
Credential TheftVPN AccessUnmanaged DeviceT1133
🔀 Lateral Movement - Into Both Build Environments
03
The actor moved laterally through 3CX's network and compromised the build environments for both the Windows and the macOS desktop applications
T1021 - Remote Services T1195.002 - Compromise Software Supply Chain

Reaching one build environment is a serious compromise. Reaching both, on two different platforms with two different toolchains, indicates deliberate and patient work toward exactly this objective rather than opportunistic escalation. It also removes the defence customers would otherwise have had: an organization that ran macOS clients was not safer than one running Windows. The build environment is the highest-value target in any software company for the reason SolarWinds established three years earlier - it is the one place where an attacker's code inherits the vendor's identity, signature and distribution channel in a single step.

Path: VPN access → lateral movement → build infrastructure
Scope: Both the Windows and macOS build environments
What that indicates: A deliberate objective, not opportunistic escalation
Why build systems: Attacker code inherits the vendor's identity, signature and distribution at once
Build EnvironmentCross-PlatformLateral MovementT1195.002
📦 Supply Chain - 3CX Signs and Ships the Backdoor
04
Trojanized 3CXDesktopApp builds went out through normal release channels, signed by 3CX, to a customer base spanning hundreds of thousands of organizations
T1553.002 - Code Signing

From the customer's side there was nothing to notice. The application arrived through the ordinary update channel, carried a valid 3CX signature, and installed exactly as it always had. Every control that verifies who published software returned a clean answer, because the answer was true - 3CX really did build and sign it. This is the same defeat of publisher-identity verification that Mini Shai-Hulud and Megalodon would achieve in 2026 by poisoning source rather than stealing credentials, and it is why signing answers the question "did the vendor build this" and not the question "is the vendor's build environment trustworthy."

Artifact: Trojanized 3CXDesktopApp for Windows and macOS
Distribution: Normal release and update channels
Signature: Valid, and genuinely 3CX's
Customer-side signal: None
What signing proves: Who built it - not whether their build environment was trustworthy
Signed Malware3CXDesktopAppValid PublisherT1553.002
📡 Command and Control - Config Hidden in GitHub Icon Files
05
The implanted downloader retrieved icon files from a GitHub repository, with base64-encoded command-and-control configuration appended to the image data
T1102 - Web Service T1001.002 - Steganography

The malware did not phone home to suspicious infrastructure. It fetched .ico files from a GitHub repository, each carrying its real payload as base64 data appended after the valid image content. GitHub is reachable from essentially every corporate network, is allow-listed by default in most egress policies, and serves image files constantly. Two defensive consequences follow. Network detection built on destination reputation fails completely here, because the destination is legitimate. And an allow-list that permits a whole platform permits everything hosted on it - which is the same lesson as the exfiltration step in Nx / s1ngularity, where stolen secrets were pushed to public GitHub repositories using the victim's own token.

Channel: .ico files fetched from a GitHub repository
Concealment: Base64 C2 configuration appended after valid image data
Why it works: GitHub is reachable and allow-listed nearly everywhere
Detection failure: Destination-reputation approaches see a legitimate host
Allow-list lesson: Permitting a platform permits everything anyone hosts on it
GitHub C2SteganographyTrusted DestinationT1102
🔗 Impact - The Cascade Is the Finding
06
Mandiant identified this as the first publicly reported case of one software supply chain compromise being used to execute another
Campaign C0057 - 3CX Supply Chain Attack

Read the chain end to end: Trading Technologies was compromised, which compromised a 3CX employee, which compromised 3CX, which compromised 3CX's customers - and any of those customers who ship software to others were themselves one step from becoming the next link. That structure defeats how vendor risk management is normally practised, because assessing your direct suppliers tells you nothing about theirs, and questionnaires do not propagate. It also means an organization can be materially harmed by a breach at a company it has never heard of, has no contract with, and could not have assessed. MITRE tracks the activity as Campaign C0057.

Chain: Trading Technologies → a 3CX employee → 3CX → 3CX's customers → potentially onward
Significance: First publicly identified cascading software supply chain compromise
Why vendor risk fails: Assessing direct suppliers says nothing about theirs
Consequence: Harm from a company you have never heard of and could not have assessed
Tracking: MITRE Campaign C0057
Cascading CompromiseFourth Party RiskUNC4736C0057

🛡 How to Defend Against This Chain

Break the personal-device-to-corporate-network path, because that is where the cascade crossed. Corporate credentials on an unmanaged machine turned someone's unrelated software habit into a company breach. Require device compliance for VPN and any corporate authentication, so a credential alone is not sufficient from an unknown machine; use phishing-resistant MFA bound to managed devices; and give people a usable managed path for the work they would otherwise do on a personal computer.
Treat the build environment as your most sensitive production system, not as developer infrastructure. Both build environments were reached from general network access, which means they were not isolated from it. Segment build systems onto their own network with their own access controls, require separate strongly-authenticated credentials to reach them, log and alert on every interactive login, and make the pipeline reproducible so an unexplained difference in output is detectable rather than invisible.
Do not rely on code signing to tell you software is safe. The malicious build was correctly signed by 3CX, and the trojanized X_TRADER installer was signed too. Signing establishes authorship, not integrity of the authoring process. Layer behavioural detection on top - an application that suddenly makes network connections it never made before is the signal that survives a valid signature, and it is what customers actually noticed here.
Extend vendor risk past your direct suppliers, and accept the limits. Ask vendors about their build-environment isolation, their own software supply chain, and their endpoint controls for staff with production access - the questions that would have surfaced this. Then accept that you cannot assess a chain of unknown depth, and design for survivability instead: monitor vendor software behaviourally, keep the ability to disable an application quickly, and rehearse it.
Inventory end-of-life software and remove it. The entry point was an unsupported application still available for download years after its vendor stopped maintaining it. Unsupported software is abandoned attack surface in the most literal sense: no patches, no advisories, no one watching the distribution channel. Find it across your estate - including on developer machines - and remove it.
Do not treat a whole platform as a trusted egress destination. The C2 channel was icon files on GitHub. Allow-listing a platform allow-lists everything anyone hosts there, so pair destination policy with content and behavioural inspection, alert on binaries fetching unusual file types from code-hosting platforms, and baseline what each application's normal network profile looks like.

Related defense topics