< Back to Feed // 24 APR 2026 // Maliq Barnard

CVE-2026-41431 — Zen Browser Shipped Without Update Signature Verification

The Zen Browser MAR updater shipped without signature verification enabled. A missing build variable meant the client accepted unsigned updates. Fixed in 5 days.

CVE: CVE-2026-41431 GHSA: GHSA-qpj9-m8jc-mw6q Affected: Zen Browser versions built without MAR_CHANNEL_ID Fixed: April 9, 2026 Credit: Maliq Barnard (FARPSEC)


The bug

Zen Browser uses Mozilla's MAR format for updates, same as Firefox. Updates get signed with a private key, the client checks the signature before applying them, and if it doesn't match, the update gets rejected.

Except the build configuration that turns on that check was missing. MAR_CHANNEL_ID — the variable that activates signature verification — wasn't set in Zen's build pipeline. The verification code is there in the binary. It just never ran.

So the updater would accept any MAR file, signed or not. An attacker in position to serve a modified update (compromised network, CDN, DNS) could push arbitrary code and the client would install it without question.

No evidence this was exploited. The update server wasn't compromised. But the client-side check that would catch a tampered update wasn't active.

How this happened

Zen is a fork of Firefox. Mozilla's MAR signing infrastructure exists and works. But MAR_CHANNEL_ID is a build-time environment variable, not something you get automatically by forking the repo. It has to be explicitly set.

Worse: the CI pipeline's path to signmar (the signing tool) was also broken. So CI wasn't producing signed MARs either. These two issues masked each other — if verification had been on, the unsigned updates would've been rejected immediately and the broken signing path would've been obvious.

The fix

Three PRs merged on April 9:

  1. MAR_CHANNEL_ID added to the build config, activating signature verification.
  2. SMAuthorizedClients Team ID hardened for the macOS updater service.
  3. CI signmar path fixed so the pipeline actually signs updates.

Five days from report to fix. Zen team moved fast.

Timeline

Date Event
April 4, 2026 Found during build config audit
April 4, 2026 Filed via GitHub Security Advisory (private)
April 9, 2026 Fix merged + hardening PRs merged
April 20, 2026 CVE-2026-41431 assigned
April 24, 2026 Advisory published
VIEWS: 37

Suggested Intelligence

Analyst Notes