
Operation Tinsel Trace I — IR Report
Between November 27 and December 13, 2023, North Pole Operations sustained a coordinated, multi-phase intrusion attributed to the threat actor group the Grinch. The campaign began with a targeted social engineering operation against a privileged insider (referred to as Elfin) who was manipulated over two days into exfiltrating the santa_deliveries project binary.
That binary contained hardcoded credentials and a direct reference to an AWS S3 bucket (papa-noel), which the threat actor exploited the following day to harvest cloud-hosted assets. Among the retrieved files was claus.py, a script embedding AWS access and secret keys for the elfadmin account and a reference to a private bucket (north-pole-private). Using those keys, the threat actor pivoted to the private bucket and retrieved bytesparkle.ovpn: a VPN configuration file that provided authenticated access into the North Pole internal network.
With internal network access established, the threat actor staged a weaponized archive (present_for_santa.zip) on a file share accessible to TINKERTECH-WKS001. When the Santa Claus account opened the archive, a multi-stage infection chain (LNK shortcut → PowerShell → obfuscated VBScript → shellcode loader) executed, culminating in process injection into svchost.exe (PID 724) and a reverse shell back to the threat actor's C2 infrastructure. From this position, Windows Defender exclusions were applied and LSASS was dumped via a renamed ProcDump binary, yielding credential material for subsequent phases.
On December 8, 2023, the threat actor pivoted laterally to the internal network printer (NorthPole HP LaserJet 4200n, 192.168.68.128) and exploited the unauthenticated PJL interface on port 9100 to read files directly from its embedded filesystem. Nice and Naughty children's lists, a pending employee termination notice, a scheduled Christmas announcement, and, critically, an SSH private key for the christmas.gifts server were exfiltrated via FSUPLOAD commands.
On December 13, 2023, the threat actor executed the final and most destructive phase. CVE-2020-1472 (ZeroLogon) was exploited from 192.168.68.200 against DC01.northpole.local, instantly resetting the domain controller's machine account (DC$) and granting unauthenticated domain-level access. The Bytesparkle account was repurposed via a forced password reset, and an RDP session was established to the domain controller. A VNC backdoor (svchost.exe + vnc2.dll) and a svc_vnc scheduled task were deployed for persistent remote access. At 11:03:20 UTC, the ransomware splunk_svc.dll was executed, encrypting files across the domain controller using a repeating XOR cipher and appending the .xmax extension. A ransom note demanding 5,000,000 XMAS tokens to wallet GR1NCH-5ANTA-2023XMAS was deployed. Encryption completed at 11:07:28 UTC.
The full attack chain (spanning 16 days from initial social engineering to ransomware deployment) progressed entirely through exploitation of insider trust, misconfigured cloud storage, unpatched network services, and an unpatched domain controller. No zero-day capabilities were required at any stage.
Business & Stakeholder Impact
1. Confidentiality
The threat actor exfiltrated a substantial volume of sensitive organizational data across multiple phases. The santa_deliveries binary and associated santa-list.csv exposed recipient names, home addresses, gift assignments, and behavioral classifications. The printer's onboard filesystem yielded children's Nice and Naughty classification lists, a pending employee termination notice, a scheduled organizational announcement, and an SSH private key granting potential access to the christmas.gifts server. AWS-hosted operational scripts and configuration files, including credentials embedded in claus.py, were also retrieved in full.
2. Integrity
DC01.northpole.local (the organization's primary domain controller) was fully encrypted, with files across 69 targeted extension categories rendered inaccessible. The DC$ machine account and Bytesparkle domain account were both tampered with directly on the controller. A VNC backdoor and persistence scheduled task were installed.
3. Availability
Ransomware execution on the domain controller caused direct operational disruption. File recovery does not require ransom payment: the encryption scheme uses a trivially reversible repeating XOR cipher with the fully recovered key EncryptingC4Fun!, enabling complete decryption of all .xmax files.
4. Reputational and Regulatory
Exfiltration of children's personal data from the Nice and Naughty lists (including names and behavioral records) may carry regulatory notification obligations. The disclosure of the Announcment-25Dec.ps organizational announcement prior to its scheduled release date represents an additional confidentiality breach.
| Date/Time (UTC) | Event | Source |
|---|---|---|
| 2023-11-27 17:27:26 | The threat actor sent their first email to Elfin | em client on Elfin's workstation |
| 2023-11-28 09:56:11 | Elfin replied to threat actor, inadvertently revealing access to a secret binary | em client on Elfin's workstation |
| 2023-11-28 11:42 | The threat actor convinced Elfin to act against his employer. Elfin agreed | em client on Elfin's workstation |
| 2023-11-28 16:53–16:54 | The threat actor guided Elfin toward exfiltrating the secret project | em client on Elfin's workstation |
| 2023-11-28 16:56:13 | Elfin offered to share the santa_deliveries binary with the threat actor | em client on Elfin's workstation |
| 2023-11-28 17:01:29 | Elfin compressed santa_deliveries into santa_deliveries.zip | MFT and USN Journal — Elfin's workstation |
| 2023-11-28 17:01:46 | Elfin sent santa_deliveries.zip (containing hardcoded credentials) to the threat actor | em client on Elfin's workstation |
| 2023-11-28 17:06:42 | Elfin began searching for keywords related to misconduct cover-up and flights to Greece | Chrome browser history — Elfin's workstation |
| 2023-11-29 08:24:07 | The threat actor automated bulk object retrieval from exposed S3 bucket (papa-noel) | AWS CloudTrail |
| 2023-11-29 08:24:16 | Automated S3 retrieval completed | AWS CloudTrail |
| 2023-11-29 10:15:02 | The threat actor probed access to private S3 bucket (north-pole-private) | AWS CloudTrail |
| 2023-11-29 10:15:28 | The threat actor used elfadmin access key to list objects in north-pole-private | AWS CloudTrail |
| 2023-11-29 10:16:30 | The threat actor changed IP address to interact with north-pole-private | AWS CloudTrail |
| 2023-11-29 10:16:53 | The threat actor retrieved bytesparkle.ovpn from north-pole-private | AWS CloudTrail |
| 2023-11-30 16:42:21 | Santa Claus accessed \\SANTA-FS\ImportantFiles share and copied present_for_santa.zip to TINKERTECH-WKS001 | santaclaus.bin |
| 2023-11-30 16:42:23 | present_for_santa.zip was created on Santa's Desktop on TINKERTECH-WKS001 | santaclaus.bin |
| 2023-11-30 16:42:28 | present_for_santa.zip was extracted | santaclaus.bin |
| 2023-11-30 16:42 | Santa Claus clicked the malicious LNK shortcut, triggering the infection chain | santaclaus.bin |
| 2023-11-30 16:42:40–41 | Shellcode loader (present.exe) was downloaded and executed on TINKERTECH-WKS001 | santaclaus.bin |
| 2023-11-30 16:42:5x | Event logs cleared on TINKERTECH-WKS001 | santaclaus.bin |
| 2023-11-30 16:43 | The threat actor attempted to disable Windows Defender on TINKERTECH-WKS001 (failed) | santaclaus.bin |
| 2023-11-30 16:43:12–15 | The threat actor added C:\Users\Public to Windows Defender exclusion path | santaclaus.bin |
| 2023-11-30 16:43:18 | ProcDump was dropped as PresentForNaughtyChild.exe in the exclusion folder | santaclaus.bin |
| 2023-11-30 16:43:27 | ProcDump was used to dump LSASS memory to stolen_gift.dmp | santaclaus.bin |
| 2023-12-08 12:01:39 | The threat actor port-scanned the NorthPole HP LaserJet 4200n printer (192.168.68.128), discovering ports 22 and 9100 | networktraffic.pcapng |
| 2023-12-08 12:02:14 | The threat actor established a PJL session with the printer on port 9100 | networktraffic.pcapng |
| 2023-12-08 12:03:07 – 12:09:27 | The threat actor used PJL FSUPLOAD to exfiltrate Christmas lists, a termination notice, an upcoming announcement, and the SSH private key | networktraffic.pcapng |
| 2023-12-13 09:24:21 | The threat actor exploited ZeroLogon (CVE-2020-1472) from 192.168.68.200 against DC01, resetting the DC$ machine account password at 09:24:23 | DC01.northpole.local-KAPE |
| 2023-12-13 09:27:36 | The threat actor reset the Bytesparkle account password using the local Administrator account on DC01 | DC01.northpole.local-KAPE |
| 2023-12-13 10:03 – 10:57:38 | The threat actor established RDP to DC01 as Bytesparkle, dropped VNC backdoor, and created svc_vnc scheduled task for persistence | DC01.northpole.local-KAPE |
| 2023-12-13 11:03:20 – 11:07:28 | Ransomware (splunk_svc.dll) executed on DC01, dropping ransom note and encrypting all files with .xmax extension | DC01.northpole.local-KAPE |
Evidence
| Evidence | Type | Details |
|---|---|---|
DESKTOP-D32FKTI triage data | Triage Data | Elfin's workstation |
DESKTOP-D32FKTI live response | Live Response | Elfin's workstation |
| Sparky Cloud logs | AWS CloudTrail | eu-west-2 and eu-west-3 |
santaclaus.bin | Memory Dump | TINKERTECH-WKS001 |
networktraffic.pcapng | Network Traffic Capture (PCAP) | Printer traffic |
DC01.northpole.local-KAPE | Triage Data | DC01 |
Affected Systems & Devices
| Hostname/Device Name | IP Address | OS | Role |
|---|---|---|---|
| TINKERTECH-WKS001 | 192.168.68.4 | Windows 10 | Workstation used by Santa Claus |
| NorthPole HP LaserJet 4200n | 192.168.68.128 | — | Network Printer |
| DC01.northpole.local | 192.168.68.11 | Windows Server 2016 | Primary Domain Controller (northpole.local) |
Affected Users
| Username | Compromised From | Details |
|---|---|---|
| elf-admin | Hardcoded credentials in santa_deliveries binary | Leaked to the threat actor by Elfin |
| elfadmin | Hardcoded access and secret key in claus.py | Exposed via papa-noel S3 bucket |
| Bytesparkle | Password forcibly reset on DC01 | Domain account; repurposed by threat actor after ZeroLogon; used for RDP and ransomware deployment |
| Administrator | ZeroLogon vulnerability | Local Administrator on DC01; accessible after ZeroLogon reset of DC$ |
| DC$ | ZeroLogon vulnerability | Machine account for DC01; Netlogon channel password reset to empty by CVE-2020-1472 |
Files Stolen / Exfiltrated
| File Name / File Path | Source |
|---|---|
santa_deliveries | DESKTOP-D32FKTI triage data (Elfin's workstation) |
NPoleScripts/check.js | papa-noel S3 bucket — AWS CloudTrail |
NPoleScripts/backup.py | papa-noel S3 bucket — AWS CloudTrail |
NPoleScripts/santa_journey_log.csv | papa-noel S3 bucket — AWS CloudTrail |
NPoleScripts/disk.ps | papa-noel S3 bucket — AWS CloudTrail |
NPoleScripts/organise.rb | papa-noel S3 bucket — AWS CloudTrail |
NPoleScripts/claus.py | papa-noel S3 bucket — AWS CloudTrail |
NPoleScripts/update.sh | papa-noel S3 bucket — AWS CloudTrail |
santa-list.csv | papa-noel S3 bucket — AWS CloudTrail |
bytesparkle.ovpn | north-pole-private S3 bucket — AWS CloudTrail |
stolen_gift.dmp | LSASS dump on TINKERTECH-WKS001 |
0:/christmas/2023/Nice-kids/list1.txt | NorthPole HP LaserJet 4200n — PJL FSUPLOAD |
0:/christmas/2023/Naughty-kids/list.txt | NorthPole HP LaserJet 4200n — PJL FSUPLOAD |
0:/saveDevice/SavedJobs/InProgress/Layoff-notice/Personal-Notice-Employee43.pcl | NorthPole HP LaserJet 4200n — PJL FSUPLOAD |
Announcment-25Dec.ps | NorthPole HP LaserJet 4200n — PJL FSUPLOAD |
0:/Administration/securitykeys/ssh_systems/id_rsa | NorthPole HP LaserJet 4200n — PJL FSUPLOAD |

On November 27, 2023, the threat actor initiated contact with Elfin from the address definitelynotthegrinch@gmail[.]com, posing as "Wendy Elflower" and fabricating a shared familiarity: a classic pretexting technique to establish trust early in the social engineering chain.



Over the course of two days, the threat actor methodically cultivated the relationship, steering the conversation toward Elfin's workplace grievances. This allowed Elfin to voluntarily disclose that he held access to confidential Secret Santa project assets.


Exploiting Elfin's accumulated workplace resentment, the threat actor successfully convinced him to act against his employer's interests.




At 17:01:29 UTC, MFT and USN Journal records from DESKTOP-D32FKTI confirm that Elfin compressed santa_deliveries into santa_deliveries.zip. At 17:01:46 UTC, the archive was transmitted to the threat actor via the em client.

Static analysis of the santa_deliveries binary revealed a hardcoded credential for the elf-admin account. Upon successful authentication, the binary retrieves santa-list.csv from the AWS S3 bucket at https://papa-noel.s3.eu-west-3.amazonaws.com/santa-list.csv.


Following the exfiltration, Chrome browser history recovered from DESKTOP-D32FKTI shows Elfin conducting searches related to circumventing corporate security controls, concealing insider activity, email deletion, and flights to Greece, indicating a clear attempt to cover his tracks and flee.

On November 29, 2023, at 08:24:07 UTC, AWS CloudTrail logs recorded an automated bulk retrieval from 191[.]101[.]31[.]57 targeting the publicly accessible papa-noel S3 bucket. The operation completed within nine seconds at 08:24:16 UTC.

Among the files retrieved from papa-noel was NPoleScripts/claus.py, which contained hardcoded AWS access and secret keys belonging to the elfadmin account, along with a direct reference to the private S3 bucket north-pole-private.

At 10:15:02 UTC, the threat actor began probing the north-pole-private bucket using HeadBucket and GetBucketAcl API calls. At 10:15:28 UTC, the same elfadmin access key was used to successfully execute a ListObjects call against the bucket, confirming partial access.

At 10:16:30 UTC, activity shifted to a second IP address, 45[.]133[.]193[.]41, from which the threat actor retrieved bytesparkle.ovpn at 10:16:53 UTC. The AWS CLI user-agent string captured (aws-cli/2.12.0 Python/3.11.5 Linux/6.1.0-kali9-amd64) is consistent with a Kali Linux host.

The bytesparkle.ovpn OpenVPN configuration file provided the threat actor with authenticated credentials and routing configuration to establish a VPN tunnel directly into the North Pole internal network. This exfiltrated configuration is assessed to be the primary access vector enabling all subsequent on-premises activity.


With authenticated VPN access established, the threat actor pivoted from cloud-based operations to on-premises targets. On November 30, 2023, at 16:42:21 UTC, memory forensics of santaclaus.bin show the Santa Claus account on TINKERTECH-WKS001 accessing the \\SANTA-FS\ImportantFiles network share and copying present_for_santa.zip to the user's Desktop.

At 16:42:28 UTC, the archive was extracted to a present_for_santa folder on the Desktop. The archive contained two malicious files: present.vbs, a heavily obfuscated VBScript dropper, and click_for_present.lnk, a weaponized shortcut designed to trigger the infection chain.


click_for_present.lnk when executed spawned a PowerShell command that recursively searched C:\Users\ for any file matching present*.vbs and invoked it via cscript, executing present.vbs without requiring user awareness of the underlying payload.



The VBScript payload downloaded a shellcode loader (present.exe) from the C2 server at 77[.]74[.]198[.]52 via hxxp[://]77.74.198.52/destroy_christmas/evil_present.jpg, dropping it into the executing user's temp directory before launching it to establish a reverse shell back to the C2.


MFT records corroborate that present.exe was written to disk at 16:42:40 UTC and executed one second later. The shellcode loader retrieved a second-stage shellcode from the C2 on port 445 and injected it into the svchost.exe process (PID 724).


At approximately 16:42:59 UTC, the threat actor executed a PowerShell command to clear all Windows event logs on TINKERTECH-WKS001.

At 16:43:04 UTC, the threat actor attempted to disable Windows Defender via PowerShell, but the command failed due to a syntax error. At 16:43:12 UTC, the threat actor added C:\Users\Public to the Windows Defender exclusion path instead.




At 16:43:18 UTC, Sysinternals ProcDump was transferred onto the host as C:\Users\Public\PresentForNaughtyChild.exe. At 16:43:27 UTC, it was invoked to dump the LSASS process memory to C:\Users\Public\stolen_gift.dmp.




On December 8, 2023, at 12:01:39 UTC, the threat actor conducted a port scan against the NorthPole HP LaserJet 4200n printer (192.168.68.128). The scan revealed TCP 22 (SSH) and TCP 9100 (PJL interface entry point).

At 12:02:14 UTC, the threat actor established a connection to the printer on port 9100, initiating a PJL session.

At 12:03:07 UTC, the threat actor issued a PJL FSUPLOAD command to read 0:/christmas/2023/Nice-kids/list1.txt directly from the printer's internal filesystem, containing full names of children flagged as "Nice."

At 12:03:21 UTC, the threat actor followed up with a second FSUPLOAD request for 0:/christmas/2023/Naughty-kids/list.txt.

At 12:04:18 UTC, the threat actor identified and read 0:/saveDevice/SavedJobs/InProgress/Layoff-notice/Personal-Notice-Employee43.pcl, revealing a termination notice for Elfin.


At 12:08:14 UTC, the threat actor identified the PostScript scheduled print job Announcment-25Dec.ps and retrieved its contents via FSUPLOAD at 12:08:18 UTC.


At 12:09:12 UTC, the threat actor discovered an SSH backup private key at 0:/Administration/securitykeys/ssh_systems/id_rsa and retrieved its contents at 12:09:27 UTC. An attempt to delete the key at 12:18:14 UTC failed.

Building on the credential material harvested from the LSASS dump and internal network persistence from prior phases, the threat actor executed the most destructive stage on December 13, 2023.


At 09:24:21 UTC, the threat actor, operating from internal IP 192.168.68.200, exploited CVE-2020-1472 (ZeroLogon) against DC01.northpole.local, successfully resetting the DC$ machine account password at 09:24:23 UTC.



As part of the exploitation chain, a malicious service named vulnerable_to_zerologon was installed on the domain controller, backed by the binary hAvbdksT.exe.

At 09:27:36 UTC, leveraging the local Administrator account now accessible via the domain controller, the threat actor reset the password of the Bytesparkle domain account, repurposing it as a controlled credential.

At approximately 10:03 UTC, the threat actor established an RDP session to DC01.northpole.local using the newly controlled Bytesparkle account.


At 10:47 UTC, two suspicious files (a masqueraded svchost.exe and an accompanying vnc2.dll) were dropped into C:\Users\bytesparkle\Downloads\svc. Execution at 10:53:21 UTC established a VNC-based remote access channel.


At 10:57:38 UTC, the threat actor created a scheduled task named svc_vnc, establishing a persistence mechanism that would survive a reboot.



At 11:00:16 UTC, the threat actor dropped the ransomware payload splunk_svc.dll into C:\tmp. Execution followed at 11:03:20 UTC, deploying a ransom note to C:\Users\bytesparkle\Desktop\README.txt and beginning file encryption. All encrypted files had their extensions replaced with .xmax. The encryption process completed at 11:07:28 UTC.

splunk_svc.dllStatic analysis of splunk_svc.dll (executed at 11:03:20 UTC) reveals a self-contained recursive encryption routine consistent with the observed .xmax extension renaming and ransom note deployment.

The binary implements a depth-first directory walker using FindNextFileW, iterating through the filesystem and checking each discovered file against a hardcoded list of 69 targeted extensions. The target list covers documents, source code, email stores, virtual machine disk images, databases, and archives.

For each matching file, the routine encrypts content byte-by-byte using a repeating 16-byte XOR cipher. The key (EncryptingC4Fun!) cycles across a 16-byte window. This encryption scheme is cryptographically trivial: XOR is symmetric, so the same operation restores plaintext, and the short repeating key is fully recoverable via known-plaintext attack.

The hardcoded ransom note demands 5,000,000 XMAS tokens to wallet GR1NCH-5ANTA-2023XMAS and is signed "The Grinch." The note is deployed to the current user's Desktop after every encrypted file.
191[.]101[.]31[.]57: IP used for automated bulk retrieval from the papa-noel S3 bucket45[.]133[.]193[.]41: IP used to access the north-pole-private S3 bucket and retrieve bytesparkle.ovpn77[.]74[.]198[.]52: C2 server (shellcode delivery on port 445, reverse shell on port 447)172[.]17[.]79[.]133: Internal IP (additional activity)192[.]168[.]68[.]200: Internal IP; ZeroLogon source against DC01definitelynotthegrinch@gmail[.]com: Threat actor email used to social engineer Elfinhxxp[://]77.74.198.52/destroy_christmas/evil_present.jpg: URL used by present.vbs to download shellcode loader4ca68446b660675ac2cd37baf0c3a38f9c860d32730224fc6729140943c5f264: present_for_santa.zip2997fc7a9a59ec7b98b307b1bec35743852f402f398361ce8b90d175f049d582: click_for_present.lnk78ba1ea3ac992391010f23b346eedee69c383bc3fd2d3a125ede6cba3ce77243: present.vbs6f48c94668fd48f42ef63ae30be60022d9ce95840e33fbc7efed56148051c9be: present.exe (shellcode loader)337c24c2e6016a9bdca30f2820df9c1dae7b827ad73c93a14e1dc78906b63890: PresentForNaughtyChild.exe (Procdump)943666ecc9dd5810c0b7e473e92604fdd54691fbfb101f9fec6e11d6c273233a: splunk_svc.dll (ransomware)34894ab9f37a7e80304b0541bce9dce0e7dda6401617509f88f0109f11ee1756: README.txt (ransom note)CVE-2020-1472: ZeroLogon (Netlogon privilege escalation)vulnerable_to_zerologon: Malicious service installed on DC01hAvbdksT.exe: Binary backing the vulnerable_to_zerologon servicesvc_vnc: Malicious scheduled task on DC01svchost.exe + vnc2.dll: VNC backdoor components dropped to C:\Users\bytesparkle\Downloads\svcstolen_gift.dmp: LSASS memory dump.xmax: Ransomware file extension appended to all encrypted filesGR1NCH-5ANTA-2023XMAS: Threat actor cryptocurrency walletImmediate Tactical Fixes
- Patch CVE-2020-1472 (ZeroLogon) immediately
- Apply Microsoft's August 2020 patch (KB4557222) and enforce "enforcement mode" (
FullSecureChannelProtection = 1) across all domain controllers. - Audit all machine account Netlogon channel activity retroactively.
- Apply Microsoft's August 2020 patch (KB4557222) and enforce "enforcement mode" (
- Rotate all compromised credentials
- Credentials confirmed compromised:
elf-admin,elfadminAWS access/secret key pair,Bytesparkledomain account,DC$machine account, and the SSH private key retrieved from the printer. - Access to the
christmas.giftsserver must be assumed compromised until confirmed otherwise.
- Credentials confirmed compromised:
- Purge VNC backdoor and persistence mechanism
- Remove the VNC backdoor components (
svchost.exe+vnc2.dll) and delete thesvc_vncscheduled task fromDC01.northpole.local. - Perform a full sweep of all systems for additional persistence mechanisms.
- Remove the VNC backdoor components (
- Revoke and audit AWS IAM access
- Immediately revoke the
elfadminIAM access/secret key pair. - Audit all CloudTrail logs for the
papa-noelandnorth-pole-privateS3 buckets.
- Immediately revoke the
- Isolate and re-image affected systems
- Isolate and re-image
TINKERTECH-WKS001,DC01.northpole.local, and potentially thechristmas.giftsserver. - Domain re-promotion of DC01 should follow a clean rebuild, not an in-place remediation.
- Isolate and re-image
- Disable PJL access on the printer
- Immediately disable PJL filesystem commands (
FSUPLOAD,FSDIRLIST) or firewall port 9100 to authorized print servers only. - Remove all sensitive files (SSH keys, HR documents) from the printer's embedded filesystem.
- Immediately disable PJL filesystem commands (
Strategic Improvements
- Eliminate hardcoded credentials in source code and binaries
- Implement a secrets management solution (e.g., AWS Secrets Manager, HashiCorp Vault) for all credentials. Integrate pre-commit hooks and SAST tooling into development pipelines.
- Enforce least-privilege access on cloud storage
- All S3 buckets must be private by default. Enable S3 Block Public Access at the account level and conduct a full audit of all buckets for public exposure.
- Implement an insider threat program
- Establish user activity monitoring on endpoints with access to sensitive IP, DLP controls for outbound file transfers, and a clear off-boarding process that immediately revokes access.
- Deploy email security controls
- Implement email authentication (DMARC, DKIM, SPF) enforcement. Deploy a secure email gateway with anti-phishing capabilities and conduct regular social engineering awareness training.
- Network segmentation and printer hardening
- Segment IoT and peripheral devices into a dedicated VLAN with strict firewall rules. Disable legacy protocols (PJL, FTP) on all network-attached peripherals.
- Establish a vulnerability management program with SLA enforcement
- CVE-2020-1472 remained unpatched over three years after public disclosure. Implement patching SLAs: critical vulnerabilities (CVSS ≥ 9.0) within 7 days, high (CVSS 7.0–8.9) within 30 days.
- Develop and test an incident response playbook
- This incident spanned 16 days without triggering a detection or response. Develop formal IR playbooks covering ransomware, lateral movement, and cloud credential abuse scenarios.
Network Diagram

File Recovery: .xmax Decryptor
Because the ransomware uses a trivially reversible repeating XOR cipher with the hardcoded key EncryptingC4Fun!, all encrypted .xmax files can be fully recovered using the following Python script:
#!/usr/bin/env python3
"""
.xmax File Decryptor — XOR key: EncryptingC4Fun!
Usage: python xmax_decrypt.py <target_directory> [--dry-run]
"""
import os, sys, argparse, logging
XOR_KEY = b"EncryptingC4Fun!"
logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s", datefmt="%Y-%m-%d %H:%M:%S")
log = logging.getLogger(__name__)
def xor_decrypt(data, key):
key_len = len(key)
return bytes(b ^ key[i % key_len] for i, b in enumerate(data))
def find_xmax_files(root):
for dirpath, _, filenames in os.walk(root):
for fname in filenames:
if fname.endswith(".xmax"):
yield os.path.join(dirpath, fname)
def decrypt_file(filepath, dry_run=False):
original_path = filepath[:-5]
if os.path.exists(original_path):
log.warning(f"Skipping — original already exists: {original_path}")
return False
try:
with open(filepath, "rb") as f:
encrypted_data = f.read()
decrypted_data = xor_decrypt(encrypted_data, XOR_KEY)
if dry_run:
log.info(f"[DRY RUN] Would restore: {filepath} -> {original_path}")
return True
with open(original_path, "wb") as f:
f.write(decrypted_data)
os.remove(filepath)
log.info(f"Restored: {original_path}")
return True
except (PermissionError, OSError) as e:
log.error(f"Error on {filepath}: {e}")
return False
def main():
parser = argparse.ArgumentParser(description="Decrypt .xmax files using XOR key.")
parser.add_argument("target", help="Directory to scan")
parser.add_argument("--dry-run", action="store_true", help="Preview without making changes")
args = parser.parse_args()
if not os.path.isdir(args.target):
log.error(f"Target is not a valid directory: {args.target}")
sys.exit(1)
total = recovered = skipped = failed = 0
for xmax_file in find_xmax_files(args.target):
total += 1
result = decrypt_file(xmax_file, dry_run=args.dry_run)
if result: recovered += 1
elif os.path.exists(xmax_file[:-5]): skipped += 1
else: failed += 1
log.info(f"Done — Total: {total} | Recovered: {recovered} | Skipped: {skipped} | Failed: {failed}")
if __name__ == "__main__":
main()