Dropping Elephant — Fondue.exe DLL Side-Loading Campaign
Executive Summary
Dropping Elephant (aka APT-C-17 / Patchwork, an India-nexus espionage actor) is running a fresh campaign disclosed by Rapid7 on 2026-06-23. The intrusion begins with a spear-phished Windows shortcut (.lnk) masquerading as a PDF contract for a Chinese energy project. The shortcut kicks off a lightly-obfuscated PowerShell stage that stages files under C:\Users\Public\ and abuses DLL side-loading: the legitimate, signed Microsoft binary Fondue.exe is dropped alongside a malicious APPWIZ.cpl, which Fondue.exe loads in place of the genuine Windows control-panel applet.
The malicious applet patches AMSI and ETW in-process, then uses Donut shellcode to reflectively load a 32-bit Remote Access Trojan in memory. The RAT communicates over a Salsa20-encrypted channel. Persistence is a scheduled task named GoogleErrorReport that re-launches Fondue.exe every minute — a noisy, high-fidelity anchor for hunting.
The strongest defensive angle is the side-load lineage: a Microsoft-signed Fondue.exe executing from C:\Users\Public\ (rather than System32) and loading an APPWIZ.cpl from the same user-writable directory. That combination essentially never occurs in benign operation.
Defender priority: Hunt for Fondue.exe running from any non-System32 path, an APPWIZ.cpl written under C:\Users\Public\, and the GoogleErrorReport scheduled task. No public atomic IOCs (hashes/C2) were released — detection here is behavior-led; load IOCs into the §10 CSV as Rapid7 publishes them.
Source Review & Web Hunter Notes
| Tier | Source | Key Finding | Carry Forward |
|---|---|---|---|
| 1 | Rapid7 research (via Cyberpress, 2026-06-23) | Full side-load chain: .lnk fake-PDF → Fondue.exe + APPWIZ.cpl side-load → Donut RAT; GoogleErrorReport task; Salsa20 C2; C:\Users\Public staging | Yes |
| 2 | Historical Dropping Elephant / Patchwork reporting | India-nexus espionage targeting South/East Asian government, energy, diplomatic entities; known for DLL side-loading and decoy documents | Partial |
No atomic IOCs (file hashes, C2 IPs/domains) were published in the available reporting. This pack is intentionally behavior-led; the §10 CSV uses REPLACE_WITH_* placeholders so atomic indicators can be dropped in unmodified once Rapid7 releases its appendix. No indicator here is fabricated.
Hunt Brief & Attack Chain
Hunt Hypotheses (fidelity-ordered)
- H1 (high):
Fondue.exeexecutes from a non-System32path (e.g.C:\Users\Public\) — the side-load host. Near-zero FP. - H2 (high): A scheduled task named
GoogleErrorReportis registered, recurring every minute. - H3 (high): A PE named
APPWIZ.cplis written underC:\Users\Public\or another user-writable path. - H4 (medium): A
.lnklaunch spawns PowerShell that referencesC:\Users\Public\with string-concatenation obfuscation. - H5 (medium):
Fondue.exeis parented by the task scheduler (svchost/taskeng) on a tight recurring cadence. - H6 (low): Executable / encrypted payload files staged in
C:\Users\Public\.
Attack Chain
| Step | Behavior | Telemetry | Hunt Angle |
|---|---|---|---|
| 1 · Delivery | Spear-phish .lnk disguised as a PDF contract | PeFileWritten, ProcessRollup2 | Q4 |
| 2 · Execution | Obfuscated PowerShell stages files under C:\Users\Public\ | ProcessRollup2 CommandLine | Q4 |
| 3 · Staging | Drops signed Fondue.exe + malicious APPWIZ.cpl | PeFileWritten | Q3, Q6 |
| 4 · Side-load | Fondue.exe loads malicious APPWIZ.cpl | ProcessRollup2 (image path) | Q1 |
| 5 · Evasion | AMSI + ETW patching before RAT execution | (in-memory — gap) | — |
| 6 · Payload | Donut shellcode loads 32-bit RAT in memory | (in-memory — gap) | — |
| 7 · Persistence | GoogleErrorReport task runs Fondue.exe every minute | ScheduledTaskRegistered | Q2, Q5 |
| 8 · C2 | Salsa20-encrypted RAT beacon | NetworkConnectIP4 (no published infra) | Q7 |
Consolidated IOC Table
| Type | Value | Confidence | Action | Context |
|---|---|---|---|---|
| filename | Fondue.exe (signed MS binary, abused outside System32) | high | hunt | Side-load host |
| filename | APPWIZ.cpl (malicious, in user-writable path) | high | hunt | Side-loaded payload DLL |
| task | GoogleErrorReport (scheduled task, 1-min recurrence) | high | hunt | Persistence |
| path | C:\Users\Public\ (staging directory) | medium | hunt | Payload / encrypted file staging |
| technique | Salsa20-encrypted C2 channel | medium | enrich | RAT comms (no published infra) |
| sha256 | REPLACE_WITH_FONDUE_SIDELOAD_HASH | pending | detect | Populate from Rapid7 appendix |
| sha256 | REPLACE_WITH_APPWIZ_CPL_HASH | pending | detect | Populate from Rapid7 appendix |
Affected Surface & Telemetry Matrix
| Surface | Required Telemetry | Priority | Gap Risk |
|---|---|---|---|
| Windows endpoints (gov / energy / diplomatic targets) | ProcessRollup2 / SyntheticProcessRollup2 | High | Low |
| Scheduled-task registration | ScheduledTaskRegistered | High | Low |
| PE / DLL writes to user-writable dirs | PeFileWritten, NewExecutableWritten | High | Low |
| In-memory RAT (Donut, AMSI/ETW patch) | — | Medium | High — not in process telemetry |
| RAT C2 egress | NetworkConnectIP4, DnsRequest | Medium | High — no published infra to anchor |
ATT&CK Mapping
| Tactic | Technique | Observed Behavior | Query / Control |
|---|---|---|---|
| Initial Access | T1566.001 Spear-phishing Attachment | .lnk disguised as PDF contract | Q4 / mail gw |
| Execution | T1204.002 Malicious File | User opens fake-PDF .lnk | Q4 |
| Execution | T1059.001 PowerShell | Obfuscated staging script | Q4 / M1038 |
| Defense Evasion | T1574.002 DLL Side-Loading | Fondue.exe loads malicious APPWIZ.cpl | Q1, Q3 / M1052 |
| Defense Evasion | T1562.001 Impair Defenses | AMSI + ETW patching | — / M1040 |
| Defense Evasion | T1620 Reflective Code Loading | Donut in-memory RAT | — |
| Persistence | T1053.005 Scheduled Task | GoogleErrorReport every minute | Q2, Q5 / M1028 |
| Command & Control | T1573.001 Encrypted Channel | Salsa20 RAT comms | Q7 |
Native Audit-Log Hunts
- Windows Security log: Event ID 4698 (scheduled task created) where TaskName =
GoogleErrorReportor any task whose action isFondue.exefrom a user path. - Sysmon (if deployed): Event ID 7 — module load of
APPWIZ.cplbyFondue.exefrom outsideSystem32; Event ID 1 —Fondue.exewith an unusual parent or path. - Mail gateway: Quarantine and hunt
.lnkattachments (or archives containing them) themed as PDF contracts; alert on double-extension lures (.pdf.lnk). - File system sweep: Enumerate
C:\Users\Public\for unexpected.exe/.cpl/encrypted blobs across the fleet.
CrowdStrike LogScale CQL Hunt Queries
Looks for: The signed Microsoft binary Fondue.exe executing from any path other than System32/WinSxS — the DLL side-load host. Near-zero FP.
// HUNT: Fondue.exe executing from a non-System32 path (Dropping Elephant) // MITRE: T1574.002 // CONF: high FP: low COST: low | REQUIRES: ProcessRollup2 #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ImageFileName=/\\fondue\.exe$/i | ImageFileName!=/\\Windows\\(System32|SysWOW64|WinSxS)\\/i | table([ComputerName, UserName, ImageFileName, ParentBaseFileName, CommandLine, SHA256HashData], limit=200)
Looks for: Registration of the campaign's persistence task. The Google-themed name on a host with no Google software is the tell.
// HUNT: GoogleErrorReport persistence task (Dropping Elephant) // MITRE: T1053.005 // CONF: high FP: low COST: low | REQUIRES: ScheduledTaskRegistered #event_simpleName=/ScheduledTaskRegistered/ | TaskName=/GoogleErrorReport/i | table([ComputerName, UserName, TaskName, TaskExecutable], limit=200)
Looks for: An APPWIZ.cpl PE written under C:\Users\Public\ or another user path — the genuine applet lives only in System32.
// HUNT: Malicious APPWIZ.cpl staged in user-writable path (Dropping Elephant) // MITRE: T1574.002 // CONF: high FP: low COST: low | REQUIRES: PeFileWritten #event_simpleName=/PeFileWritten|NewExecutableWritten/ | TargetFileName=/\\(Users\\Public|Users\\[^\\]+\\(AppData|Downloads)|ProgramData)\\.*appwiz\.cpl$/i | table([ComputerName, ContextBaseFileName, TargetFileName], limit=200)
Looks for: PowerShell/cmd staging files under C:\Users\Public\ shortly after a shortcut launch. FP: some admin scripts use the Public profile; scope to interpreter parented by explorer.exe with obfuscation hints.
// HUNT: LNK-driven PowerShell staging to C:\Users\Public (Dropping Elephant) // MITRE: T1059.001, T1204.002 // CONF: medium FP: medium COST: low | REQUIRES: ProcessRollup2 // TUNING: exclude known IT automation that legitimately writes to \Users\Public #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ImageFileName=/\\(powershell|pwsh|cmd)\.exe$/i | ParentBaseFileName=/^explorer\.exe$/i | CommandLine=/Users\\Public/i | table([ComputerName, UserName, ParentBaseFileName, CommandLine], limit=200)
Looks for: Fondue.exe launched by svchost.exe/taskeng.exe — the per-minute persistence firing.
// HUNT: Scheduler-launched Fondue.exe recurrence (Dropping Elephant) // MITRE: T1053.005, T1574.002 // CONF: medium FP: low COST: low | REQUIRES: ProcessRollup2 #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ImageFileName=/\\fondue\.exe$/i | ParentBaseFileName=/^(svchost|taskeng)\.exe$/i | table([ComputerName, ImageFileName, ParentBaseFileName, CommandLine], limit=200)
Looks for: PE files written into the Public profile — the campaign's staging directory. FP: some installers use Public for shared components; pair with a Fondue.exe / APPWIZ.cpl hit on the same host.
// HUNT: PE staging in C:\Users\Public (Dropping Elephant) // MITRE: T1574.002 // CONF: medium FP: medium COST: low | REQUIRES: PeFileWritten // TUNING: exclude signed installers; correlate with Q1/Q3 on same ComputerName #event_simpleName=/PeFileWritten|NewExecutableWritten/ | TargetFileName=/\\Users\\Public\\.*\.(exe|dll|cpl)$/i | table([ComputerName, ContextBaseFileName, TargetFileName], limit=200)
Looks for: Outbound connections whose initiating image is Fondue.exe from a user path — the Donut RAT beaconing. FP: populate RemoteAddressIP4 once infra is published; until then, any egress from a non-System32 Fondue.exe warrants review.
// HUNT: Egress from side-loaded Fondue.exe (Dropping Elephant) // MITRE: T1573.001 // CONF: medium FP: medium COST: low | REQUIRES: NetworkConnectIP4 // TUNING: add published C2 IPs to RemoteAddressIP4 when Rapid7 releases infra #event_simpleName=/NetworkConnectIP4/ | ContextBaseFileName=/^fondue\.exe$/i | table([ComputerName, ContextBaseFileName, RemoteAddressIP4, RemotePort], limit=200)
CrowdStrike Custom IOA Recommendations
| IOA Name | Pattern | Exclusions | Action |
|---|---|---|---|
| Dropping Elephant — Fondue Side-Load | Image fondue.exe from a path not under \Windows\System32\ | None | Block |
| Dropping Elephant — GoogleErrorReport Task | ScheduledTaskRegistered, TaskName GoogleErrorReport | None | Detect (critical) |
| Dropping Elephant — APPWIZ.cpl Staging | PE write of appwiz.cpl outside \Windows\System32\ | None | Detect (high) |
Q1, Q2 and Q3 are all strong Custom IOA promotion candidates — each is a single, near-zero-FP behavior. Q4/Q6 stay Investigate-only pending baseline.
Machine-Readable IOC Appendix
type,value,action,severity,expiration,description,tags sha256,REPLACE_WITH_FONDUE_SIDELOAD_HASH,prevent,critical,2026-12-24,Dropping Elephant side-load host,actor:DroppingElephant sha256,REPLACE_WITH_APPWIZ_CPL_HASH,prevent,critical,2026-12-24,Malicious APPWIZ.cpl,actor:DroppingElephant sha256,REPLACE_WITH_RAT_PAYLOAD_HASH,prevent,critical,2026-12-24,Donut-staged RAT,actor:DroppingElephant ipv4,REPLACE_WITH_C2_IP,detect,high,2026-09-24,Salsa20 RAT C2,actor:DroppingElephant domain,REPLACE_WITH_C2_DOMAIN,detect,high,2026-09-24,RAT C2,actor:DroppingElephant
fondue.exe ImageFileName NOT under \Windows\System32\ or \WinSxS\ PeFileWritten TargetFileName ~ appwiz.cpl outside \Windows\System32\ ScheduledTaskRegistered TaskName = GoogleErrorReport (1-minute recurrence) PE written under \Users\Public\ (*.exe / *.dll / *.cpl) powershell/cmd parented by explorer.exe writing to \Users\Public
Actor: Dropping Elephant (APT-C-17 / Patchwork), India-nexus espionage Lure: .lnk masquerading as PDF (Chinese energy-project contract) Side-load: signed Fondue.exe loads malicious APPWIZ.cpl Loader: Donut shellcode (32-bit in-memory RAT) Evasion: AMSI + ETW patching pre-execution Crypto: Salsa20 C2 channel Persistence: scheduled task "GoogleErrorReport" (every minute) Staging: C:\Users\Public\
audit any Fondue.exe outside C:\Windows\System32\ audit *.cpl / *.dll present in C:\Users\Public\ audit scheduled tasks with Google/Microsoft-themed names not signed by vendor block execution from C:\Users\Public\ via WDAC/AppLocker
Detection Validation Gates
| Gate | Check | Pass Criteria |
|---|---|---|
| Telemetry ready | ProcessRollup2, ScheduledTaskRegistered, PeFileWritten flowing | All three present in last 24h |
| Benign baseline | Run Q1 fleet-wide | Zero legitimate Fondue.exe outside System32 (confirm none expected) |
| Positive test | Lab: copy fondue.exe to C:\Users\Public\ and run; register a dummy GoogleErrorReport task | Q1 and Q2 fire |
| Promotion | Q1/Q2/Q3 promoted to Custom IOA | Zero FP across pilot ring |
Hardening — Tiered & Deployable
- Block execution from
C:\Users\Public\via WDAC/AppLocker — the campaign's entire staging + side-load chain runs from there (M1038). - Alert on
GoogleErrorReportand any scheduled task whose action is a binary under a user-writable path (M1028). - Quarantine inbound
.lnkattachments (and archives containing them) at the mail gateway (M1049).
- ASR: block Office/child-process abuse and untrusted executable content to break the .lnk → PowerShell stage (M1042).
- PowerShell Constrained Language Mode + script-block logging to surface the obfuscated staging script (M1038, M1049).
- Disable
.lnkexecution from email/temp paths via SRP/WDAC where workflow allows (M1038).
- Full application control (WDAC) allow-listing signed binaries by publisher and pinning side-load-prone LOLBins to their trusted install paths (M1052).
- Network egress filtering + TLS inspection on segments holding diplomatic/energy data to surface Salsa20-tunnelled C2 once infra is known (M1031, M1037).
Deployable Playbooks
1 · AppLocker — deny execution from C:\Users\Public (PowerShell)
<!-- Deny execution from C:\Users\Public, the DroppingElephant staging path. -->
<!-- Import: Group Policy -> Computer Configuration -> Windows Settings -> Security
Settings -> Application Control Policies -> AppLocker -> Executable Rules -->
<!-- SHIPS AS AuditOnly ON PURPOSE. Run it for at least a week and review EventID
8003 before flipping EnforcementMode to "Enabled". -->
<RuleCollection Type="Exe" EnforcementMode="AuditOnly">
<!-- Microsoft default allow rules -- DO NOT REMOVE. Without them, enforcing this
collection blocks every executable on the machine, including your RMM agent. -->
<FilePathRule Id="921cc481-6e17-4653-8f75-050b80acca20" Name="(Default) All files in Program Files"
Description="Allows Everyone to run applications in Program Files."
UserOrGroupSid="S-1-1-0" Action="Allow">
<Conditions><FilePathCondition Path="%PROGRAMFILES%\*" /></Conditions>
</FilePathRule>
<FilePathRule Id="a61c8b2c-a319-4cd0-9690-d2177cad7b51" Name="(Default) All files in Windows"
Description="Allows Everyone to run applications in the Windows folder."
UserOrGroupSid="S-1-1-0" Action="Allow">
<Conditions><FilePathCondition Path="%WINDIR%\*" /></Conditions>
</FilePathRule>
<FilePathRule Id="fd686d83-a829-4351-8ff4-27c7de5755d2" Name="(Default) All files -- Administrators"
Description="Allows local Administrators to run all applications."
UserOrGroupSid="S-1-5-32-544" Action="Allow">
<Conditions><FilePathCondition Path="*" /></Conditions>
</FilePathRule>
<!-- Some installers and a few LOB apps stage to Users\Public. Audit for a week first. -->
<FilePathRule Id="7c2f4d81-9b03-4a6e-8d15-3e7a0f9c6b22" Name="Deny execution from Users\Public for standard users"
Description="DroppingElephant / Fondue stages and executes from the Public profile"
UserOrGroupSid="S-1-5-32-545" Action="Deny">
<Conditions>
<FilePathCondition Path="%SYSTEMDRIVE%\Users\Public\*" />
</Conditions>
</FilePathRule>
</RuleCollection>
Prerequisites: the Application Identity service (AppIDSvc) must be
Running/Automatic, set via GPO -- AppLocker evaluates nothing without it. Pilot OU.
Reboot required: no (gpupdate /force to refresh policy).
Verify: during the AuditOnly week, review Applications and Services Logs
> Microsoft > Windows > AppLocker > EXE and DLL for EventID 8003
(would-have-blocked). Zero unexpected entries means it is safe to set
EnforcementMode="Enabled"; a real block then logs EventID 8004.
Rollback: set EnforcementMode="NotConfigured" and re-import, or
unlink the GPO and run gpupdate /force. If a host is already locked out by an
over-broad policy, boot to Safe Mode (AppLocker does not enforce there) and stop
AppIDSvc, or delete %WINDIR%\System32\AppLocker\*.AppLocker.
2 · Enumerate side-load + persistence across a host
Get-ChildItem C:\Windows\System32\fondue.exe | Select-Object FullName,LastWriteTime # baseline genuine copy
Get-ChildItem C:\ -Recurse -Filter fondue.exe -ErrorAction SilentlyContinue |
Where-Object { $_.DirectoryName -notmatch 'System32|WinSxS' } |
Select-Object FullName,LastWriteTime
Get-ScheduledTask | Where-Object { $_.TaskName -eq 'GoogleErrorReport' } | Select-Object TaskName,TaskPath,State
Get-ChildItem C:\Users\Public -Recurse -Include *.exe,*.dll,*.cpl -ErrorAction SilentlyContinue
3 · Remove the persistence task
Unregister-ScheduledTask -TaskName 'GoogleErrorReport' -Confirm:$false -ErrorAction SilentlyContinue
Capture the fondue.exe, appwiz.cpl, and any Public-staged payloads for hashing/IR before deletion — these become your tenant-local atomic IOCs.
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Network-contain the host in Falcon; capture memory (RAT is in-memory via Donut) | SOC L2 | Containment timestamp, memory image |
| Eradicate | Unregister GoogleErrorReport; remove side-loaded fondue.exe + appwiz.cpl + Public-staged payloads | SOC L2 | File hashes, task export |
| Hunt-wide | Sweep fleet with Q1/Q2/Q3; treat any hit as a confirmed APT foothold | Threat Hunt | Query result export |
| Recover | Reimage compromised hosts (espionage RAT, assume deeper access); rotate any credentials used on the host | Endpoint Eng / IAM | Rebuild + reset tickets |
| Lessons | Promote Q1/Q2/Q3 to IOA; brief on .lnk-as-PDF lures; submit tenant-local hashes to TI | Detection Eng | This pack, updated |
Detection Coverage Map
| Technique | Behavior | CQL | IOA | Coverage |
|---|---|---|---|---|
| T1566.001 / T1204.002 | .lnk-as-PDF delivery | Q4 | — | Partial |
| T1059.001 | Obfuscated staging PowerShell | Q4 | — | Partial |
| T1574.002 | Fondue.exe side-load + APPWIZ.cpl | Q1, Q3, Q6 | Yes | Good |
| T1053.005 | GoogleErrorReport persistence | Q2, Q5 | Yes | Good |
| T1562.001 | AMSI/ETW patching | — | — | Gap |
| T1620 | Donut in-memory RAT | — | — | Gap |
| T1573.001 | Salsa20 C2 | Q7 | — | Gap (no infra) |
Coverage is strong on the side-load and persistence anchors (Q1/Q2/Q3) and weak on the in-memory stages (AMSI/ETW patch, Donut RAT) and C2 — the latter has no published infrastructure to pin. Lean on the file/task anchors and fill Q7's RemoteAddressIP4 + the §10 CSV once Rapid7 releases atomic IOCs. Validation gates (§11) must pass before promoting Q1/Q2/Q3 to Custom IOAs.
Hunt Summary Ticket
TITLE: Dropping Elephant (APT-C-17) — Fondue.exe side-load hunt SEVERITY: Critical — active nation-state espionage; in-memory RAT SCOPE: Windows endpoints; prioritize government / energy / diplomatic environments HYPOTHESIS: .lnk-as-PDF stages Fondue.exe side-load of malicious APPWIZ.cpl; GoogleErrorReport persistence QUERIES: Q1 Fondue non-System32 · Q2 GoogleErrorReport task · Q3 APPWIZ.cpl staging · Q4 LNK PowerShell · Q5 scheduler-Fondue · Q6 Public PE · Q7 RAT egress DO FIRST: Run Q1, Q2, Q3 fleet-wide; any hit = confirmed APT foothold FINDINGS: ____________________________________________ GAPS: AMSI/ETW patch + Donut RAT (in-memory); Salsa20 C2 (no published infra) ACTIONS: Block exec from C:\Users\Public; remove GoogleErrorReport task; capture + hash artifacts; reimage OWNER: ____________________ VERSION: v0.2 (2026-06-24)
Changelog
table() calls now carry an explicit row limit: the default is 200 and truncation is silent, so a capped result was indistinguishable from a complete one. Atomic-IOC sweeps (filters over 5+ hashes or C2 IPs) use limit=max so a wide infection is never silently under-scoped; behavioural hunts use limit=200, where exceeding the cap indicates the query needs tuning. Where present, event names that do not exist in the Falcon data model were corrected (e.g. ServiceInstalled is a Sysmon concept, not a Falcon event; ElfFileWritten is ELFFileWritten) — such queries could never return a row. No detection logic, fields, or IOCs changed.References
| Tier | Source | Used For | Access Date |
|---|---|---|---|
| 1 | Cyberpress — Fondue.exe DLL Side-Loading deploys Dropping Elephant in-memory malware (Rapid7 research, 2026-06-23) | Full side-load chain, GoogleErrorReport task, Donut RAT, Salsa20 C2, C:\Users\Public staging, ATT&CK behaviors | 2026-06-24 |
| R | MITRE ATT&CK — Patchwork / Dropping Elephant (G0040) | Actor background, technique IDs, M-number mitigation mapping | 2026-06-24 |