I work on the boring-but-important side of security: detection, evidence, and tooling that doesn't cry wolf. Most of my time goes into cyphron, a scanner built around one rule. If a finding can't be proven, it doesn't go in the report.
Outside of that I build network tools for small businesses (cafe Wi‑Fi is a jungle), write scrapers that keep working when the site fights back, and send fixes upstream to the open-source tools I use.
Open source contributions · 8 merged upstream
PRs I've sent to projects I depend on. The status column is live.
| Project | PR | Status |
|---|---|---|
| nuclei-templates | #17653 · stop dell-idrac9-detect matching Apple AirPlay receivers |
|
| Scrapling | #515 · fix a flaky Cloudflare readiness test on macOS / 3.10 | |
| nuclei-templates | #17669 · CVE-2026-119495 · Better Search: unauthenticated arbitrary post-type disclosure | |
| nuclei-templates | #17672 · CVE-2026-120597 · Welcart e-Commerce: unauthenticated reflected XSS | |
| nuclei-templates | #17675 · CVE-2026-120446 · madong-admin-saas: platform tenant disclosure | |
| nuclei-templates | #17676 · CVE-2026-120442 · ape-volo-admin: auth bypass via hardcoded JWT secret | |
| nuclei-templates | #17685 · CVE-2026-118523 · EventPrime: unauthenticated pending-post disclosure | |
| nuclei-templates | #17691 · CVE-2026-115574 · Zulip Server: custom profile field disclosure | |
| nuclei-templates | #17720 · CVE-2026-62850 · FreeScout maintenance-endpoint path disclosure | |
| nuclei-templates | #17719 · CVE-2026-123655 · Moodle H5P content file listing | |
| nuclei-templates | #17704 · CVE-2026-12122 · Kirki: symbol metadata disclosure | |
| nuclei-templates | #17703 · CVE-2026-120846 · Uncanny Automator: recipe disclosure | |
| nuclei-templates | #17686 · CVE-2026-118754 · Dolibarr: draft job-position disclosure | |
| nuclei-templates | #17682 · CVE-2026-112244 · Duplicator: full path disclosure | |
| nuclei-templates | #17673 · CVE-2026-119485 · Dokan: vendor-only product disclosure | |
| nuclei-templates | #17670 · CVE-2026-39743 · WCFM Membership: selection disclosure | |
| nuclei-templates | #17667 · FP fix · WSUS: verify SoapFormatter types before matching | |
| nuclei-templates | #17651 · CVE-2026-96654 · Plex Media Server detection (KEV) | |
| nuclei-templates | #17654 · fewer false positives in smb-default-login via a canary credential |
|
| advisory-database | #10908 · Mnestix: add upstream repo + fixed-release references | |
| advisory-database | #10923 · BTCPay Server: add upstream repo + fixed-release references | |
| advisory-database | #10929 · Parse Server: add upstream repo + fixed-release references | |
| PayloadsAllTheThings | #871 · podman alternative for local markdownlint validation | |
| OWASP CheatSheetSeries | #2911 · deduplicate OS command content (Injection Prevention) | |
| SecLists | #1353 · Travis CI [secure] env variable wordlist (1,400 names) |
|
| Scrapling | #513 · bound async all_headers() waits so they can't hang forever |
Earlier research · computer vision on dental imaging
Before security I worked on medical imaging. That's where I learned to distrust any metric I can't reproduce.
- Mandible segmentation with U‑Net (PyTorch)
- FPN with an EfficientNet‑B7 backbone (PyTorch)
- Periodontal disease classification with a CNN (TensorFlow / Keras)
Happy to collaborate on detection engineering, network security tooling, or scraping pipelines. The easiest way to reach me is an issue on cyphron, or just open a PR. I read them all.

