Skip to content
Centriu
Centriu Axiom

Browser Preflight Header Allowlist Integrity Automation: A Test That Could Never Have Caught Its Own Bug

Centriu Axiom's own client sends a specific custom header identifying which organization the current request is about on every single request it makes. Confirmed directly from the fix's own text: that header was missing from a browser preflight allowlist shared by every backend Edge Function in the codebase — meaning any real browser attempting to call an affected function would be blocked entirely by the browser itself, before any server code ever ran. Every previous test of the same code path had used a server-to-server call, which never triggers a browser's preflight check at all, so the gap was invisible to exactly the kind of testing that had been done — only a genuine, browser-based end-to-end test could have found it, and did. The header was added to close the gap, but the same change also added a second, unrelated header out of caution. A same-morning audit, before deploy, found that second header was never actually sent by any browser at all and removed it, on the reasoning that a shared allowlist should only ever grow to include what a browser genuinely needs — with the underlying test rewritten to check that exact principle in both directions going forward.
Found by a real browser test
Minimal in both directions
System and access configuration screen
A test that never used a browser.

A test that never uses a browser cannot catch a bug only a browser enforces

Some rules exist entirely inside the browser itself, enforced before a request is even allowed to leave — a preflight check for cross-origin requests is exactly that kind of rule. A test that calls the same backend endpoint directly, server to server, never passes through a browser at all, and therefore never exercises that rule either way. It is not a weaker test of the same thing; it is a test of a genuinely different thing that happens to hit the same URL. Passing it proves the server-side code works. It proves nothing about whether a browser would ever have been allowed to reach that code in the first place.

How the underlying problem shows up before you fix it

A client sends a specific custom header on every request, and that header is not present in the server's own declared allowlist of headers a cross-origin browser request is permitted to include.

Every automated test exercising the affected endpoint calls it directly (server to server, or via a test harness that skips the browser entirely), so none of them ever trigger the specific browser mechanism the missing header would have failed.

The failure, when it does occur in a real browser, happens entirely client-side, before any request reaches the server at all — meaning server-side logs and monitoring show nothing unusual, because nothing on the server side was ever invoked.

A shared configuration (here, a header allowlist used by every backend endpoint in the codebase) means a single missing entry affects every consumer of that configuration at once, not just one feature.

The natural first fix — adding the missing entry — carries its own risk of over-correction: adding an extra, unnecessary entry "to be safe" expands the same shared configuration for every consumer, with no corresponding browser ever actually needing it.

How a header only a browser cares about went missing, and how the fix itself was audited before it shipped

Centriu Axiom's own client library injects a specific custom header, identifying which organization the current request concerns, into every single outgoing request. A separate, shared piece of configuration — used by every backend Edge Function across the codebase — declares which headers a cross-origin browser request is allowed to include; anything not on that list causes the browser itself to block the entire request during its preflight check, before the actual request, and any server code behind it, ever runs.

The header Axiom's client always sends was not on that shared list. Every request from a genuine browser running the Axiom interface against an affected Edge Function would have been blocked outright by the browser, silently, with the server never seeing it at all. Confirmed directly from the fix's own account of how this stayed undetected: every previous test of the same endpoints used a direct, server-to-server call — a call that never includes an `Origin` header and therefore never triggers a browser's cross-origin preflight mechanism in the first place. Those tests passed reliably, every time, because they were testing something the missing header genuinely had no effect on. Only a real, browser-based end-to-end test — credited directly in the fix's own text to a specific browser-testing round — could have exercised the actual mechanism that was broken, and did.

The missing header was added to the shared allowlist to close the gap. In the same change, made out of an abundance of caution, a second, different custom header was added alongside it — one used elsewhere in the system for labeling which internal surface originated a given call. A pre-deployment audit, conducted the same morning, traced who actually sends that second header and found the answer was: only one Edge Function calling a different Edge Function directly, server to server — a call that, like the tests before it, never carries an `Origin` header and therefore never goes through the browser's cross-origin check at all. No browser anywhere sends it. Keeping it on a shared allowlist used by every backend endpoint in the codebase would have meant every one of those endpoints carried a slightly larger attack surface for zero actual benefit to any real caller.

The second header was removed, and the underlying test was rewritten to check minimality in both directions at once: every header the client is confirmed to actually send must be on the allowlist (catching the original bug), and every header on the allowlist must have a real, identified sender (catching the over-correction). The project's own integration documentation, which had separately instructed a different consuming application to send the now-removed header, was corrected in the same pass — specifically because leaving that guidance in place would have led the next system integrating with Axiom directly into the identical class of defect.

What is actually built today

The shared browser preflight allowlist used by every backend Edge Function includes exactly the custom headers real browser clients are confirmed to send — no more, no less.

A dedicated test checks minimality in both directions: every header a real client sends must be permitted, and every permitted header must have an identified, genuine sender — closing both the original omission and the over-correction that briefly followed it.

The project's own integration guide was corrected to stop instructing a consuming application to send a header no browser actually needs to send.

A header used purely for server-to-server audit labeling (identifying which internal surface a delegated call originated from) is deliberately kept OFF the browser-facing preflight allowlist, since that mechanism plays no role in a call that never goes through a browser.

The finding and fix are traced to a genuine browser-based end-to-end test, distinct from — and a necessary complement to — the codebase's existing server-to-server test coverage of the same endpoints.

No change to what data is actually authorized or returned by any endpoint — this fix governs only whether a legitimate browser request is allowed to reach the server at all.

Every server-side test green, every real browser blocked (illustrative framing of the actual measured finding)

A team runs its full automated test suite against a newly deployed set of Edge Functions and sees every test pass, including tests that specifically exercise the endpoint the Axiom client depends on. A person then opens the actual Axiom interface in a real browser and finds every one of those same calls fails immediately, with no server-side error to investigate, because the browser itself refused to send the request in the first place. After the fix, the identical browser session succeeds, because the header the client always sends is now on the list the browser checks before allowing the request through.

What changes operationally

Centriu Axiom's browser client can now successfully reach every backend Edge Function using the shared preflight allowlist, with that allowlist containing exactly the headers real browsers are confirmed to send — verified by a test that checks both that nothing needed is missing and that nothing unnecessary was added.

When this is not the right fit

This automation governs a specific, internal browser-compatibility mechanism for Centriu Axiom's own Edge Functions — it does not change what data or actions any endpoint authorizes, does not affect server-to-server integrations (which never go through a browser's preflight check), and is not a general-purpose CORS configuration tool for a customer's own separately-hosted systems.

Testing the server vs. testing what a real browser actually does

A server-to-server test is faster to write, faster to run, and genuinely useful for validating everything that happens once a request has already been allowed through — but it structurally cannot validate the ONE mechanism, browser preflight enforcement, that exists specifically to run before that point. Relying on server-to-server coverage alone for an endpoint a real browser will call means the one class of bug this incident represents — a real, total, browser-only failure — has no test capable of catching it, no matter how comprehensive the rest of the suite becomes. A genuine browser-based test is the only kind that closes that specific gap.

Related systems

Main system: Centriu Axiom.

What it does NOT do

  • Does not change what data or actions any Axiom endpoint authorizes for an authenticated request — this fix governs only whether a legitimate browser request is permitted to reach the server in the first place.
  • Does not affect server-to-server calls between Edge Functions — those calls never carry an Origin header and were never subject to the browser preflight mechanism this fix addresses.
  • Does not add a general-purpose CORS configuration capability for a customer's own, separately-hosted integrations — the allowlist here is Centriu's own internal, shared configuration for its Edge Functions.
  • Does not keep every cautiously-added header on the shared allowlist by default — a header confirmed to have no genuine browser sender is deliberately excluded, even if some other internal mechanism uses it server-to-server.
  • Does not rely on server-to-server test coverage alone to validate browser-facing behavior going forward — a dedicated test now checks the actual header set a real client sends against what the allowlist permits, in both directions.
  • Does not retroactively identify which specific past browser sessions were blocked by the original gap — a team investigating a specific historical incident should review that session's own client-side error records directly.

Security and governance

Centriu Axiom's shared browser preflight allowlist, used by every backend Edge Function, is verified by a dedicated test to contain exactly the custom headers real browser clients are confirmed to send — with a header confirmed to have no browser sender deliberately excluded, even when it is used elsewhere for server-to-server audit labeling. Any personal data referenced remains subject to Brazil's LGPD (Law No. 13,709/2018). Full detail on access control lives at /governanca and /iso.

Pricing and contracting

Available by monthly subscription, with tiered plans. Values and terms come from the official pricing table at /precos (Centriu's central source — never restated here).

Frequently asked questions

What exactly blocked the browser requests?

A custom header Axiom's own client sends on every request was missing from the shared preflight allowlist every backend Edge Function uses — the browser itself refused to send the request at all once it detected the header wasn't permitted.

Why didn't existing tests catch this?

Every prior test called the affected endpoints server-to-server, which never sends an Origin header and therefore never triggers a browser's preflight check — the bug was invisible to that kind of test by construction, not through an oversight in how thoroughly it was run.

Did the fix introduce any new risk?

The same change briefly added a second, unrelated header to the shared allowlist out of caution; a same-morning pre-deploy audit found it had no genuine browser sender and removed it before it reached the affected systems in that state.

How does the fix prevent a similar gap from recurring?

A dedicated test now checks minimality in both directions — every header a real client sends must be allowed, and every allowed header must have a confirmed, real sender — and the project's own integration guide was corrected to stop recommending the unnecessary header.

Does this affect how server-to-server calls between Edge Functions work?

No — those calls never carry an Origin header and are not subject to the browser preflight mechanism this fix addresses at all.

What does Centriu Axiom cost?

It is sold by subscription with a published starting price — exact current values are on the central pricing page.

See how Centriu Axiom keeps its browser-facing endpoints reachable and its allowlist minimal

Reach our commercial team directly, or leave your details below — we'll follow up with guidance for your case.

Sources

  1. Centriu Axiom — public product page — Centriu, 2026-07-20 · link(primária)
  2. Centriu Axiom — public factsheet (API, JSON) — Centriu, 2026-07-21 · link
  3. Law No. 13,709/2018 — Brazil’s General Data Protection Law (LGPD) — Presidência da República (Brazil), 2018-08-14 · link

Last material update on .

By · AI-assisted production, with human review