Skip to content

security(mesh): verify_record and verify_cert derive their CA anchor from different operator inputs — under-documented fail-closed footgun #106

Description

@vxfemboy

verify_record derives its CA set from self.roots (the root-node pubkey entries) while verify_cert/ingest_record use the separately-configured ca_public (bin/yipd/src/membership.rs:220 vs :240). These only agree if the operator also places the CA's Ed25519 key as a root entry (as every test fixture does). The natural reading of 'root set = bootstrap nodes' lists node keys — then verify_record fails closed and mesh registration/roaming silently never verifies. Fail-closed (availability, not a break) but no load-time check and no test can catch a divergence (fixtures make them equal). Fix: assert the CA key is among the roots at load; document the relationship.

See docs/2026-07-25-project-review-and-roadmap.md for the full review synthesis.

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

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions