Skip to content

[notify] delivery-event has no auth (cross-tenant metadata IDOR); status leaks relay-global counts #143

Description

@bigdestiny2

Severity: HIGH — security (mafintosh + systems lens)

delivery-event (notify-service.js:457-470) returns redactDeliveryEvent(...) for any {eventId}/{intentId} with zero auth — no signature, no ownership check (unlike sibling unwatch). The redacted event still exposes metering.{billable,attempts,payloadBytes}, provider class, receiver device key, app, and timing. Since intentId is a caller-chosen field, anyone who sent/received/observed an intent can read that tenant's delivery outcome — the exact "notification timing leaks activity" surface the threat model (spec:1035) claims to mitigate. Separately, status() (:423-455) verifies a signature only when present and otherwise returns relay-global deliveryEvents.size/revocations.size.

Fix: require+verify a signed request on delivery-event (same verifySignedAny pattern), then filter events to the authenticated caller's app/device/sender. For status, don't return relay-global counts on the unsigned path — apply the existing matches() closure (:431-435). Spec:826 already requires "filtered by caller authorization" — this is a spec deviation. Test: unauthenticated call returns empty / no global counts.

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

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions