Releases: BC-SECURITY/Empire
Releases · BC-SECURITY/Empire
v6.5.0
[6.5.0] - 2026-03-08
- Updated Starkiller to v3.4.0
Added
- Log Empire version and git commit SHA at startup for easier production diagnostics; commit SHA is baked into the Docker image at build time via
--build-arg - Added C stager for lightweight stage0 shellcode injection via Fibers
- Added
shellcode_compilerutility for compiling position-independent C stagers into raw x64 shellcode for BOF process injection - Added
clipboard_window_inject_listBOF module for enumerating processes with clipboard window class - Added PIC shellcode C template and linker script for MinGW-based shellcode compilation
- Added unit tests for
shellcode_compilerand rewrotetest_bof_packerto cover the newPackerclass API - Added a runtime
Backgroundoption to C# modules, allowing operators to override background/foreground execution at task time - Added C# PatchETW module for in-process ETW patching via ntdll!EtwEventWrite
- Added C# PatchlessAMSI module for patchless AMSI bypass using hardware breakpoints and vectored exception handling
- Added PowerShell Invoke-VSSExtract module for NTDS.dit and SYSTEM hive extraction via Volume Shadow Copy
- Added PowerShell Invoke-RDPHijack module for RDP session hijacking via tscon.exe
- Added Python linux_keyring module for credential extraction from the Linux kernel keyring subsystem
- Added Python aws_imds module for AWS IAM role credential theft via EC2 Instance Metadata Service
- Added BOF
spawnmodule for EarlyBird process hollowing with suspended process creation, shellcode injection, and APC thread hijacking
Changed
- Added Python 3.14 support (supports 3.13 and 3.14); Dockerfile now uses
python:3.14.3-trixie - Replace
os.pathwithpathlibin core code and enforcePTHlint rule for all core files - Switch
stager_generation_servicefrom deprecatedinstallPath(str) toinstall_path(Path) - Optimized test suite for faster CI and local runs
- Modernize Python patterns in core code: use
setdefault(), truthiness checks,click.style()for terminal colors, and remove redundant operations - Reduced test fixture boilerplate with a shared
make_agent()factory and deduplicatedplugin_taskfixture across test files - Removed
autousefrom test fixtures that don't need it, making test dependencies explicit - Added unit tests for encryption, packet handling, helpers, malleable transformations, and listener utilities
- Migrate remaining
installPathusages toinstall_path(Path) in core services - Use
Path.read_text(encoding="utf-8")instead ofread_bytes().decode()in stager generation - Replace
os.system()calls withsubprocess.run()in stager JAR generation - Upgraded all Python dependencies to latest versions (Feb 2026)
- Replace deprecated
handle_error_messagewith raisedModuleValidationExceptionin all modules (#716) - Convert 51 modules to use
@auto_get_sourceand@auto_finalizedecorators, eliminating boilerplate (#716) - Replace unmaintained
terminaltablesdependency withprettytable(#809) - Refactored
bof_packerfrom standalone functions to aPackerclass with granular packing methods (addbytes,addstr,addWstr,addbool,adduint32,addint,addshort) - Rewrote
clipboard_window_injectBOF module to use PIC shellcode instead of PowerShell launcher-based shellcode generation - Simplified
clipboard_window_injectmodule options by removing unnecessary launcher parameters and corrected BOF format string - Bumped Empire Compiler from v0.4.3 to v0.4.4
Removed
- Removed
secinjectBOF module and its pre-compiled binary
Fixed
- Fixed SQLAlchemy connection pool exhaustion caused by async hooks receiving the caller's committed session.
run_hooksnow wraps async hooks in_run_async_hook, which opens a freshSessionLocalsession for each hook and closes it cleanly after the hook returns. ORM objects are re-attached viasession.merge()so lazy-loaded relationships resolve correctly. - Fixed SQLAlchemy connection pool exhaustion during agent check-ins by releasing the DB session before expensive file I/O, encryption, and packet building in
handle_agent_request() - Fixed custom-generate BOF modules (
clipboard_window_inject,spawn,clipboard_window_inject_list) returning .NET-onlyfile|,jsonformat for Go agents, causing BOF execution to fail on the Go agent's COFF loader - Added
format_bof_output()toModuleServiceto centralize BOF output formatting for Go and .NET agents - Pass
agent_languageto custom-generate modules so they can produce agent-appropriate output - Fixed malleable HTTP listener stagers failing after server restart due to random URI regeneration in
Stager._defaults() - Fix null-safety bug in
_process_agent_packetwhensave_module_filereturns None on skywalker exploit detection - Fixed stop-job handlers in PowerShell and Python agents crashing when the target job doesn't exist
- Fixed the
docs/quickstart/installation/README.mdfile to specify a previously missing reference to Ubuntu - Fixed 9 malformed MITRE ATT&CK technique IDs across PowerShell, Python, and C# modules
- Fixed 2 malformed tactic fields that used space-separated strings instead of YAML lists
- Replaced 7 deprecated or revoked ATT&CK techniques with current equivalents
- Added missing
softwarefield for known ATT&CK tools (Rubeus, BloodHound, Mimikatz) - Added missing
tacticsfield to 82 Python modules that had none - Fixed 74 technique-to-tactic inconsistencies across all module languages
- Replaced 27 additional deprecated technique IDs predating ATT&CK v10 with current equivalents across Python and template modules
- Removed incorrect T1482 (Domain Trust Discovery) from 32 modules that perform user, group, or computer enumeration
- Removed incorrect T1615 (Group Policy Discovery) from 24 modules unrelated to GPO enumeration
- Replaced T1106 (Native API) with T1059.006 (Python) on 5 DCOS REST API modules
- Added missing
techniquesfield to 3 session enumeration modules - Corrected 3 macOS LaunchAgent persistence modules from T1055 (Process Injection) to T1543.001 (Launch Agent)
- Corrected macOS screensaver credential prompt module from T1113 (Screen Capture) to T1056.002 (GUI Input Capture)
- Corrected Invoke-DownloadFile from T1041 (Exfiltration Over C2) to T1105 (Ingress Tool Transfer)
- Upgraded 3 keylogger modules from parent T1056 to specific T1056.001 (Keylogging) sub-technique
- Upgraded macOS email search module from T1114 to T1114.001 (Local Email Collection) sub-technique
- Upgraded macOS LoginHook persistence from T1037 to T1037.002 (Login Hook) sub-technique
- Added T1105 (Ingress Tool Transfer) to 12 lateral movement modules that deploy stagers to remote hosts
- Added 10 new ATT&CK technique IDs across 51 modules to improve coverage from 181 to 190 unique techniques
- Added T1005 (Data from Local System) to 8 macOS and Linux credential and collection modules
- Added T1550.002 (Pass the Hash) to PsExec, SMBExec, and WMI lateral movement modules
- Added T1562.001 (Impair Defenses) to AMSI bypass, ETW patching, and Outlook security modules
- Fixed duplicate technique entries in RevertToSelf and NetRipper modules
- Fixed PSRansom module
namefield incorrectly set toInvoke-Scriptinstead ofPSRansom
v6.4.1
[6.4.1] - 2026-02-15
- Updated Starkiller to v3.3.0
Added
- Added
config.user.yamllayering support — create aconfig.user.yamlnext toconfig.yamlto override specific settings without modifying the base config - Added
auto_installoption toplugin_marketplaceconfig for automatic plugin installation during setup - Added
server.socketioconfig option to disable Socket.IO (default:true) - Added C# spawn module with Powershell and C# executables
Fixed
- Fixed Go agent failing to run powershell modules that are too long
- Removed StagerURI from http listeners
- Fixed HTTP hop listener not getting proper host address
- Fixed arguments for bof module netloggedon
- Fixed option ComputerName being removed from modules without custom_generate
- Fixed missing CompatibleDotNetVersions for ShellcmdRunas and ShellRunAs
- Fixed missing CompatibleDotNetVersions for Assembly and AssemblyReflect
- Fixed parameter error when running Sharpsploit.Assembly
[6.4.0] - 2026-01-18
Added
- Added Debian 13 support
- Added error message if running
ps-empire serverunder root without-f - Added
hide_disabledparameter toGET /api/v2/modules/endpoint - Added a health check endpoint at
/healthz - Added
module_optionstoAgentTaskandplugin_optionstoPluginTaskfor better execution tracking - Added
-c(compile from source) and-o(override) options tops-empire - Added local ticket support to Invoke-PSRemoting module
- Added an endpoint to stop background jobs on agents
- Added foreground C# tasking support to IronPython agent
- Added Get-ClipboardHistory PowerShell module to enumerate Windows clipboard history (Windows 10/11) via WinRT APIs
Changed
- Updated the module categeories to be more clear
- Updated FastAPI deps to use Annotated types
- Changed StratumMiner, Moriarty, and Sharpup to background tasks
- Updated empire-compiler to v0.4.3
Fixed
- Fixed results not coming back properly for powershell agents on C# background tasks
v6.3.0
[6.3.0] - 2025-12-11
- Updated Starkiller to v3.2.0
Added
- Exposed all agent language options in PSexec so that C#, Ironpython, and Go can be selected for the Empire payload in addition to PowerShell
- Add support for overriding all config values with environment variables
- Updated Empire Compiler to v0.4.1
- Add customizable C# obfuscation to EmpireCompiler through confuser xml
- Added mTLS support to agents and listeners
- Added mono to install script for confuser obfuscation support on Linux
Changed
- Upgrade all dependencies to latest
- https
hostcan be used on http and malleable listeners without a cert path - Upgraded routing packets from RC4 to use ChaCha20-Poly1305 for encryption and authentication
- Changed key exchange for Powershell agent from RSA to Diffie-Hellman
- Updated server to use AESCipher class for encryption/decryption
- Updated multi-launcher launcher to use EntryPoint.Invoke for Powershell
- Moved default bypasses from stager and modules to config
Fixed
- Fix typo in variable name
suppress_self_cert_warning - Fixed all the new ruff linting issues after the upgrade
- URL encode database credentials in case they have special characters
- Fixed EmpireCompiler not obfuscating C# code properly
- Fixed issue where some C# modules would not run in Go agent
- Fixed SharpSploit/ShellCmd not running due to additional yaml argument
- Fixed install script failing on a subsequent run
- Fixed cookie naming for HTTP, foreign, and hop listeners
- Fixed port appending issues with listeners when not needed
Changed
- Install script invokes
setupcommand to download starkiller, empire-compiler, and plugin registries
Removed
- Removed Ubuntu 20.04 from install tests
- Removed RC4 being used to deliver to agents
v6.2.1
v6.2.0
[6.2.0] - 2025-09-02
- Updated Starkiller to v3.1.0
- Added clean and reset options to the server
- Added other agent language support to fodhelper
- Added go support to spawn and spawnas
- Fixed launcher_bat when go agent is used
- Fixed issue where gopire doesn't detect high integrity agents
- Fixed C# execution in iron python agent to use ordered arguements
- Removed redundant C# function from iron python agent
- Cleaned up Rubeus and RunCoff yamls
- Fixed port normalization to allow host port and bind port to be different
- Allow 'X-Empire-Token' as an alternative header to 'Authorization'
- Remove abandoned passlib library and use bcrypt directly
v6.1.3
v6.1.2
[6.1.2] - 2025-05-21
Added
- Added support for Ubuntu 24.04 in the install script
Fixed
- Fixed issue launching powershell on some distros by installing libicu
[6.1.1] - 2025-05-21
Fixed
- Fix issue caused by ordering of API routers
[6.1.0] - 2025-05-20
Changed
- Use pyyaml's C extension for loading/dumping module yamls to make startup and tests faster
- Simplified Dockerfile by using TARGETARCH variable
- Cleanup API code
- Use a new version of donut that supports arm64
- Update all deps
Removed
- Remove unused files
v6.0.3
[6.0.3] - 2025-04-24
- Fixed SMB listener not sending start task
- Fixed ironpython shell commands running as cmd instead of powershell
- Added literal interpretation for shell commands to ironpython agent
- Fixed multi_launcher not being able to build smb agent
- Removed linux as go agent option as its not implemented yet