Skip to main content

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 from data.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, &lt;all_urls&gt;"]
            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)

  1. Google account: Security → “Sign out of all other devices”, change password, enable passkeys or a hardware security key.
  2. Telegram: Settings → Devices → “Terminate all other sessions”; set a 2-Step Verification password; check the login email.
  3. Crypto: create a wallet with a brand-new seed phrase on a clean device and move all funds; revoke token approvals on old addresses.
  4. Banking, exchanges, email, cloud services: sign out all sessions → change password → review API keys and withdrawal whitelists.
  5. Change the macOS login password and the Apple ID password.

Short term (within 1 week)

  1. Back up documents only (not applications or ~/Library), erase the disk and reinstall macOS.
  2. Do not restore Chrome extensions from the old profile; reinstall only from the Chrome Web Store.
  3. Report to local law enforcement and the national CERT, providing this report and the quarantined samples.

Long term

  1. Join meetings from chat invitations only through the official app; never install “SDKs”, plug-ins or “audio fixes”.
  2. Treat any system password prompt you did not trigger yourself as hostile.
  3. Keep crypto assets in a hardware wallet; never type a seed phrase into a computer.
  4. Periodically review chrome://extensions for 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.