I'm a cybersecurity engineer who builds security products end to end: threat model, backend, agent, UI, tests, and deployment. My main work is FreNiMiGuard, a vulnerability-management platform I designed and built at FreNiMi. Outside that, I land security fixes upstream in CISA, OWASP, and Prowler projects.
Each claim on this page links to something you can check, and I state the limits alongside the results.
| FreNiMiGuard Live vulnerability-management platform |
7 merged PRs CISA · OWASP · Prowler · more |
Evidence with limits Local checks are dated and qualified |
5 focused security tools With quick-start and CI links |
FreNiMiGuard matches every asset's installed software against CISA's Known Exploited Vulnerabilities catalog and NVD. It ranks what to fix first and sets an SLA deadline and owner. It can push the fix through an endpoint agent the customer installs, then checks that the fix actually landed. Closed findings become NIST 800-53 and OSCAL evidence.
Visit the live product · Read the evidence record
The dashboard on a test instance, 3 Oct 2026: live CISA KEV and NVD feeds matched against a sample inventory of third-party apps on five machines. Not customer data.
What I built: a FastAPI backend with SQLCipher storage, a React and TypeScript frontend, NVD and CISA KEV feed ingestion with CPE version-range matching, Intune, Jamf, and CSV inventory import, SAML SSO, role-based access, OSCAL SSP, SAR, and POA&M export, and Windows, Linux, and macOS endpoint agents with signed remote actions.
An agent that runs fixes on customer machines is a remote-code-execution channel, so I treated it as the main attack surface:
| Threat I designed against | Control in FreNiMiGuard |
|---|---|
| A compromised server pushes scripts to every endpoint | Remote actions are off by default. Each machine must also opt in at install, and the agent enforces that locally whatever the server says |
| One stolen admin session runs code on endpoints | By default, a second administrator must approve every remote action. Each request and decision goes into the audit trail |
| An approved action is replayed or sent to another machine | The signed envelope binds the action ID, the target agent, and an expiry. The agent rejects anything unsigned, expired, meant for another agent, or already run |
| A forged action from someone who is not the server | Actions are RSA-signed (SHA-256), and the agent pins the workspace public key at enrollment |
| A leaked API key | There are no admin API keys, only auditor and analyst roles. Keys and agent tokens are stored only as SHA-256 hashes and can expire |
| A leaked JWT secret also exposes cloud credentials | Integration credentials are encrypted with a separate key, so one leaked secret does not unlock the other |
| A finding is marked "patched" but never was | Findings close automatically only when a fresh inventory shows the installed version is outside NVD's affected range. Name-only matches go to an analyst |
The same controls in the product's endpoint settings.
Found and fixed in my own code:
- The read-only auditor role could write to assets, incidents, alerts, controls, compliance answers, and integrations. Every write path now requires the editor role.
python-josepulled in an unpatchedecdsadependency. I migrated JWT handling to PyJWT and kept the algorithm allow-list.- Every known-exploited Windows CVE matched every Windows machine by name, so a patched Windows 11 laptop showed EternalBlue. Windows findings are now checked against NVD's data for the machine's own release and build. On real CISA and NVD data, a machine reporting its full build got a definite answer on every Windows CVE checked: 47 ruled out, 14 confirmed. Insider and unknown builds are never ruled out.
- NVD records list the platform a product runs on beside the vulnerable product, and the feed counted both, so a GLib bug matched every Windows machine. Only vulnerable products and real version bounds count now. On the one live workstation, open findings fell from 1,457 to 462.
- Signing in logged false "Compliance update" audit events, because loading the checklist also saved it. Loading no longer writes anything.
- Pages were served without CSP, HSTS, or anti-framing headers, because an nginx block that sets its own headers silently drops the server-wide ones. Every response now carries them.
| Check | Result |
|---|---|
| Live service (4 Oct 2026) | GET https://frenimiguard.com/api/v1/health → HTTP 200, API and database online |
| Live security headers (4 Oct 2026) | CSP, HSTS, X-Frame-Options, and nosniff on pages, scripts, and API responses |
| Backend tests (6 Oct 2026) | 340 passed, 11 skipped |
| Frontend tests (6 Oct 2026) | 220 passed across 31 files |
| Dependency audits (4 Oct 2026 snapshot) | npm audit: 0 vulnerabilities · pip-audit: no known vulnerabilities in the Windows-installable dependency set |
FreNiMiGuard source is in a private repository, so these tests and audits can't be reproduced from this public profile. The newer test counts are from the private source checkout; they do not establish that those changes are deployed. No penetration test, authorization to operate, compliance certification, or customer deployment is claimed. The evidence record says exactly what these results do and don't prove.
| Project | Merged PR | What it fixed |
|---|---|---|
| CISA | ScubaGear #2237 | Made M365 DMARC policy discovery follow the RFC 9989 DNS tree walk. Policies on multi-label public suffixes such as .fed.us were being missed |
| TruFoundation | TruShell #55 | Fixed a shell-injection vulnerability in the OS fallback path |
| Prowler | Prowler #11098 | Added an M365 check for directory-sync object-takeover protection (co-authored) |
| OWASP | Agent Security Regression Harness #150 | Added scenario-directory and glob validation for repeatable agent-security tests |
| OWASP | cve-lite-cli #602 | Added risk context and next-action guidance to vulnerability reports |
| RamenDR | ramenctl #466 | Pinned GitHub Actions to commit SHAs to harden the supply chain |
| SecOps-NG | secops-ng-framework #281 | Added the EU Cyber Resilience Act Article 13(8) support-period mapping |
Only merged work is listed. These are contributions to the upstream projects, not claims that their fork mirrors are products I maintain. The Open Source Log keeps the dated record and separates merged work from PRs still under review.
These projects target different jobs: phishing triage, exposed-secret detection, event-level log signals, population-based anomaly triage, and CVE remediation guidance. Start with the linked quick-start in each repository before using it on real data.
| Tool | What it does | Output | Tests |
|---|---|---|---|
| PhishGuard | Scores URLs and email for phishing offline and explains each score | SARIF · Marketplace Action · Evidence | |
| Secrets Scanner | Finds exposed credentials in CI and redacts them in findings | JSON · SARIF · GitHub Action · Evidence | |
| Log Analyzer | Turns raw logs into MITRE ATT&CK-mapped investigation leads | SARIF · GitHub Action · Evidence | |
| BehaviorSense | Scores user and IP activity for explainable anomaly triage | Python · TypeScript · Evidence | |
| VulnGPT | Turns NVD CVE data into prioritized remediation guidance | NVD · CVSS · CWE · Evidence |
Choosing a tool: use Log Analyzer for explicit indicators in individual log events and BehaviorSense for unusual behavior compared with a population baseline. CVE Dashboard is a quick filtered NVD feed (evidence); VulnGPT turns an individual CVE into triage and remediation guidance.
FreNiMi Checkers is a separate product-engineering project: an American-checkers game with local AI, offline play, and an optional ranked multiplayer service. The browser demo is the fastest way to try it; server-backed matchmaking requires a separate deployment.
In a live launch-readiness review of the tutoring marketplace, I found transaction-integrity and access-control gaps. I implemented source fixes and added regression tests in LearnFolk PR #1. The changes are not deployed: the PR is open, a database migration is required, and production retesting remains a launch gate. I do not present these source fixes as a production resolution.
Credentials
| Credential | |
|---|---|
| CompTIA Security+ | Verify on Credly |
| AWS Academy Cloud Foundations | Cloud architecture, shared responsibility, and security fundamentals |
| BS, Information Technology | Systems, software, networking, and data |
| GitHub Marketplace publisher | Published and maintain a reusable security GitHub Action |
Writing
If you work on application security, vulnerability management, or detection engineering, I'd like to compare notes or build something useful together.
FreNiMiGuard · Website · LinkedIn · Writing · HackerOne · Email