Finding real bugs, and proving they're real

A security & correctness track record built on verifiable evidence — a published CVE, merged fixes, a stated evidence bar, and honest negatives.

GitHub: @tritsystem · every claim below links to the public artifact.

CVE-2026-103001published CVE in PyJWT · CVSS 6.5
35PRs merged into others' projects
16distinct open-source projects

Counts are live-verifiable: gh search prs --author tritsystem --merged. Open/filed work is labelled as such below — only merged PRs are counted as contributions.

→ Full breakdown: every merge, with its real diff, threat model, 13-layer placement, and rubric score

Across ML frameworks of every kind

Most of the merged work is in the machine-learning stack, spanning the layers where correctness and memory-safety bugs actually hide — from training infrastructure down to native kernels and up to serving/export.

Visionkornia ×9 · timm ×2 · MONAI ×2 · ultralytics
LLM / transformerstransformers · multimodal image processors
Neuromorphic / SNNsnntorch ×4 · spikingjelly ×3
Quantization / exportllm-compressor · NVIDIA Model-Optimizer
Training infraDeepSpeed — memory leak & NULL-deref in shared-memory init
Audiolibrosa — dtype preservation in spectral features

The recurring theme across these: the code runs, returns a tensor of the right shape, and the numbers are quietly wrong — dtype loss, finite-gradient failures at singular points, batch cross-contamination, cache staleness. Silent integrity bugs, which is the class that matters most for ML systems.

How I decide something is real

The hard part of security work isn't finding suspicious code — tools and AI do that fast, and are just as fast at being confidently wrong. The value is in calibration: knowing what you've actually proven. I grade every lead on a fixed ladder and never round up.

T0 a tool/scanner hit — a lead
T1 code read & reasoned through — a lead
T2 run in a hand-built harness — a lead, never filed as a finding
T3 reproduced through the real entry point — the minimum to call it a finding
T4 T3 + a fix that flips the repro red→green, project's own tests still pass
T5 T4 + variant analysis: the whole class closed, with a guard against regressions

Two rules sit underneath it: validate the instrument first (a sanitizer or oracle must fire on a planted bug and stay silent on clean code before I trust its silence), and match the tool to the bug class (AddressSanitizer misses an in-buffer uninitialized read; MemorySanitizer catches it).

Selected work, told in tier language

Silent claim-verification bypass in PyJWT CVE-2026-103001 · CVSS 6.5 · published

GHSA-gvp8-978c-rx2q · CWE-471 · credited reporter · PyJWT (tens of millions of downloads)

PyJWT.decode() mutated the caller's options dict in place, so a dict reused across calls could silently drop claim verification on the second use — a regression of a previously-fixed issue (#679). An authentication-library bug with no crash and no error: exactly the silent-integrity class. Reported through the private advisory channel, fixed upstream, CVE assigned and published, credit accepted.

Use-after-free & double-free in a config-management core T4 · merged

CFEngine · core#6358 · backported to two release branches

A missing return after a free let execution fall through into a read of the freed object, then a second free. Found by reading the control flow, reproduced, fixed with the one-line early return, and verified red→green.

Authorization-boundary hardening for org-scoped secrets merged

Woodpecker CI · woodpecker#7365

A secret query matched org membership on org_id alone without checking repo_id = 0. I stated the risk precisely — not exploitable on a normally-run instance, because no activation path yields the required state — and shipped the defensive fix with isolation tests. Saying exactly how far a bug does and doesn't reach is the job.

Memory-safety hardening in a UPnP daemon's native rule builders T4 · merged

miniUPnP · #922, #941, #942 · 5 merged in this project

Unchecked calloc()/malloc() results in netfilter rule construction, plus a netlink socket left out of sync on a cache-refresh error. Low-level C on LAN-reachable input, fixed and verified at the sites that run.

Silent GPU out-of-bounds in 4-bit quantization T4 · filed (open)

bitsandbytes · #2105, #2107

A floor-division under-allocated the packed buffer for wide quant-storage dtypes, so the GPU wrote one byte past the end — invisible, because the default dtype makes the formula exactly right and the allocator's padding absorbs the overflow until caching is disabled. I measured the blast radius (never more than 7 bytes; a neighbour tensor survived 800 trials) rather than assuming it, and filed public fixes per the project's own security guide, which classes this as correctness, not a vulnerability. Both still open — reported honestly as filed, not merged.

Finite gradients at a singular point merged

kornia · #4299 · 9 merged in this project

Numerical integrity treated as a correctness property: solve_cubic produced non-finite gradients at its acos boundary. Guarded both branches so the backward pass stays finite — the kind of silent wrong-answer bug that never crashes and never logs.

Unsafe deserialization → remote code execution coordinated disclosure in progress

ML framework · reported privately · CWE-502 · no CVE assigned yet

A neuromorphic library's public, documented model-loading API called torch.load(…, weights_only=False) on a caller-supplied path with no validation — loading any untrusted .pt file runs arbitrary code. Reported through the project's private security-advisory channel, currently in triage. Details, target, and identifiers withheld until the maintainer publishes. Found as an earlier static-only report that had never been executed; I ran the PoC against the real, unmodified function before reporting — a lead isn't a finding until it reproduces.

The part most portfolios leave out: a measured negative

In one audit pass I ran ~1,100 configurations of differential and invariant oracles across an ML stack — optimizers, metrics vs a reference implementation, adapter round-trips, kernel sanitizer sweeps, compiler-vs-eager, ODE solvers, quantization. Result: clean. One lead survived to T2 (a compiler reduction inexact on identical values) and I didn't file it, because it reproduces only in a harness and overlaps work already open upstream.

A well-measured "this isn't a bug," and a lead left unfiled because it didn't clear the bar, is principal-level judgment — and the honest counterweight to a list of wins. Negatives get reported the same way positives do.

Working with AI, and verifying it

I use AI assistance to find candidates fast, then re-derive every bug myself without the answer in front of me and prove it with a test that fails before the fix and passes after. The speed is the risk — the discipline is the point: you can't evaluate what you don't understand. Every fix above was human-reviewed before submission.