Repository navigation
feat: add E21 blind evaluation pool for amandeavor (fixes #368) - #401
Conversation
…#368) Signed-off-by: Aman Awasthi <amandeavor@gmail.com>
There was a problem hiding this comment.
Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota.
An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.
|
Scored as submitted, against
Both regex engines decide every call the same. By category on server: CI/CD changes 0 of 4, defense evasion 4 of 13, credential access 5 of 11, exfiltration 4 of 7, privilege escalation 6 of 7, persistence 3 of 3. What the server pack misses, grouped:
I'll open rule issues for the first four groups, as #359 to #361 came from the first pool. This PR adds only the pool file, so it can merge once CI passes. Thanks for writing it blind. |
|
Merged, thanks. The score above stays this pool's blind score. |
…rust; E21 scores the blind pools (#505) * Go verifier: name checks as the Python verifier does, check its schema copies, ask a v2 bundle for -trust (#501) - A failure names the reference verifier's check it fails (signatures, run chain, inclusion, chain intact, ...), and the warnings Go already computes carry Python's names (keys, trust root, run completeness, run boundaries, run tail witnessed). The v2 verifier stops at its first failure, so the parity gate requires its one failed check to be among Python's. - KNOWN_GAPS keeps only the checks Go doesn't perform: the gate compares verdicts only there, and the README lists them and says why. - TestEmbeddedSchemasAreTheRepositorys fails when an embedded event schema differs from tracekit/schema/. - The CLI reads the format from the manifest: a v2 bundle without -trust is told it needs one, not that its v1 manifest is invalid. * E21: score the blind pools as a blind set (#501) eval/e21_blind/*.jsonl (#357, #401) are scored in e21_policy_robustness.py, together and pool by pool, recorded in eval/results/ and reported in docs/evaluation.md. The output says these aren't blind scores: rules written after each pool was published came from its misses. The blind score at each pool's publication is computed from git history (each merge commit's own scorer and packs) and matches what the pull requests reported. The blind false-positive rates join the no-regression gates; the recorded latency block is kept as it was. * Go verifier and E21: review fixes (#501) - The parity gate exempts each verdict-only check only with the status Python gives it: Go's failures of head matches a witness checkpoint are compared. - The text report prints a reason no failed check line gives, such as v1 findings reached after a failed check. - A v1 manifest whose file list is not an object fails bundle structure, as in Python. - The Go README says which unsupported evidence is exit 2 and which fails keys (exit 1), and how an invalid signer.pub differs from Python. - E21 scores each blind pool once; the latency text names the sets it times. * Go verifier: a v1 manifest without a file list fails files match manifest; wrap an E21 docstring line (#501) As in the Python verifier, a missing file list lists no file, so every file is unlisted; only a list that is not an object (null included) is bundle structure.
…#532) TK-C010 held Google's and Azure's audit-log deletes but let AWS's through. It now also holds aws cloudtrail stop-logging, delete-trail and put-event-selectors; guardduty delete-detector and disassociate-from-master-account (and its administrator-account successor); configservice stop-configuration-recorder and delete-configuration-recorder; securityhub disable-security-hub; and accessanalyzer delete-analyzer. The CLI names the services configservice and accessanalyzer, so those spellings are held, and so are the issue's config and access-analyzer. Describing, listing and starting them stays allowed. E17 gains 12 harmful and 9 benign cases (778 of 778 held, 1 false alarm in 843). On the second blind pool (#401) the default pack now stops 30 of 45, up from 28 (the two CloudTrail calls), with no new false positive; the strict pack 33, up from 31. E21's committed timing is kept. Fixes #403 Signed-off-by: WhitePepperLambSoup <251834947+WhitePepperLambSoup@users.noreply.github.com>
…052, TK-A053) (#582) * Policy: reading a Kubernetes or Vault secret waits for a person The second blind E21 pool read secrets through kubectl and Vault, and every pack let them through. Two coding-pack rules, next to TK-A035, hold them in the coding, dev, server and strict packs: - TK-A052: kubectl's or oc's get of a secret with an output that prints it (any -o or --output but name and wide, custom-columns and kyaml too, or a --template), oc extract of a secret, view-secret (kubectl-view-secret too) and create token. The type is read in any case, with its API group, as TYPE/NAME, in a list (cm,secrets) or as a later TYPE/NAME, with the output before or after it. -n and --namespace take their value, so a namespace named secrets isn't a type, and a type ends at a space, / or , (a role named secret-reader isn't one). - TK-A053: vault's (or OpenBao's bao) kv get, read, unwrap, print token, token create and a write to auth/token/create. Listing secret names, describing one, kv list and metadata, token lookup and status stay allowed. Both rules are anchored and bounded: 11 ms at worst on 64 KiB on the fallback engine. The TK-A035 limits row no longer lists vault and kubectl as unheld (and names 1Password's op, not "1password"); a new row names what TK-A052 and TK-A053 don't read. E17 gains 22 harmful and 15 benign cases (800 of 800 held, 1 false alarm in 858). E21: the second blind pool (#401) is held 34 of 45 by default (was 30) and 37 strict (was 33), the four calls of the issue; the held-out pool 254 of 420 (60.5%, was 252) and 285 strict (was 284); no new false positive in any set. E21's committed machine and latency are kept. The coding pack's version is 2026.10-v2-57, which other open pull requests also take; it may need renumbering at merge. Finishes #549 by shrinivas-sn: their rules' cases and look-alikes, with the review's false-alarm fixes, other spellings, docs and evals. Fixes #404 Co-authored-by: shrinivas-sn <shrinusn2001@gmail.com> Signed-off-by: LoopGlitch26 <53336715+LoopGlitch26@users.noreply.github.com> * Limits: TK-A052 doesn't read an output option far after the type, a type ninth in a list, or kubectl through an MCP tool Co-authored-by: shrinivas-sn <shrinusn2001@gmail.com> Signed-off-by: LoopGlitch26 <53336715+LoopGlitch26@users.noreply.github.com> --------- Signed-off-by: LoopGlitch26 <53336715+LoopGlitch26@users.noreply.github.com> Co-authored-by: shrinivas-sn <shrinusn2001@gmail.com>
|
Thanks again for contributing to Tracekit. A request: if you use a coding agent (Claude Code, Codex, Cursor, Gemini CLI or OpenCode), would you run Tracekit on it for a week and tell us how it went? After a week, |
What this adds
A new blind evaluation pool for E21 at
eval/e21_blind/amandeavor.jsonl: 90 tool calls (45 labelledharmfuland 45 labelledbenign), one JSON object per line, matching the shape ofeval/e21_heldout/corpus.jsonl.The harmful calls cover the ground specified in #368:
gh secret delete, removing branch protection and PR review requirements viagh api, deleting security workflows, capturing Actions OIDC tokens, and dumping runner environment secrets..env.production.The benign calls provide matching routine operations: read-only GitHub CLI commands (
gh secret list,gh workflow list,gh run view), read-only cloud IAM enumeration (aws iam list-users,gcloud iam service-accounts list,az role assignment list), read-only Kubernetes lookups (kubectl get secrets,kubectl auth can-i), Vault status queries, and routine git, terraform, and workflow commands.Blind statement
I wrote this pool without reading the rules: I have not read
tracekit/policy2/,tracekit/policy/, the policy packs,docs/policy-v2.md, the E3 or E17 corpora,eval/e21_blind/, or any rule ids. The only project material used was issue #368 itself and the field shape ofeval/e21_heldout/corpus.jsonlas the schema reference.Validation
All 90 rows parse as valid JSON objects carrying the heldout schema fields with matching types: 45 harmful rows with severity, techniques, and OWASP tags, and 45 benign rows.
Fixes #368