- Tactic
- Persistence
- Platforms
- Linux, macOS, Windows
- Version
- 1.0
- Created
- 30 March 2025
- Last modified
- 23 April 2025
- Contributors
- Raghvendra Mishra, Arista Networks; Kevin Ward; Fabian Kammel
Adversaries may abuse an integrated development environment (IDE) extension to establish persistent access to victim systems.[1] IDEs such as Visual Studio Code, IntelliJ IDEA, and Eclipse support extensions - software components that add features like code linting, auto-completion, task automation, or integration with tools like Git and Docker. A malicious extension can be installed through an extension marketplace (i.e., Compromise Software Dependencies and Development Tools) or side-loaded directly into the IDE.[2][3]
IDE Extensions MITRE reference T1176.002
2 groups have been recorded using this technique. Newest first; each entry carries MITRE’s procedure text and a link to the group’s full record. Click a name to filter the rules below.
Has leveraged Visual Studio Code’s (VSCode) embedded reverse shell feature using the command code.exe tunnel to execute code and deliver additional payloads.1
All 2 groups for this technique
Offense vs defense T1176.002
Is defensive coverage keeping up with adversary use? Eight counts, each ranked against all 697 ATT&CK techniques. Attack sits left, defense right, so a shape leaning left means adversaries are better documented here than defenders are equipped. Hover any spoke for its percentile and the share of techniques that have more. The timeline below shows when each side arrived.
IDE Extensions detection strategy DET0561
MITRE names one behaviour worth catching for this technique and breaks it into 3 analytics, one per platform. Each carries the log sources it needs and the fields you tune per environment.
Detect malicious IDE extension install/usage and IDE tunneling
AN1548 · Windows
Adversary installs or side-loads an IDE extension (VS Code, IntelliJ/JetBrains, Eclipse) or enables IDE tunneling. Chain: (1) IDE binary starts on a non-developer endpoint or server, often with install/force/tunnel flags → (2) extension files/registrations appear under user profile → (3) browser/IDE initiates outbound connections to extension marketplaces, update endpoints, or IDE remote/tunnel services → (4) optional child tools (ssh, node, powershell) execute under the IDE context.
Log sources
The data this analytic draws on. You do not need every component — each one you already collect covers part of it. Each links to its ATT&CK record.
| Data component | Name | Channel |
|---|---|---|
| Process CreationDC0032 | WinEventLog:Security | EventCode=4688 |
| File CreationDC0039 | WinEventLog:Sysmon | EventCode=11 |
| Network Connection CreationDC0082 | WinEventLog:Sysmon | EventCode=3, 22 |
Tunable fields
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
| Field | What you tune |
|---|---|
| IDEList | Executable names/paths (e.g., code.exe, idea64.exe, eclipse.exe, jetbrains-gateway.exe) vary by version and packaging. |
| SuspiciousCLI | Flags such as --install-extension, --force, --disable-extensions, --user-data-dir, --uninstall-extension, tunnel/remote flags are tunable. |
| ServerZones | List of hosts where IDEs should never run (prod servers, DCs). |
| AllowedHosts | Approved extension marketplaces/ide services; use to suppress benign traffic. |
| TimeWindow | Correlation horizon (e.g., 15–30m) between process start, file writes, and outbound IDE/tunnel connections. |
AN1549 · Linux
Adversary installs or abuses IDE extensions via CLI or direct write to profile directories and then communicates with marketplaces or remote tunnel services. Chain: auditd execve (code/idea/eclipse) with install/update flags or writes under ~/.vscode/extensions, ~/.config/JetBrains → outbound flows to *.visualstudio.com, marketplace.visualstudio.com, *.jetbrains.com, githubusercontent.com, or SSH/WebSocket tunnel endpoints → optional ssh/node processes spawned by IDE.
Log sources
The data this analytic draws on. You do not need every component — each one you already collect covers part of it. Each links to its ATT&CK record.
| Data component | Name | Channel |
|---|---|---|
| Process CreationDC0032 | auditd:SYSCALL | execve |
| File CreationDC0039 | auditd:SYSCALL | open,creat,rename,write |
| Network Traffic FlowDC0078 | NSM:Flow | Connections from IDE hosts to marketplace/tunnel domains |
Tunable fields
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
| Field | What you tune |
|---|---|
| IDEPaths | Per-distro/profile extension directories differ; tune for Chromium/JetBrains snap/flatpak paths. |
| DomainAllowlist | Enterprise-approved repos and proxies to reduce FPs. |
| UserRoleScope | Limit to non-developer users or production servers. |
| TimeWindow | Join horizon across file, process, and network telemetry. |
AN1550 · macOS
Adversary adds IDE extensions or plugins (VS Code, JetBrains Toolbox/EAP, Eclipse) via GUI or CLI, possibly via managed profiles. Chain: process start with install/update flags → plist/extension folder changes under ~/Library/Application Support/Code or ~/Library/Application Support/JetBrains → outbound connections to marketplaces/tunnel services → optional helper (ssh/node) spawned.
Log sources
The data this analytic draws on. You do not need every component — each one you already collect covers part of it. Each links to its ATT&CK record.
| Data component | Name | Channel |
|---|---|---|
| Process CreationDC0032 | macos:unifiedlog | Execution of Code.app, idea, JetBrainsToolbox, eclipse with install/extension flags |
| File CreationDC0039 | macos:unifiedlog | Writes under ~/Library/Application Support/Code*/extensions or JetBrains plugins |
| Network Traffic FlowDC0078 | macos:unifiedlog | Outbound connections from IDE processes to marketplace/tunnel domains |
Tunable fields
MITRE calls these the analytic’s mutable elements: the thresholds and filters you set for your own environment.
| Field | What you tune |
|---|---|
| PlistLocations | Per-app preference domains and plugin directories vary by version. |
| MDMProfiles | If MDM installs extensions, allowlist those events to avoid FPs. |
| TimeWindow | Correlation range between install and first beacon. |
Ensure extensions that are installed are the intended ones, as many malicious extensions may masquerade as legitimate ones.
Set an IDE extension allow or deny list as appropriate for your security policy.
Only install IDE extensions from trusted sources that can be verified.
Ensure operating systems and IDEs are using the most current version.
Train users to minimize IDE extension use, and to only install trusted extensions.