C
Constella Intelligence | Office of the CTO
Infostealer Exposure Report

A Potential Binance Employee's Mac Was Infected Seconds After a Fake Homebrew Ad

On 24/03/2026, seven months before the $6.34 billion theft, the Mac's browser reached a page reported that day as a fake Homebrew installer through a Google ad, and a stealer was running 16 seconds later. Binance says its compromised Wallet DevOps engineer downloaded a tampered Homebrew after a web search, in June. This log does not match the chain Binance has disclosed, but it exposes enough to matter.

#Infostealers #MacSync #Malvertising #FakeHomebrew #Okta #Binance
A note on this report

Binance is named because the incident and its initial findings are public. The data comes from Constella Intelligence. The potential employee is anonymized: email, username, name, IPs, serial numbers, tokens and passwords are masked, and third-party organizations are described generically. Every statement comes from the log or from a cited public source, and each piece of evidence is labeled with its basis. Raw excerpts are verbatim apart from the redactions; cookie expiry dates are nominal, as a server may have invalidated a session earlier.

01Executive Summary

The log belongs to a potential Binance employee and was captured seven months before the 29/10/2026 theft.

16 s
from the Google ad click to the start of the stealer's AppleScript, on the Mac's UTC+8 clock
232
days since the log was captured, to November 11, 2026
57
Binance-linked credentials, reaching 14 toolsfdg[.]net data-platform hosts
Did a Mac run a fake Homebrew?

The potential employee's browser reached macdev[.]slab[.]com from a Google ad at 22:47:36 UTC on 24/03/2026. That same day, Homebrew's GitHub received a report of a sponsored page on that domain offering a fake "install brew" command. The stealer's AppleScript started 16 seconds after the click and was the frontmost app when the capture finished, at 29 seconds (Mac clock at UTC+8, the time zone its browser recorded). The command itself is not recorded.

The log does not match Binance's Engineer A. Binance dates that infection to June 2026 and places the engineer in Wallet DevOps; this log is from March and holds no wallet or Wallet DevOps systems.

Corporate account[redacted]@binance.com
DeviceMacBook Air M3, macOS 15.5
Capture24/03/2026 22:48:05 UTC
Days since capture232 (to November 11, 2026)
ExposureCritical

The exposure is critical. The Okta password is a variant of the Mac login password, from a family used in 334 of 545 saved credentials. The log holds credentials for 14 toolsfdg[.]net data-platform hosts (Kibana, Airflow, Kafka, Zeppelin, Git) and passwords for 15 other corporate email accounts.

There is no evidence that this log was used in the attack.

02The Binance Incident

What Binance has disclosed, quoted from its initial report and cross-checked with The Hacker News and SafeDep

On 29/10/2026 an attacker moved about USD 6.34 billion out of Binance's hot wallets through its internal wallet-signing service (Binance's figure; press reports range from USD 6.3 to 6.43 billion). Binance's initial report, published on 03/11/2026, cites FBI information that North Korea (DPRK) is responsible, and describes a chain that starts on engineers' laptops.

1

June 2026 · Engineer A, Wallet DevOps

"Downloaded a tampered Homebrew installation in order to install a popular AI coding tool", "after searching for it on a search engine". Binance "detected the anomaly, replaced the device, and rotated all related credentials".

2

September 2026 · Engineer B

Approached on a job platform by someone "posing as a Project Director". The interview assignment replaced a development-tool component (pyenv under /opt/homebrew, i.e. a Mac, per SafeDep).

3

20/10/2026 · Internal AI tool

From Engineer B's computer the attacker "used an internal AI tool" to take control of Engineers A and C, and found that A "had a container deployment permission token".

4

29/10/2026, 17:15–19:56 UTC · Container and signing service

The attacker logged onto Engineer C's computer, deployed a container with the stolen credentials and used the signing service to move funds outside the normal withdrawal flow (20:05–23:56 UTC, per SafeDep).

The potential employee's Mac was infected three months before Engineer A Attack chain disclosed by Binance and capture date of the log, 2026 MarAprMayJunJulAugSepOctNov LOG ANALYZED CHAIN DISCLOSED BY BINANCE 24 Mar Jun Sep 20 Oct 29 Oct Potential employee · fake Homebrew ad Eng. A · tampered Homebrew Eng. B · fake job interview Internal AI tool abused Container + signing: theft exact date month only 29 Oct: USD 6.34 bn moved out of hot wallets
Figure 1. The log predates the whole chain Binance disclosed: it was captured three months before Engineer A's infection and seven months before the theft.

This incident may predate the one Binance has disclosed, or it may simply be unrelated to it. This research is for educational purposes only. The chain above comes from Binance's statement.

03Data Analyzed

The data comes from Constella Intelligence: one infostealer log from a potential Binance employee's MacBook Air

SourceConstella Intelligence
Malware familyMatches MacSync's documented artifacts (/tmp/sync<digits> staging folder, zsh → osascript chain, per Huntress); the log does not name the family
Capture time25/03/2026 06:48:05, Mac local time, which is 24/03/2026 22:48:05 UTC at UTC+8, the time zone the browser recorded
Unique credentials532 (149 distinct passwords, 365 services)
Cookies865 (655 nominally valid at capture; 57 nominally valid as of November 4, 2026)
Google OAuth tokens3
OtherKeychain (19 items, including "Chrome Safe Storage"), 3 iCloud entries and the Mac login password
Data integrity

The cybercriminals signed 14 cookie values and 4 Keychain values with references to the channels where they published the data, which makes the log harder to analyze. None of the evidence below relies on those values.

04Evidence: From a Fake Homebrew Ad to the Stealer

[redacted]@binance.com · MacBook Air · captured 24/03/2026

A potential Binance employee whose saved credentials reach data-platform tools on toolsfdg[.]net. The browser reached a fake Homebrew page from a Google ad, and a stealer was running 16 seconds later. Exposure critical: predictable Okta credentials, 14 data-platform hosts and passwords for 15 other corporate email accounts, 232 days after capture.

532
unique saved credentials, across 365 services
865
browser cookies, 655 of them valid at capture
3
Google OAuth refresh tokens
19
decrypted Keychain items, including "Chrome Safe Storage"

Device

OSmacOS 15.5 (24F74), released 12/05/2025; 15.6 had been available since 29/07/2025
HardwareMacBook Air M3 (Mac15,12), 16 GB
Hostname / user[redacted] / [redacted]
Time zoneAsia/Taipei (UTC+8), as recorded by the browser in its cookies (Evidence 3)
IP / countryIP of the Mac in the log: 25.140.x.x. The country is not recorded
Running at captureFamily Sharing processes, Minecraft, Spotify, LINE and ChatGPT; Activation Lock on. Two Chrome profiles: Default (the @binance.com credentials) and Profile 1
Security agentsNone in the process list (no EDR, MDM, VPN or Okta Verify process)

Timeline of the infection

The log holds no browsing history, but several cookies carry their own timestamps. They line up with a public report filed the same day.

Time (UTC, 24/03/2026)EventEvidence
22:46:58–22:47:26Session on chatgpt.com_ga_9SHBSK2D9J, cf_clearance, _dd_s (created=1774392446419)
22:47:35Lands on Slab from a Google ad_gcl_gs (i1774392455); Slab analytics session 1774392455, session number 1
22:47:36Google click ID stored; macdev.slab.com loaded_gcl_aw = GCL.1774392456.Cj0KCQ…; two GCLB cookies for macdev.slab.com
22:47:37Last analytics hit on Slab_ga_0N8WXQ2HKZ (t1774392457)
22:47:52 *osascript starts (frontmost app at capture)lsappinfo: 49) "osascript" … (in front)
22:48:05 *Stealer collecting datash -c ps ax > '/tmp/sync1014991/SystemInfo/processes.txt'

* The log records these two times on the Mac's clock (06:47:52 and 06:48:05 on 25/03) without an offset. They are converted at UTC+8, the time zone the browser recorded in its cookies (Evidence 3).

Evidence 1 · Arrival from a Google ad

# Chrome · Profile 1 · Cookies (domain, flag, path, secure, expiry µs since 1601, name, value) .slab.com FALSE / FALSE 13426642055000000 _gcl_gs 2.1.k1$i1774392455$u[REDACTED] .slab.com FALSE / FALSE 13426642056000000 _gcl_aw GCL.1774392456.Cj0KCQ[REDACTED click ID] .slab.com FALSE / FALSE 13453426055842243 _ga GA1.1.[REDACTED].1774392456 .slab.com FALSE / FALSE 13453426057606557 _ga_0N8WXQ2HKZ GS2.1.s1774392455$o1$g1$t1774392457$j58$l0$h0 macdev.slab.com FALSE /posts FALSE 13418869654320269 GCLB "Ab1qXC[REDACTED]" macdev.slab.com FALSE / FALSE 13418869656589974 GCLB "Ab1qXC[REDACTED]"
CookieValue fieldDecodes to (UTC)Expiry (UTC)
_gcl_gs$i177439245524/03/2026 22:47:3522/06/2026 22:47:35
_gcl_awGCL.1774392456.<click ID>24/03/2026 22:47:3622/06/2026 22:47:36
_ga….177439245624/03/2026 22:47:3628/04/2027 22:47:35
_ga_0N8WXQ2HKZs1774392455 · o1 · t1774392457Session 22:47:35 · session number 1 · last hit 22:47:3728/04/2027 22:47:37
GCLB ×2Load-balancer token (value altered)—24/03/2026 23:47:34 and 23:47:36
  • The ad click. Google states that after someone clicks an ad, auto-tagging adds a "Google Click Identifier" (GCLID) to the landing URL, and its conversion linker stores that ad-click information in _gcl_aw and _gcl_gs. Here _gcl_aw holds a click ID on slab.com. Confirmed in the log
  • The time. The numbers inside _gcl_gs, _gcl_aw and the Slab analytics cookies decode to 22:47:35–37 UTC, and the _gcl_aw expiry is exactly 90 days later. o1 is the session number: the first Slab session recorded in that profile.
  • The page. The two GCLB load-balancer cookies show the browser loaded macdev.slab.com, one of them under the path /posts. Their values contain an inserted string, so only their name, path and expiry are used.
  • Last activity. Of the cookie timestamps that record activity, the Slab ones are the latest in the log; the ones before them are ChatGPT's (22:46:58–22:47:26).

Evidence 2 · The site serving the fake Homebrew command

The log contains the domain, not the page, its full URL or the command. Those are documented in a public report filed on Homebrew's GitHub the same day.

Homebrew GitHub discussion #6770, 24 March 2026, reporting a sponsored fake Homebrew page on macdev.slab.com
Figure 2. Homebrew discussion #6770, "Homebrew malicious script", posted and answered on 24/03/2026. Captured on 04/11/2026 without GitHub's stylesheets; the text is unchanged. Source: github.com/orgs/Homebrew/discussions/6770.
  • The report. Brew-related searches showed this page first "because it is sponsored". The page offered a command to install brew whose base64 string led to a loader at pilautfile[.]com/debug/loader.sh. Confirmed by a public source
  • The URL. The reported path, /public/posts/insta-іі-with-termina-і-g40n4aau, reads "install with terminal" with the Cyrillic letter і (U+0456) in place of each "l", a homoglyph trick.
  • The match. Same day, same domain and an ad click: the cookies in Evidence 1 match the report on all three points.

Evidence 3 · The Mac's time zone

The log records the stealer's times on the Mac's clock without an offset. The browser recorded its time zone in several cookies.

# Chrome · Profile 1 · Cookies (domain, name, value; consent cookies show only their date field) .youtube.com PREF f6=40000080&f7=100&tz=Asia.Taipei&repeat=NONE&f4=4000000 .spotify.com OptanonConsent …datestamp=Sat+Jun+21+2025+15%3A29%3A34+GMT%2B0800+(Taipei+Standard+Time)&… .binance.com OptanonConsent …datestamp=Mon+Apr+28+2025+14%3A16%3A22+GMT%2B0800+(Taipei+Standard+Time)&… .coursera.org OptanonConsent …datestamp=Mon+Apr+28+2025+13%3A49%3A04+GMT%2B0800+(Taipei+Standard+Time)&… .sketchfab.com OptanonConsent …datestamp=Tue+Apr+08+2025+15%3A15%3A55+GMT%2B0800+(Taipei+Standard+Time)&… # Chrome · Default · Cookies .binance.com OptanonConsent …datestamp=Tue+Mar+25+2025+13%3A15%3A56+GMT%2B0800+(Taipei+Standard+Time)&… .coinmarketcap.com OptanonConsent …datestamp=Thu+Mar+13+2025+08%3A19%3A15+GMT%2B0800+(Taipei+Standard+Time)&…
  • Recorded time zone. YouTube's preference cookie stores tz=Asia.Taipei, and six consent cookies in both Chrome profiles store the browser's local time as GMT+0800 (Taipei Standard Time), between March and June 2025. Confirmed in the log
  • No larger offset fits. At UTC+9, the capture (06:48:05 on 25/03) would fall at 21:48:05 UTC, before the ad cookies were created at 22:47:36 UTC.
  • Result. At UTC+8, osascript started at 22:47:52 UTC and the capture finished at 22:48:05 UTC, 16 and 29 seconds after the ad click.

Evidence 4 · The stealer run, 16 seconds after landing

# SystemInfo/Apps.txt (lsappinfo) 1) "loginwindow" ASN:0x0-0x26b26b: checkin time = 2026/03/24 10:59:15 ( 19 hours, 48 minutes, 49.8062 seconds ago ) 49) "osascript" ASN:0x0-0x2d62d6: (in front) checkin time = 14 seconds ago, 2026/03/25 06:47:52 ( 13.6612 seconds ago ) # SystemInfo/Processes.txt (ps ax, last entries) 58741 ?? SN 0:00.00 zsh 58743 ?? SN 0:00.55 osascript … 58865 ?? SN 0:00.00 sh -c ps ax > '/tmp/sync1014991/SystemInfo/processes.txt' 58866 ?? RN 0:00.00 ps ax
  • Capture time. 10:59:15 plus 19 h 48 min 49.8 s gives 06:48:05 on 25/03 on the Mac's clock, i.e. 22:48:05 UTC. osascript registered 13.7 s earlier and was the frontmost application.
  • The chain. zsh → osascript, with no terminal attached (??) and at low priority (SN), wrote its process list into /tmp/sync1014991/. Huntress documents MacSync's "randomised staging root, /tmp/sync<random>/" and a zsh loader that pipes the payload "straight into osascript". Matches Huntress's MacSync documentation
  • Absences. No Terminal, iTerm or Homebrew (/opt/homebrew) process was running at capture, and the string "brew" appears nowhere in the log.

Evidence 5 · The Mac password and the Keychain

# Information.txt IP: 25.140.x.x Username: [REDACTED] Password: [REDACTED, 8 characters] System Version: macOS 15.5 (24F74) Computer Name: [REDACTED] Time since boot: 31 days, 19 hours, 30 minutes Activation Lock Status: Enabled
  • The stealer obtained the 8-character login password. Huntress documents that MacSync asks for it through a fake dialog titled "System Preferences" and checks each attempt with dscl . authonly. Password: confirmed in the log
  • The log includes 19 decrypted Keychain items, among them "Chrome Safe Storage", the key that unlocks Chrome's saved passwords and cookies.

Evidence status

StatementStatusBasis
The browser reached macdev[.]slab[.]com from a Google adConfirmed in the logClick ID in _gcl_aw on slab.com at 22:47:36 UTC, first Slab session
That page served a fake "install brew" commandConfirmed by a public sourceHomebrew discussion #6770, same day and domain
The Mac's clock was on UTC+8Confirmed in the logtz=Asia.Taipei and GMT+0800 in the browser's cookies; no larger offset fits the ad cookies
A stealer was running 16 s after the clickConfirmed in the logosascript started at 22:47:52 UTC and was in front at capture; staging at 22:48:05 UTC
Its artifacts match MacSyncMatches public documentation/tmp/sync<digits>/ staging and zsh → osascript chain, as documented by Huntress
The Mac login password was stolenConfirmed in the logPassword field in Information.txt
The exact URL path or command runNot in the logNo browser or shell history; Terminal was not running at capture
The potential employee is Binance's Engineer ANot supportedBinance dates Engineer A's infection to June 2026, in Wallet DevOps; no wallet systems in the log
Conclusion

The Mac's browser reached a page reported that day as a fake Homebrew installer, from a Google ad, and a stealer with MacSync's artifacts was running 16 seconds later. Binance's statement, The Hacker News and SafeDep describe Engineer A's infection as a tampered Homebrew download after a web search; none of them mentions an ad. This log is from 24/03/2026, three months before the June date Binance gives for Engineer A.

05What the Log Exposes

57 Binance-linked credentials, a predictable password family and passwords for 15 other corporate email accounts

Binance corporate credentials

57 unique credentials (61 records), almost all in the Default Chrome profile. toolsfdg[.]net hosts the data-platform tools these @binance.com accounts log into (Kibana, Airflow, Zeppelin, Jupyter, Hue, Git). Several account names and paths refer to Risk, such as risk/ds_sagemaker_model.

ServiceCredsAccountsPassword
binance.okta.com (production SSO)2Own, plus a full-width-character variant of the username (3 records)8 chars, 4 classes. Variant of the Mac password
binance.oktapreview.com (Okta preview tenant)2Own8 chars, variants of the same family
Google (@binance.com account)1OwnSame family
Kibana (2 production clusters and 1 private IP on port 5601)20Own, 14 other corporate emails and 3 non-personalOwn: 16 chars, also used on the internal Git and the NAS. Other corporate emails: 11 different 15-char passwords and 3 with the same 9-letter password
Airflow (5 instances)6A read-only account and 2 other non-personal accountsRead-only: 8 chars, the same on 4 instances; the others: 16 and 20 chars
Kafka Manager1Read-only16 chars, 4 classes
Zeppelin (2 ports)44 non-personal accounts3 share one 18-char password
Jupyter, BDP portal, Hue and Nebula Graph5Own, admin and rootHue: 5 chars, in 5 records; Nebula: 6 chars
Internal Git (git.toolsfdg[.]net)1Own16 chars, the Kibana one
QA Elasticsearch (internal AWS load balancer, Tokyo)1Another corporate email8 chars, 1 class
Service on port 3377 (localhost, a private IP and a public IP)3Non-personal (5 records)The same 9-letter password
DataVisor (anti-fraud vendor, 3 consoles)3Own2 from the Mac password family
SuccessFactors and Bupa Global (HR and health insurance)2OwnMac password family
SaaS with the corporate email (JetBrains, Figma with a misspelt domain, applyweb)4OwnFigma: Mac password family
Synology NAS (QuickConnect) with @binance.com identities2Own and another corporate emailOwn: the Kibana one

Profile 1 also holds 5 AWS console credentials, three of them for one IAM user, on regional and global sign-in pages. The Default profile's autofill holds 2 AWS account IDs and an account alias. Binance should confirm whether these accounts are its own.

Exposed services by category

Unique credentials per category, 532 in total. Full list in the appendix.

Consumer, health and other services
83 creds
Binance – corporate
57 creds
Private IP addresses
56 creds
Third-party organizations (bank, media platform, hospital)
50 creds
Collaboration and productivity
41 creds
Training and jobs
37 creds
Cloud and infrastructure
32 creds
Social media and messaging
26 creds
Identity and email
25 creds
Development and code
23 creds
DDNS, NAS and router services
23 creds
AI tools and courses
19 creds
Seven smaller categories
60 creds

Seven smaller categories: servers by public IP (15), banking, payments and tax (12), crypto and web3 (10), other (10), Binance customer account (6), leisure, gaming and adult content (6) and the macOS login password (1).

Password hygiene

61%
of 545 records follow a clear password pattern
31
variants of that family, including the four Okta passwords
221
records with the exact Mac login password
20
records with the same 9-letter lower-case password

The four Okta passwords follow the same pattern as the Mac password. The 9-letter lower-case password appears in 20 records: three other corporate Kibana accounts, the port-3377 service (5), a TP-Link DDNS address (4), local and private addresses (6) and dstool.net (2).

Cookies, tokens, autofill and Keychain

Corporate

No corporate sessions

No cookies for binance.okta.com, toolsfdg[.]net or AWS. The 20 binance.com cookies belong to the public website and have expired.

Google

3 OAuth refresh tokens

One in the Default profile, two in Profile 1. SID cookies nominally expire on 28/04/2027 (Profile 1) and 26/09/2026 (Default). Refresh tokens and SID cookies give access to the Google account until they are revoked or expire.

Autofill

Internal tooling in the autofill

1,882 entries, with 12 @binance.com addresses (own plus 11 others), 2 AWS account IDs and 45 IP addresses, two of them in private 10.x ranges. URLs for Jira (project RM), Confluence, Spade batch jobs and a Risk Airflow repository on the internal Git.

Keychain

19 decrypted items

Including "Chrome Safe Storage". The 3 iCloud entries belong to the Mac password family. Other sessions: Grammarly (grauth, to 24/03/2027); ChatGPT and GitHub without a session token.

Third-party exposure

Profile 1 holds logins to three other organizations: a bank, a media platform and a hospital. It also holds credentials for a Synology NAS reachable through QuickConnect, 3 DDNS names and router admin pages.

06Could This Log Have Originated the Attack?

Nothing in it links it to the chain Binance disclosed, but it deserves a review with Binance

The log holds none of the artifacts Binance describes (a container-deployment token or an AI-tool session) and no wallet or Wallet DevOps systems. It shares the technique Binance describes for Engineer A, a tampered Homebrew; here the page was reached through a Google ad.

MacYes (MacBook Air M3)
Tampered HomebrewGoogle ad → page reported as a fake Homebrew installer → stealer with MacSync's artifacts 16 s later
Date against Binance's chain24/03/2026, three months before the Engineer A case
Systems in the logData-platform tools (Kibana, Airflow, Kafka, Zeppelin, Git)
Wallet or Wallet DevOps systemsNone
Okta credential in cleartextYes, a variant of the Mac password
Okta session capturedNo
Container-deployment tokenNo
AI toolsYes: 19 credentials for AI services and a ChatGPT session in the log
Colleague data15 other corporate email accounts with passwords
Data-platform hosts14 toolsfdg[.]net hosts with credentials, 17 named in the log
Sessions still nominally validGoogle, Grammarly
Captured before the attackYes (24/03/2026)
Days since capture (to November 11, 2026)232
Fit with the disclosed chainPartial: same technique, different date, no wallet systems
ExposureCritical
Reconnaissance

A directory and a map

The log holds 15 other corporate email accounts with passwords, and credentials for 14 of the 17 toolsfdg[.]net hosts it names.

Access

Credentials that may still work

It is not known whether Binance rotated them after March. Airflow and Zeppelin passwords repeat across instances and accounts, and the four Okta passwords share the Mac password's family.

Hunting

Search criteria for Engineer A

Binance dates Engineer A's infection to June 2026. The traces in this log (a Google-ad landing on a fake Homebrew page, /tmp/sync staging, binance.okta.com credentials) define what to search for in Constella Intelligence data.

07Appendix: Exposed Services Inventory

Services with a saved credential in the log, counted by category. Service names, usernames and passwords are not reproduced. A service can appear in two categories if it was used with both the corporate and a personal identity.

532 credentials across 365 services

CategoryServicesCredentials
Binance – corporate3257
Binance – customer account26
Third party: bank77
Third party: media platform3136
Third party: hospital57
Cloud and infrastructure2932
Development and code1423
AI1619
Crypto and web3810
Banking, payments and tax912
Identity and email1425
Collaboration and productivity3141
Social media and messaging1826
Training and jobs3337
Consumer, health and other services6883
DDNS, NAS and router services1223
Servers by public IP915
Leisure, gaming and adult content56
Private IP addresses2256
System (macOS)11
Other410

As of November 4, 2026, 57 cookies had nominal expiry dates in the future, across 7 domains: google.com (35), google.com.tw (9), youtube.com (4), chatgpt.com (4), slab.com (2), grammarly.com (2) and doubleclick.net (1). This is the November 4 snapshot, not a revalidation of session access on the publication date.