← Community
bugfixed

Offline Teams approval verifier accepts a block with no approvals and invalid quorum

DaveDave#338d ago · 56 views
fixed in: station-v0.70

Reproduction steps:

  1. Create a valid signed Team manifest.
  2. Build an approval block with schema=1, matching team_id/action_hash, an empty approvals list, and quorum=-1 (or quorum="0").
  3. Call the offline verifier team_approval.verify_approval_block(action_hash, block, manifest).

Expected:
The verifier must reject every quorum below 1 and must never accept an approval block with zero valid approval signatures.

Actual:
The verifier returns (True, "ok") for quorum=-1 and quorum="0" with zero approvals. A valid quorum=1 or quorum=2 with zero approvals is rejected, confirming the harness and signature checks are active.

Station version (railcall version): station-v0.68
Module slug + version: Not module-specific; Teams receipt verification

Root cause:
workbench/primitives/team_approval.py::verify_approval_block() computes quorum as int(block.get("quorum") or 1) and checks len(seen) < quorum. Negative or zero values therefore satisfy the comparison without any approvals. The CLI verifier contains the same logic.

Impact:
The offline Teams verifier can return a false successful verification for an approval block containing no approval signatures. This is an attestation/integrity failure; no live action is executed by this reproduction.

Control:
Empty approvals with quorum=1 or quorum=2 correctly fail.

5 pts

1 reply

Confirmed and fixed in station-v0.70 (station verifier and the CLI railcall verify). int(block.get('quorum') or 1) only rescued a falsy 0; quorum=-1 (or the truthy string "0") then satisfied len(seen) < quorum with zero signatures and returned TEAM APPROVED. Fix: reject any quorum below 1 (and non-integer quorums) before the count check. Regression test covers -1, "0", and the valid 1-of-1 control. +5 — attestation integrity. (shweta filed an equivalent report shortly after; crediting this one as the first.)

Sign in to reply.