Skip to content
Centriu
Centriu Loop

Campaign Configuration Authorization Automation: The App Said No; the Database Never Heard It

Centriu Loop's own application code already correctly declared that a sales-role account should not be able to configure the cashback rate — the settings screen explicitly checked for that specific permission before allowing anyone to save a change, and a sales-role account did not have it. The gap was entirely underneath that interface: the database tables actually holding a campaign's own cashback percentage and an organization's own default rate enforced no equivalent role check at all, relying only on confirming a caller belonged to the correct organization. Measured directly against a real database using the live production schema: an account from a different organization was correctly refused, exactly as expected — but a sales-role account from the SAME organization could insert an entirely new campaign offering, say, a 99% cashback rate, or directly overwrite the organization's own default rate from a modest 2% to that same 99%, with no error at all. Two separate gaps compounded into this one outcome: the underlying database platform automatically grants broad insert-and-update privileges to any new table by default, and nothing had ever narrowed that default down specifically for these two tables; and the only additional access rule actually written checked organization membership alone, with no further check on the caller's own role within it. The fix closes both layers together: the broad default insert-and-update privilege is revoked outright, and the write-permitting policies are removed entirely, so that configuring a campaign's own economic terms is now only possible through the platform's own trusted backend path — precisely the same route the application's own settings screen was already using through its properly-permission-checked interface. Unlike the separate, unrelated ledger-hardening work covering this pillar's other Loop pages, this specific fix deliberately does NOT make campaign or settings records append-only — a campaign and a default rate are, by design, meant to be edited by whoever holds the right role, so the actual defect here was always about WHO could write, never about whether writing itself should be possible at all.
App declared the rule
Database now enforces it too
Team reviewing campaign configuration settings
The app said no; the database never heard it.

An interface that checks permission is not the same as a database that enforces it

A settings screen that correctly checks a specific permission before allowing a save is doing exactly the right thing at exactly the layer it operates in — the interface itself. But an interface is only ever one PATH to the underlying data, and a rule enforced solely at that one path protects against every request that happens to go through it, while leaving completely open any request that reaches the same table by a different path. A rule that is genuinely meant to hold has to be enforced at the layer that is actually common to every possible path — the database itself — or it is, in a very real sense, not actually a rule about the DATA at all, only a rule about one particular DOORWAY into it.

How the underlying problem shows up before you fix it

An application's own interface correctly checks a specific role-based permission before allowing an action — creating the reasonable, but incomplete, impression that the underlying rule is genuinely enforced, when in fact only that one interface path checks it.

The database's own access rule for a table is scoped entirely to organization membership, with no further, role-specific restriction on WHICH members of that organization may write to it — testing only a CROSS-organization scenario would report this as fully secure, because that specific case genuinely is refused correctly.

A database platform's own automatic default privileges grant broad insert-and-update access to any newly created table, and nothing has been deliberately, explicitly narrowed down from that broad default for the specific tables where a narrower rule is actually intended.

A record type that legitimately IS meant to be editable by an authorized role (here, a marketing campaign, an organization's own default settings) can be mistaken for a candidate for the SAME strict, append-only treatment a genuinely immutable record (like a financial ledger) receives — when the real, correct fix is narrowing WHO can write, not eliminating writing itself.

Evidence of this class of gap can appear naturally as a side effect of an unrelated measurement — here, discovered while investigating a different table entirely, because the organization's own default cashback rate happened to be visible in the same query result.

How Centriu Loop closed the gap between what the interface checked and what the database allowed

Centriu Loop's own settings interface already correctly declared, and enforced at that layer, that a sales-role account could not configure the organization's own cashback rate — the application's own permission model explicitly marks that capability as unavailable to that role, and the settings screen checks it before allowing a save.

The database tables actually holding this configuration — one recording individual marketing campaigns, each with its own cashback percentage, and one holding an organization's own overall default settings — carried no equivalent role check of their own. Two compounding gaps produced this: first, the underlying database platform's own automatic default privileges had granted broad INSERT and UPDATE access to both tables the moment they were created, and an earlier hardening pass had revoked DELETE and TRUNCATE from them but stopped there, never reaching INSERT or UPDATE; second, the only additional access rule either table actually had checked solely whether a caller belonged to the correct organization, with no further distinction for which specific role that caller held within it.

Measured directly against a real database running the live production schema, with a genuine positive control built into the same test: an account from a DIFFERENT organization was correctly refused on every attempt, exactly as intended — but a sales-role account from the SAME organization could insert a brand-new campaign at an arbitrary rate, or directly overwrite the organization's own stored default rate, with no error returned at all. Testing only the cross-organization scenario, on its own, would have reported this configuration as completely secure.

The fix closes both layers at once, in a single migration applied alone to production and verified beforehand with a dry run confirming exactly one migration would be selected. The broad default INSERT and UPDATE privileges are revoked outright from both tables, and the write-permitting policies that had relied solely on organization membership are removed entirely. Configuring a campaign's own rate, or an organization's own default, is now only reachable through the platform's own trusted backend connection — precisely the same path the application's properly permission-checked settings interface was already using. The fix's own account is explicit that this does NOT mean copying the ledger's own append-only treatment onto these tables: a campaign and a default rate are, by design, records meant to be edited by whoever legitimately holds the right role — the actual defect here was always about WHO could write to them, never about whether writing itself should remain possible at all.

What is actually built today

Configuring a campaign's own cashback rate, or an organization's own default rate, is now reachable only through Centriu Loop's own trusted backend path — the same route the application's already permission-checked settings interface uses.

The broad default INSERT and UPDATE database privileges that had been automatically granted to both the campaign and organization-settings tables are revoked outright.

The write-permitting database policies that had relied solely on organization membership, with no role check, are removed entirely from both tables.

Ordinary READS of campaign and settings data remain fully available to legitimate members — the fix narrows who may WRITE, not who may see the existing configuration.

This fix deliberately does not make campaign or settings records append-only — that treatment is reserved for the ledger, a genuinely different kind of record covered on this pillar's own separate pages.

A sign on the door that the lock behind it never actually read (illustrative framing of the actual measured finding)

Before the fix, a settings screen correctly displayed no option for a sales-role account to change the cashback rate — the interface's own sign on the door said no. But the door itself, reached directly rather than through that interface, had no lock enforcing the same rule: the identical account could insert a new campaign at any rate it chose. After the fix, the door itself refuses that same account, regardless of which path is used to reach it.

What changes operationally

Centriu Loop's campaign and organization-settings configuration can now only be written through the platform's own trusted backend path, closing a gap where the application's interface correctly restricted a sales-role account from configuring the cashback rate while the underlying database enforced no equivalent rule — allowing the identical account to reach the same outcome by writing directly to the table.

When this is not the right fit

This automation covers specifically the role-based write authorization for Centriu Loop's own campaign and organization-settings configuration. It is a distinct mechanism from this pillar's separate pages on the cashback ledger's own append-only enforcement — those cover a genuinely different kind of record (a permanent financial history) that is deliberately NOT meant to be editable by anyone at all after the fact, unlike a campaign or a default rate, which is meant to remain editable by the right role.

Trusting the interface vs. enforcing the rule at the database itself

Relying on an application's own interface to enforce a role-based restriction is straightforward to build and works correctly for as long as every request genuinely goes through that one interface — a completely reasonable assumption until it isn't. Enforcing the identical rule at the database layer itself, by narrowing default privileges and requiring a role check rather than membership alone, is the only version of the two that holds regardless of which path a request actually takes to reach the data — and it is the specific gap testing only a cross-organization scenario would never have revealed on its own.

Related systems

Main system: Centriu Loop.

What it does NOT do

  • Does not restrict any ordinary, legitimate read of campaign or organization-settings data — the fix narrows who may WRITE to these two tables, not who may see the existing configuration.
  • Does not make campaign or settings records append-only, unlike Centriu Loop's separate ledger-hardening pages — a campaign and a default rate are, by design, meant to remain editable by whoever holds the right role.
  • Does not affect the application's own settings interface, which already correctly checked this exact permission before allowing a save — the fix closes the gap BELOW that interface, at the database itself.
  • Does not overlap with this pillar's separate wave 94 pages on Loop's cashback ledger — those cover a genuinely different set of tables and a genuinely different design intent (permanent, unchangeable history vs. editable configuration).
  • Does not extend this same fix to any other table in Centriu's other systems — this fix is specific to Loop's own campaign and organization-settings tables, confirmed to have carried this exact gap.

Security and governance

Centriu Loop's campaign and organization-settings configuration can now only be written through the platform's own trusted backend path, closing a gap where an application-level permission check had no equivalent enforcement at the database itself — verified with a genuine positive control confirming cross-organization access remained correctly refused throughout. 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

Could someone outside my organization have exploited this gap?

No — a cross-organization attempt was measured and confirmed refused throughout, both before and after this fix. The gap was specific to what a member of the SAME organization, without the right role, could do.

Why didn't the application's own interface already prevent this?

It did prevent it AT THE INTERFACE — a sales-role account genuinely could not see or use a save option for this setting there. The gap was that the same restriction was never enforced at the database itself, so the identical account could reach the same outcome by writing directly to the underlying table.

Why is the fix here different from the ledger append-only fix covered elsewhere on this site?

Because a campaign or a default settings record is, by design, meant to remain editable by whoever holds the right role — unlike a financial ledger entry, which is meant to never be edited or deleted once recorded. This fix corrects WHO may write; it does not, and should not, eliminate writing itself.

How was this actually confirmed as a real, exploitable gap rather than a theoretical one?

By running a direct, measured test against a real database using the live production schema, including a genuine positive control (a cross-organization attempt, confirmed correctly refused) alongside the actual finding (a same-organization, wrong-role account succeeding where it should not).

Does this affect how a legitimate admin or owner configures a campaign today?

No — the fix routes configuration through the platform's own trusted backend path, which is the same path the application's own properly permissioned interface was already using for a legitimate admin or owner.

What does Centriu Loop cost?

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

See how Centriu Loop enforces campaign permissions at the database itself

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

Sources

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

We value your privacy

We use cookies to improve your experience, analyze site usage and support our marketing. You can accept all cookies or manage your preferences. To learn more, see our Cookie Policy.