Skip to content

Disclosure matching is path-insensitive, so a shared leaf name cannot be restricted #144

Description

@LKSNDRTMLKV

The limit

SectorAccessPolicy matches a field by its normalized leaf name, at any depth. That is deliberate — it closes casing and nesting drift, so a policy key disassemblyInstructions also covers a payload key disassembly_instructions.

The cost is that a leaf name carries one class across the whole document, and two things now push against that.

Within a schema. name and casNumber appear under both a restricted materialComposition and a public criticalRawMaterials. Restricting either name restricts both.

Across the document. A sector policy is applied to the whole passport, not just sectorData. So a schema restricting countryOfOrigin would also redact materials[].countryOfOrigin from the passport envelope — Annex III content that is public. Over-redaction is not the safe direction here: it makes the public passport omit content the regulation requires it to carry.

Current state

Enforcement is intact. Where a name is shared, the enclosing object carries the restriction and the filter removes the whole subtree before ever reaching the leaf. Nothing is under-disclosed today.

What is missing is expressiveness: a nested field whose leaf name is shared cannot be restricted on its own terms. A build-time gate now rejects a schema that declares one name in two classes, so the limit fails loudly rather than silently — but it is still a limit.

What would remove it

Path-aware matching. The policy map would key on a path suffix rather than a bare leaf, and filter_by_audience would pass the segment stack rather than a single key. Most-specific match wins, falling back to the bare leaf so existing policies keep working.

This is a change to the core of the disclosure layer, which is why it is an issue rather than a patch. Worth doing while there are no published passports whose disclosure sets it would alter.

Where this was found

Reviewing the disclosure layer after x-disclosure was made recursive. The committed AAS environment fixtures caught the envelope half — a first attempt restricted countryOfOrigin and the fixtures failed with the field vanishing from the public electronics projection. A schema-only check had not noticed.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestsecuritySecurity-relevant issue

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions