Skip to content

security: the analytics ObjectQL execute face answers a row-level read scope it cannot run with INVALID_FILTER / 400 whose message echoes the policy's field name and comparands — the disclosure #5367 closed for the native / echo faces #19995

Closed

Description

@objectstack-fleet

Ruled: 5852158605 · letter C · 2026-09-27T03:03Z
Blocked-by: #20157

Filing gate ① — a product defect with a named site and a measurement (class b: a declared contract, the #5367 ruling recorded in read-scope-sql.ts's header, not held on a sibling face).

The contract

The #5367 ruling, recorded in packages/services/service-analytics/src/read-scope-sql.ts's header: a read-scope refusal is deliberately ⛔ never a 4xx. A 400 echoes its message verbatim and hands the caller 「the FIELD NAMES AND COMPARANDS OF THE RLS POLICY — the one document a tenant must not be able to read out of an error body」. The native-SQL and echo faces hold this: they return READ_SCOPE_COMPILE_FAILED / 500 with the message withheld.

The defect

The ObjectQL execute face composes the same read scope into the engine's where (ObjectQLStrategy.withReadScope → ObjectQL.aggregate). A scope carrying a shape the shared comparand face refuses, such as a list in an equality slot, comes back as the engine's INVALID_FILTER / 400. Its message names the policy field and quotes the comparand values, for example a resolved membership set. So one scope gets two envelopes across the analytics faces, and the 400 one is the disclosure #5367 closed.

Measured (the #19975 dev, a one-time probe on ae7a35a63b; ⛔ not re-run by this seat)

Direction

The ObjectQL execute face refuses a read scope it cannot run with the same withheld envelope as the other faces (READ_SCOPE_COMPILE_FAILED / 500, fail-closed). ⛔ It does not echo the engine's 400.

  • Where the translation lives is the implementer's measured choice.
  • The first step is to reproduce the probe and measure the HTTP leg.

Governing text: the #5367 ruling (re-affirmed as #7598 Q2 = A), as recorded in read-scope-sql.ts.

Dedupe

One semantic issue search, open and closed, on the query 「analytics objectql strategy read scope INVALID_FILTER 400 error message discloses RLS policy field name and comparand values, withheld 500 on native face」. It returned 42 hits:

Dedupe words: analytics objectql read scope INVALID_FILTER 400 · withReadScope engine.aggregate policy field disclosure · read scope two envelopes native 500 objectql 400 · 5367 withhold objectql strategy


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions