Incident Report: Fake Video Meeting macOS Compromise and Telegram Takeover
De-identified incident report: a fake Teams meeting led to a root backdoor on macOS, a fake Google Docs Offline extension and a Telegram account takeover.
| Item | Detail |
|---|---|
| Report ID | IR-2026-1103-01 |
| Date | 2026-11 |
| Public edition | De-identified: hostname, username, victim-specific IDs, personal software inventory and evidence paths removed |
| Affected host | Apple MacBook (macOS 26.x) |
| Affected account | Local administrator account |
| Incident type | Social engineering → malware execution → privilege escalation → persistent backdoor → browser spyware extension → account takeover |
| Severity | Critical |
| Status | Contained; known malicious components eradicated; credential rotation and OS reinstall pending (user action) |
| Method | Live-response host forensics, read-only analysis first, evidence preserved before removal |
1. Executive Summary
On 24 April 2026 (from 08:03 UTC), the user was invited to a video meeting over Telegram and directed to a counterfeit Microsoft Teams meeting page (the user recalled it as Zoom). Within roughly four minutes, the attacker harvested the macOS login password through a fake system password dialog and installed a root-level backdoor (cloudsync) with boot-time persistence.
The backdoor remained active for about 193 days. During that period it:
- pulled second-stage payloads and encrypted configuration on 2026-05-05 and 2026-06-03;
- on 2026-05-25, installed a spyware Chrome extension masquerading as “Google Docs Offline” into all four Chrome profiles, paired with an unsigned Native Messaging Host capable of running arbitrary shell commands;
- the extension exfiltrated all cookies every 30 s, logged keystrokes and clipboard, took screenshots every 6 s, and uploaded every site’s localStorage (including Telegram Web session tokens).
The most likely cause of the Telegram takeover is session hijacking (stolen cookies / localStorage tokens), which bypasses both password and 2FA.
On the day of investigation (2026-11-03) both malware sets were still running and connected to C2. Processes were terminated, persistence removed, samples quarantined, the C2 domain blocked, and three rounds of in-depth re-examination found no further known artefacts.
The tradecraft closely matches public reporting on the DPRK-nexus APT BlueNoroff (a Lazarus sub-group) “GhostCall” fake-meeting campaign. Evidence is insufficient for definitive attribution; this report states only that the techniques are consistent.
2. Timeline
timeline
title Intrusion timeline (UTC)
2026-04-24 08h03 : Fake password-popup component created
: ~/Library/Staging created
2026-04-24 08h04 : User screenshot - fake Teams lobby
2026-04-24 08h05 : Identification dir and auth.db created
2026-04-24 08h06 : Root backdoor cloudsync written
2026-04-24 08h07 : LaunchDaemon com.safari.sync.service created
: Encrypted config .com.apple.better.env
2026-05-05 : Stage-2 encrypted data .apple.auth
2026-05-25 03h40 : Spyware Chrome extension and Native Host planted
2026-06-03 : Stage-2 binary .authds
2026-06-23 : LaunchAgent com.apple.google.auth updated
2026-11-03 : Detection, containment, eradication, re-examination
| Time (UTC) | Event | Evidence |
|---|---|---|
| 2026-04-24 08:03:01 | ~/Library/Staging and ~/Library/Application Scripts/ammad.Mac-Password-Popup (fake password dialog) created | File-system birth time |
| 2026-04-24 08:04:47 | Victim’s screenshot of counterfeit Microsoft Teams lobby | Victim desktop screenshot |
| 2026-04-24 08:05:16–20 | ~/Library/Identification/, ~/Library/Application Support/Authorization/auth.db created | File system |
| 2026-04-24 08:06:28 | Root-owned unsigned Mach-O ~/Library/CloudSync/cloudsync (7.26 MB, x86_64) written | File system, codesign |
| 2026-04-24 08:07:00 | Encrypted config /Users/Shared/.com.apple.better.env written | File system |
| 2026-04-24 08:07:18 | /Library/LaunchDaemons/com.safari.sync.service.plist created (RunAtLoad, runs cloudsync as root) | File system |
| 2026-05-05 11:30 | Encrypted data /Users/Shared/.apple.auth written | File system |
| 2026-05-25 03:40:46 | Chrome extension ppconlkbhfnachephglhgbhdgeapgjoj and Native Host google.chrome.diagnostics planted; data.js embeds the victim’s username and hostname | File system, Chrome Secure Preferences |
| 2026-06-03 00:20 | Second root-owned unsigned binary /Users/Shared/.authds (5.24 MB) written; carries last-used xattr (was executed) | File system, xattr |
| 2026-06-23 10:59 | ~/Library/LaunchAgents/com.apple.google.auth.plist updated | File system |
| 2026-11-03 00:26–11:27 | cloudsync beacons every 60 s (DNS lookup + TCP 5202) | Unified log (mDNSResponder, kernel) |
| 2026-11-03 11:27:44 | Cleanup script run: PID 543 killed, LaunchDaemon/Agent removed | Unified log (launchd) |
| 2026-11-03 11:33 | Chrome closed, extension and Native Host quarantined; C2 sessions dropped | lsof verification |
| 2026-11-03 ~11:45 | check02id.com sink-holed in /etc/hosts | Host check log |
Note: some files inside the extension folder show a 2025-10-16 birth time. No malicious activity was found on that date, so these are judged to be timestamps preserved from the attacker’s package. The install time in
Secure Preferences(2025-08-13) is likewise forged. The real deployment time, 2026-05-25, is taken fromdata.js, which contains the victim’s hostname.
3. Attack Flow (UML Sequence Diagram)
sequenceDiagram
autonumber
actor A as Attacker
participant TG as Telegram
actor U as Victim
participant W as Fake Teams/Zoom page
participant OS as macOS
participant BD as cloudsync (root backdoor)
participant CH as Chrome + spyware extension
participant NH as Native Host<br/>google.chrome.diagnostics
participant C2 as C2 server<br/>check02id.com (83.136.210.180)
A->>TG: Meeting invitation posing as contact / business partner
TG->>U: Meeting link
U->>W: Opens link, lands on fake lobby
W->>U: "Audio / SDK update required"
U->>OS: Runs downloaded script / program
OS->>U: Fake system password prompt (Mac-Password-Popup)
U->>OS: Enters macOS login password
Note over OS: Password captured → sudo escalation
OS->>BD: Writes cloudsync + LaunchDaemon (root)
loop every 60 s
BD->>C2: Beacon (TCP 5202)
C2-->>BD: Tasks / payloads
end
BD->>OS: Drops .authds, .apple.auth (May–Jun)
BD->>CH: Plants fake "Google Docs Offline" extension (4 profiles)
BD->>NH: Plants and registers Native Host
loop continuous
CH->>C2: All cookies every 30 s (TCP 5078)
CH->>C2: Keylog / clipboard every 60 s
CH->>C2: Screenshots every 6 s, localStorage, history (8443)
C2-->>CH: Real-time tasks over WebSocket (wss 8443/realtime)
CH->>NH: Relays remote shell commands
NH-->>CH: Command output
end
A->>TG: Logs in with stolen session
Note over A,TG: Account takeover (password and 2FA bypassed)
4. Malware Architecture (UML Component / Deployment View)
flowchart TB
subgraph Host["Victim host (macOS)"]
direction TB
subgraph Persist["Persistence"]
LD["/Library/LaunchDaemons/<br/>com.safari.sync.service.plist<br/>(root, RunAtLoad)"]
LA["~/Library/LaunchAgents/<br/>com.apple.google.auth.plist<br/>→ ~/Library/Identification/.verify"]
end
subgraph Stage1["Stage 1 (root)"]
CS["~/Library/CloudSync/cloudsync<br/>unsigned Mach-O x86_64 7.26MB"]
ENV["/Users/Shared/.com.apple.better.env<br/>encrypted config"]
PP["ammad.Mac-Password-Popup<br/>fake password dialog"]
AUTH["Authorization/auth.db<br/>points to .verify"]
end
subgraph Stage2["Stage 2"]
AD["/Users/Shared/.authds<br/>unsigned Mach-O 5.24MB"]
AA["/Users/Shared/.apple.auth<br/>encrypted data"]
end
subgraph Browser["Chrome (4 profiles)"]
EXT["Fake Google Doc Sheets Offline<br/>ppconlkbhfnachephglhgbhdgeapgjoj<br/>MV3, <all_urls>"]
NMH["NativeMessagingHosts/<br/>google.chrome.diagnostics<br/>unsigned Mach-O 6.03MB"]
end
end
C2[("C2: check02id.com<br/>83.136.210.180<br/>:5078 / :8443 / :5202")]
LD -->|boot| CS
LA -.->|target file missing| AUTH
CS --> ENV
CS -->|download| AD
CS -->|download| AA
CS -->|install| EXT
CS -->|install| NMH
EXT <-->|nativeMessaging| NMH
CS <-->|TCP 5202 every 60 s| C2
EXT <-->|HTTPS 5078 / WSS 8443| C2
5. Spyware Extension Capabilities (UML Class Diagram)
classDiagram
class FakeDocsOfflineExtension {
+id: ppconlkbhfnachephglhgbhdgeapgjoj
+manifest_version: 3
+location: 4 (not Web Store)
+host_permissions: all_urls
+permissions: cookies, history, tabs, scripting, desktopCapture, pageCapture, nativeMessaging
+C2_http: check02id.com:5078/update
+C2_ws: wss://check02id.com:8443/realtime
+token: hard-coded shared secret
}
class ContentScript1 {
+keydown() keylogger
+copy()/paste() clipboard capture
+click() triggers screenshots
+visibilitychange() uploads localStorage
}
class ContentScript2 {
+Hooks Google Meet Join-now button
+Lures user into granting Screen Recording
}
class BackgroundWorker {
+f3: upload all cookies every 30 s
+keylog: upload every 60 s
+capture: 36 screenshots, 6 s apart
+cmd3: on-demand cookie dump
+cmd4: wipe a site's cookies/storage (forces re-login)
+cmd11: upload 10,000 history entries
+cmd13: inject arbitrary JS into chosen URLs
+cmd14/15/16: remote shell via Native Host
+cmd17: MHTML page capture
}
class NativeHost_google_chrome_diagnostics {
+unsigned x86_64
+runs payload with cwd/timeout
}
FakeDocsOfflineExtension *-- ContentScript1
FakeDocsOfflineExtension *-- ContentScript2
FakeDocsOfflineExtension *-- BackgroundWorker
BackgroundWorker --> NativeHost_google_chrome_diagnostics : sendNativeMessage
Impact note: cmd4 can wipe a site’s cookies to force the victim to log in again, and the keylogger then captures the freshly typed password. cmd13 can inject arbitrary script into exchange or wallet sites, for example to swap a recipient address.
6. Indicators of Compromise
6.1 Network
| Type | Indicator | Role |
|---|---|---|
| Domain | check02id.com | C2 shared by backdoor and extension (cross-confirmed via DNS query logs) |
| IP | 83.136.210.180 | Resolution of check02id.com |
| Port | TCP 5202 | cloudsync beacon (every 60 s) |
| Port | TCP 5078 | Extension HTTPS /update (cookies, keylog) |
| Port | TCP 8443 | Extension HTTPS /update (screenshots, tasks) and wss:///realtime |
6.2 File hashes (SHA-256)
| File | SHA-256 |
|---|---|
cloudsync | 4a8059ae03301e8b0397c0c26f8b5d01fb1cb05c2563e1c2f538e11c74d37c3b |
.authds | 7f2e8e4432d80194aadca7f051e0f243ecf727af4a95bb4fd7af34490e27ea0b |
google.chrome.diagnostics | 7a0ee74dcdb2d30ef63884e2505799d7f95e670b628a5504f0f292424da37c3d |
com.google.chrome.diagnostics.json | 2e76e387b1f6a4412ce6840bf1221a1d7de4df619c78b35a4106b9e36dc2fcf4 |
extension background.js | 764b5681720001dc9af9da4d7aa948abf2bd458336e0bd8ccb1b2d6fcb1d66f0 |
extension content-script1.js | cac1539fe2e8aa9d2db9928a384554839ae6d597ec61ef01b1089e976035a586 |
extension content-script2.js | 530e7a28e79c8fc8d1fd651066de29c6926ec187da3d5d132c87539daa32e879 |
.apple.auth | 1b5dc3dda3c4f3b26bb9d19f731b646a794feb095af5fb382f8896c473a8fd7d |
.com.apple.better.env | d62e7d144cfb2ad761661ec2befcd2aa09ed335faafc279cd51db3a0f4af8551 |
com.safari.sync.service.plist | c189e4a9c69b7f07ce9533646f5bcaac58876da05f11795572a53fabbcb6e758 |
com.apple.google.auth.plist | 5d97e4a0e8da6cff7d85b986d1de71e992bb977119580757d45650ddba527758 |
6.3 Host paths and identifiers
/Library/LaunchDaemons/com.safari.sync.service.plist
~/Library/LaunchAgents/com.apple.google.auth.plist
~/Library/CloudSync/cloudsync
~/Library/Identification/.verify
~/Library/Staging/
~/Library/Application Scripts/ammad.Mac-Password-Popup/
~/Library/Application Support/Authorization/auth.db
/Users/Shared/.authds
/Users/Shared/.apple.auth
/Users/Shared/.com.apple.better.env
~/Library/Application Support/Google/Chrome/NativeMessagingHosts/google.chrome.diagnostics
~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.google.chrome.diagnostics.json
Chrome extension ID: ppconlkbhfnachephglhgbhdgeapgjoj (name "Google Doc Sheets Offline", v1.97.1)
Hard-coded extension token prefix: jfweibd234HFIDhfiwef…
data.js fields: cuid, cprofile, cbrowser, cserverUrl, cuserName, chostName, cwsServerUrl (unique per victim)
7. MITRE ATT&CK Mapping
| Tactic | Technique | Observation |
|---|---|---|
| Initial Access | T1566.003 Spearphishing via Service | Telegram meeting invite |
| Execution | T1204.002 User Execution: Malicious File | Victim runs “update” |
| Credential Access | T1056.002 GUI Input Capture | Mac-Password-Popup |
| Privilege Escalation | T1548.003 Sudo and Sudo Caching | Captured password used to write root files |
| Persistence | T1543.004 Launch Daemon | com.safari.sync.service |
| Persistence | T1543.001 Launch Agent | com.apple.google.auth |
| Persistence | T1176 Browser Extensions | Fake Google Docs Offline |
| Defense Evasion | T1036.005 Masquerading | Apple/Safari/Google-style names |
| Defense Evasion | T1564.001 Hidden Files | /Users/Shared/.authds etc. |
| Defense Evasion | T1070.006 Timestomp | Forged extension file and install times |
| Defense Evasion | T1027 Obfuscated Files | Encrypted configs, packed binaries |
| Credential Access | T1539 Steal Web Session Cookie | All cookies every 30 s |
| Collection | T1056.001 Keylogging | content-script1 |
| Collection | T1115 Clipboard Data | copy/paste capture |
| Collection | T1113 Screen Capture | captureVisibleTab every 6 s |
| Discovery | T1217 Browser Information Discovery | History upload |
| Command and Control | T1071.001 Web Protocols | HTTPS / WebSocket |
| Command and Control | T1571 Non-Standard Port | 5078 / 5202 / 8443 |
| Execution | T1059.004 Unix Shell | Remote commands via Native Host |
| Exfiltration | T1041 Exfiltration over C2 Channel | /update uploads |
| Lateral / Impact | T1550.004 Web Session Cookie (account takeover) | Telegram hijacked |
8. Response Actions (UML State Diagram)
stateDiagram-v2
[*] --> Detection
Detection --> Analysis: Suspicious LaunchDaemon/Agent found
Analysis --> Containment1: cloudsync confirmed running as root
Containment1 --> Eradication1: cleanup_malware.sh (user sudo)
Eradication1 --> Review1: No residual processes / launch items
Review1 --> Containment2: Unsigned Native Host + fake extension, live C2 session
Containment2 --> Eradication2: Chrome closed, extension quarantined from 4 profiles
Eradication2 --> Block: check02id.com sink-holed in /etc/hosts
Block --> Review2: Root-level deep check (BTM/cron/sudoers/TCC)
Review2 --> Review3: App signature integrity, injection, scripts, logs, IoC sweep
Review3 --> Pending: Credential rotation, wallet migration, reinstall
Pending --> [*]
| Step | Action | Result |
|---|---|---|
| 1 | Killed cloudsync (PID 543); booted out LaunchDaemon/Agent | ✅ |
| 2 | Samples archived in an encrypted zip for analysis | ✅ |
| 3 | Deleted 12 malicious files/directories | ✅ |
| 4 | Closed Chrome; extension and Native Host moved to quarantine | ✅ C2 sessions dropped |
| 5 | /etc/hosts: 0.0.0.0 check02id.com, www.check02id.com | ✅ Resolves to 0.0.0.0 |
9. Verification Scope and Results
| Area | Result |
|---|---|
| LaunchAgents / LaunchDaemons / Login Items / BTM database | ✅ Only verified legitimate software |
| crontab (user / root), at, periodic, emond | ✅ None |
Shell rc files, /etc/hosts, PAM, sudoers | ✅ Unmodified |
| Authorization plug-ins, DirectoryServices plug-ins, kernel / system extensions | ✅ No third-party items |
| Login hooks, Folder Actions, Automator | ✅ None |
| DYLD injection, launchd environment | ✅ None |
| Accounts (hidden, admin group), SSH, Remote Login | ✅ Normal; SSH off |
| Unsigned Mach-O since April 2026 (whole disk) | ✅ Malicious ones removed; remainder are Apple system files |
| Signature integrity of all applications | ✅ No tampering; Telegram / Chrome / Zoom vendor-signed and notarised |
| DNS, proxy, VPN, trusted root certificates | ✅ Normal |
| TCC (Full Disk Access, Accessibility, Input Monitoring) | ✅ No unexpected grants; Chrome already held Screen Recording permission, which the extension abused |
| Safari extensions, third-party app extensions | ✅ Nothing malicious |
| Unified log IoC activity | ✅ None after cleanup |
| Whole-disk IoC hash / string sweep | ⏳ Still running when this report was written; results to follow |
Residual item (low risk): the extension’s registration entries remain in Secure Preferences of all four Chrome profiles. Its code has been removed, so it cannot run. Confirm at chrome://extensions and click Remove if it is listed.
10. Impact Assessment
| Asset | Risk | Notes |
|---|---|---|
| macOS login password | Compromised | Captured by fake dialog |
| All Chrome web sessions (since 2026-05-25) | Compromised | Cookies exfiltrated every 30 s |
| Telegram | Taken over | Most likely via Telegram Web localStorage / session theft |
| Gmail / Google account | High | Cookies, keylogging |
| Browser crypto-wallet extensions | High | Keylogger captures unlock password; screenshots may expose seed phrase; script injection possible |
| Online banking | High | Keystrokes, screenshots, cookies |
| Local documents | Medium–High | Root backdoor had full read access; remote shell |
| macOS Keychain | Medium–High | Attacker holds the login password, which unlocks it |
11. Recommendations
Immediate (within 24 h, from a separate, clean device)
- Google account: Security → “Sign out of all other devices”, change password, enable passkeys or a hardware security key.
- Telegram: Settings → Devices → “Terminate all other sessions”; set a 2-Step Verification password; check the login email.
- Crypto: create a wallet with a brand-new seed phrase on a clean device and move all funds; revoke token approvals on old addresses.
- Banking, exchanges, email, cloud services: sign out all sessions → change password → review API keys and withdrawal whitelists.
- Change the macOS login password and the Apple ID password.
Short term (within 1 week)
- Back up documents only (not applications or
~/Library), erase the disk and reinstall macOS. - Do not restore Chrome extensions from the old profile; reinstall only from the Chrome Web Store.
- Report to local law enforcement and the national CERT, providing this report and the quarantined samples.
Long term
- Join meetings from chat invitations only through the official app; never install “SDKs”, plug-ins or “audio fixes”.
- Treat any system password prompt you did not trigger yourself as hostile.
- Keep crypto assets in a hardware wallet; never type a seed phrase into a computer.
- Periodically review
chrome://extensionsfor anything not from the Web Store.
12. Attribution Assessment
| Observation | Comparison with public BlueNoroff “GhostCall” reporting |
|---|---|
| Fake Zoom/Teams meeting via Telegram | Consistent |
| Fake system password dialog | Consistent |
| LaunchDaemon/Agent masquerading as Apple/Google | Consistent |
| Targeting of crypto holders | Consistent |
| Browser extension stealing cookies and screenshots | Consistent with related operations |
Conclusion: strong technique overlap, medium confidence. No reverse engineering of the samples or threat-intelligence platform correlation was performed; this is not a formal attribution.
Appendix A: Sample Availability
Samples are held in an encrypted archive. Security researchers and law enforcement may request them privately from the publisher of this report.
⚠️ The samples are live malware. Do not extract or run them outside an isolated analysis environment.