Skip to content
Centriu
Centriu Synapse

Internal Admin Panel Cross-Org Access Control Automation: A Revert Deleted the Guard and Left the Test File Explaining It

Centriu's own internal operator panel for its Synapse deployments lost three separate organization-scope protections when an unrelated code revert deleted them — along with their own dedicated tests — eight days after they had been found and fixed. The repository's own test-runner configuration file, left untouched by the revert, kept citing all three protections by name to explain an import path, so the codebase kept asserting a safeguard that no longer existed. The most serious of the three: the panel's own authentication check verified only that a person belonged to SOME organization with Synapse access, never checking WHICH organization — measured directly against the database, 8 team members held that access across 5 different organizations, and 7 of those 8 were outside the specific organization the panel actually operates on, meaning any of them could authenticate as an administrator and operate on a different organization's own Synapse configuration than the one they actually belonged to. All three protections were restored to their exact pre-revert state, including a fail-closed rule that refuses an operation outright when its organization context is missing, rather than silently defaulting to every organization at once.
Fail-closed, not fail-open
Restored verbatim, tests reattached
Internal operational settings and access-control screen
The revert deleted the guard and left the test file explaining it.

A revert removes code and the memory that it was ever there

A code revert is a normal, often correct engineering action — undoing a change that turned out to be wrong. The risk sits specifically at the boundary of what a revert actually touches: when the change being undone happened to sit in the same files as unrelated, valuable protections added afterward, reverting can silently take those protections with it, and nothing about the act of reverting itself distinguishes "undo the mistake" from "also erase the fix that came after it." The codebase is left describing a safeguard that used to be true.

How the underlying problem shows up before you fix it

An authentication check confirms a person belongs to SOME organization with the required module access, without separately confirming it is the SPECIFIC organization the operation is actually about to act on.

A data-access layer for two related resources filters one of them correctly by organization while the other, added earlier without the same column, has no filter applied to it at all.

An update or delete operation identifies its target purely by a record ID, with no accompanying check that the record actually belongs to the caller's own organization.

A configuration file elsewhere in the repository (a test runner's own setup, for instance) keeps citing and explaining a protection by name long after the protection itself has been deleted, because nothing forces the two to stay in sync.

A required database column has no default value and is enforced as mandatory, so a code change that stops populating it does not silently succeed with an empty value — it fails outright, but with a generic database error that does not explain WHY records have stopped being created.

How the gap was found, and how three findings traced back to one revert

The starting point was a specific inconsistency: the internal admin panel's own test-runner configuration file still explained why a particular import alias mattered, and cited three specific test files by name to make that point — but all three files, and the protections they tested, were gone. Tracing why led to one earlier code revert, dated 18 days before this investigation, that had undone an unrelated change and, in doing so, deleted three genuinely separate organization-scope protections that had been found and fixed eight days before THAT revert happened, each with its own dedicated test file explicitly written, per its own header comment, "so this never goes missing again."

The first and most serious of the three: the function resolving who is allowed to authenticate as an administrator on the panel checked only that the requesting person belonged to some organization with Synapse module access — with no check at all for WHICH organization. Because the panel itself always operates on one specific, configured organization, this meant any team member with Synapse access anywhere across every one of Centriu's client organizations could authenticate successfully and then operate on a DIFFERENT organization's Synapse configuration than their own. Measured directly against the database: 8 people held that access, spread across 5 different organizations, and 7 of the 8 were outside the one organization the panel actually operates on. A separate, correctly-scoped check existed one step later in the same authentication flow — the working pattern was present in the very same file, just not applied at the earlier step where it mattered.

The second finding lived in the panel's own data-access layer: the function listing a client's saved AI provider keys read and decrypted keys belonging to EVERY organization in the database, with no organization filter applied at all, and the functions to update or delete a specific key acted purely by the key's own ID, with no check that the ID actually belonged to the caller's organization. A third, separately-scoped table used by the same panel had always filtered correctly by organization — meaning the correct pattern existed elsewhere in the same codebase, and simply had not been applied to these two.

The third finding was a direct, functional consequence of the same revert: the functions that create a new AI agent or a new provider key through the panel had stopped writing an organization identifier to the new record at all — and in production, that column is required with no default value. Every attempt to register a new agent or key through the panel had been failing outright with a database constraint error since the revert, which is the specific, confirmed reason the underlying table held zero rows. All three protections were restored to their exact pre-revert implementation — not rewritten from scratch — including a deliberate fail-closed design: when the organization context an operation needs is missing entirely, the operation is refused outright, rather than silently defaulting to operating across every organization at once.

What is actually built today

The internal admin panel's authentication check verifies a person belongs to the SPECIFIC organization the panel is configured to operate on — not merely some organization with the right module access.

The panel's provider-key listing, update, and delete functions all filter and check by the caller's own organization — closing a gap where keys from every organization in the database were previously readable and alterable by ID alone.

Creating a new AI agent or provider key through the panel writes the organization identifier correctly, restoring a path that had been failing outright since an earlier revert.

The restored authentication check is fail-closed: when the organization context an operation needs is missing, the operation is refused outright, never silently defaulted to "every organization."

All three restored protections carry their own dedicated automated tests, matching the count the repository's own test-runner configuration had continued to describe even while the protections themselves were absent.

The full admin-panel test suite passes cleanly at the count the project's own configuration documents, with a clean typecheck alongside it.

Access proven at the wrong address (illustrative framing of the actual measured finding)

A team member with Synapse access at one client organization opens the internal admin panel. Before the fix, the authentication check confirms only that this person has Synapse access SOMEWHERE — passes them through as an administrator — and the panel proceeds to operate on a different, specific organization's own Synapse configuration, one the person has no actual relationship to. After the fix, the same authentication check additionally confirms the person's access belongs to the exact organization the panel is about to act on, and refuses the session outright when it does not match — the same outcome a working, correctly-scoped check one step further down the same file had already been producing for a narrower case.

What changes operationally

Centriu's own internal admin panel for Synapse can no longer authenticate a team member as an administrator for an organization other than the one their own access actually belongs to, and can no longer expose, alter, or delete another organization's provider keys by ID alone — closing a gap that had been silently reopened by an unrelated revert and left undetected for 18 days.

When this is not the right fit

This automation governs organization-scope access control inside Centriu's OWN internal operator tooling for Synapse — it is not a customer-facing feature, and it does not change how a customer organization's own end users or AI agents authenticate within their own Synapse deployment.

A revert that removes code vs. one that also removes the memory of why the code existed

The failure here was not that a revert happened — reverting a mistaken change is often exactly the right call. The failure was that nothing separated the mistake being undone from the unrelated protections that happened to live in the same files, and nothing flagged that the repository's own test configuration kept describing safeguards that had quietly stopped existing. Centriu's fix restores the specific protections verbatim and reattaches their own dedicated tests, closing the gap between what the codebase claimed to guarantee and what it actually did.

Related systems

Main system: Centriu Synapse.

What it does NOT do

  • Does not affect how a customer organization's own end users or AI agents authenticate within their own Synapse deployment — this fix is scoped entirely to Centriu's own internal operator panel.
  • Does not retroactively audit or reverse any action taken through the panel during the 18-day window this gap was open — the fix closes the access path going forward.
  • Does not add new capabilities to the admin panel — it restores three specific protections to their exact pre-revert state.
  • Does not prevent a future, unrelated revert from repeating the same class of mistake on its own — the fix closes this specific instance, found by tracing a stale reference in the test configuration.
  • Does not change the underlying database schema beyond what the restored organization-identifier writes require — the fix is a restoration of application-level logic, not a new migration.
  • Does not claim every possible access-control gap in Centriu's internal tooling has been found — this fix closes the three specific, measured protections found missing in this audit.

Security and governance

The panel's authentication path now verifies the caller's organization membership against the specific organization the panel operates on before granting administrator access, and every provider-key operation checks organization ownership independently of the record's own ID. Any business or client 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

How was a deleted protection discovered 18 days later?

The repository's own test-runner configuration file, untouched by the revert, kept citing three specific test files by name to explain an import path — tracing why those files no longer existed led directly back to the earlier revert.

Who could authenticate as an administrator on the panel before the fix?

Any of 8 team members holding Synapse module access anywhere across 5 different client organizations — 7 of whom belonged to a DIFFERENT organization than the one the panel actually operates on.

Were provider keys from other organizations actually exposed?

The listing function read and decrypted keys from every organization with no filter, and update/delete acted by ID alone with no organization check — a real, structural exposure, not merely theoretical.

Why had zero AI agents been created through the panel since the revert?

The creation functions had stopped writing a required organization-identifier column with no default value in production — every insert failed outright with a database constraint error.

Does this affect customers' own Synapse deployments?

No — this fix is scoped entirely to Centriu's own internal operator panel used to manage Synapse deployments; it does not change authentication for a customer organization's own end users or AI agents.

What does Centriu Synapse cost?

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

See how Centriu Synapse keeps its own internal tooling scoped by organization

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

Sources

  1. Centriu Synapse — public product page — Centriu, 2026-07-20 · link(primária)
  2. Centriu Synapse — 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