Back

Projects

Security and privacy tools I wrote. Almost all of them run on your own machine, with no account and no data leaving it. The code for each one is on GitHub.

escalint

Maps who can become administrator in an AWS account from a read-only snapshot.

Almost nobody holds AdministratorAccess directly in an AWS account. The risk lives in combinations: iam:PassRole with lambda:CreateFunction, or a role whose trust policy the user can rewrite. No single policy looks dangerous. escalint reads an IAM snapshot of one or more accounts, evaluates the policies the way AWS does and builds the graph of who can act as whom, all the way to admin.

  • 39 rules, each linked to the AWS docs and the pathfinding.cloud catalog
  • Shows the exact statement that allows each step and what CloudTrail would record
  • Computes the smallest set of changes that closes every path
  • Text, JSON and SARIF output for CI, plus a web interface with nine views
escalint Atlas: graph of IAM principals and AWS services with critical paths highlighted
Atlas showing 65 principals from a test account.

blindsight

Checks a Safe multisig transaction offline, before you sign it.

In February 2025 Bybit lost about US$1.5 billion because the Safe signers saw one transaction on screen and signed another: the hardware wallet only showed a hash. blindsight assumes the machine that prepared the transaction may be compromised. It runs on another computer, with no network, and recomputes everything from the raw parameters.

  • Computes the EIP-712 hashes with two independent implementations and prints none if they disagree
  • Decodes the call tree, including MultiSend and nested Safes
  • 20 detectors look for Safe takeover patterns, such as a delegatecall to an unknown contract
Terminal with blindsight verifying the Bybit attack transaction and flagging two critical findings
blindsight on the actual Bybit attack transaction.

oraclint

Static security linter for Chainlink node deployments.

Many Chainlink nodes are compromised through configuration, not exploits: an operator UI open to the internet, a database without TLS, a short keystore password, a forgotten development flag. oraclint does for Chainlink nodes what tfsec and checkov do for Terraform. It reads config.toml, secrets.toml, docker-compose, Kubernetes manifests and .env files and flags every problem before deployment, without touching the running node.

  • 35 rules checked against the node's v2.69.0 source code
  • Every finding comes with file, line and column, the reason and the fix
  • Never prints secrets; text, JSON and SARIF output for GitHub code scanning
oraclint output listing high-severity findings across config.toml, docker-compose.yml and Kubernetes manifests
17 findings on a deliberately insecure node.

oraclewatch

Monitors Chainlink Data Feeds from the side that consumes the price.

Chainlink operates the Data Feeds, but the risk of using a feed sits with the protocol that consumes the price. A lending market that values collateral with a feed assumes the price is fresh, within sane bounds, published while the L2 sequencer was up and close to the market. oraclewatch reads those feeds straight from the chain and pages someone when one of those assumptions breaks.

  • Continuously runs the checks auditors ask for on-chain, plus others that only make sense off-chain
  • Real incidents became rules: the 2022 LUNA/USD feed freeze triggers three of them
  • Covers Ethereum and L2s, with a ready-made Grafana dashboard
oraclewatch Grafana dashboard with status per network, L2 sequencer status and feed age
Grafana dashboard tracking ETH/USD across four networks.

PwnCortex

Keeps an entire pentest in one place, with AI that runs on your machine.

During a pentest, information ends up scattered across scan outputs, spreadsheets and notes. PwnCortex brings it into a single project: it imports the scans, draws the network topology as a graph, matches each host against CVEs from NVD and answers questions about the target with an LLM that receives the whole project context. It runs locally, with no telemetry and no cloud.

  • Imports Nmap XML, JSON, Markdown or plain text
  • Evidence notes move from draft to verified and flow into the executive report with CVSS scoring
  • 121-item OWASP WSTG checklist; local LLM through Ollama or through OpenRouter
PwnCortex network graph with a host selected and its open services in the side panel
Network graph built from an Nmap scan.

Aporte

Backtesting that simulates monthly contributions with portfolio rebalancing.

Most backtesters compute a single lump sum. People who invest every month do something else: they buy whichever asset fell below its target in the portfolio. Aporte simulates exactly that, with monthly, biweekly or weekly contributions and automatic rebalancing, and shows what the portfolio would really have returned.

  • Free historical data for Brazilian and US stocks, BDRs, crypto and ETFs
  • Compares against IBOV, S&P 500, CDI and IPCA + 6%, with optional dividend reinvestment
  • Self-hosted: your financial data stays on your machine, and a Redis cache answers in under 50 ms
Aporte simulation screen with projected net worth, portfolio curve and risk metrics
BTC and ETH simulation with monthly contributions since 2020.

OCI SecOps

Offensive security labs and AppSec pipelines on Oracle Cloud, inside Always Free.

Oracle Cloud's Always Free tier offers up to 4 ARM OCPUs and 24 GB of RAM at no cost, enough for a security lab. OCI SecOps provisions, audits and hardens those instances and prepares them for offensive security (bug bounty, pentest) or defensive work (SAST, DAST and SCA pipelines).

  • Six topologies, from one machine with the full allowance to a four-node cluster
  • Enforces the Always Free ceilings locally, because on a Pay As You Go account going over them is billed
  • Queries the region's real quota through the API when it is lower than documented

no-distraction

A productivity app that works offline and sends nothing to any server.

Calendar, tasks, notes, pomodoro, hydration and meals on a single screen. It is a minimal personal app that runs entirely in the browser: no account, server, cloud or telemetry. To switch machines, you export a .json file.

  • Installable as a PWA on phone and desktop, works offline
  • Timestamp-based pomodoro that keeps counting when the tab goes to sleep
  • Independent Svelte 5 modules that only talk through a typed event bus
no-distraction screen with today's tasks, a 25-minute pomodoro and the calendar
Tasks, pomodoro and calendar on the same screen.

KeyGuardian

Mobile password vault built in Flutter, with a master key.

A mobile password vault built in Flutter with Firebase. On top of the login, opening the vault requires a master key created by the user, and credentials are stored encrypted.

  • Sign in, sign up and password recovery with Firebase Auth
  • List, details and editing of saved credentials
  • Password generator with configurable length, numbers and special characters
Three KeyGuardian screens: welcome, list of saved credentials and editing a credential
Welcome screen, credential list and password change.

WG-Auto

A WireGuard VPN installed and configured with a single script.

Setting up a WireGuard VPN by hand means generating keys, writing configs, enabling IP forwarding and adding firewall rules, on the server and on every client. WG-Auto does all of it with one script for the server and another for the client.

  • Generates keys and configuration files for server and client
  • Enables IP forwarding and applies NAT rules with iptables
  • Validates the server IP, port and public key before configuring the client

Fast-Enum

Subdomain enumeration and web crawling in a single command.

Recon on a domain usually means chaining several tools by hand. Fast-Enum runs that sequence in a single execution: it discovers subdomains, removes duplicates, tests which ones are live and collects their URLs.

  • Enumeration with assetfinder, subfinder and findomain
  • Deduplicates with anew and checks live subdomains with httpx
  • Collects historical URLs with waybackurls

Basic-Enum-Tools

Sets up a recon machine by installing the enumeration tools in one go.

Setting up a recon machine from scratch takes time: installing Go and Python, dependencies and dozens of tools. Basic-Enum-Tools does it in one script, with the most used tools for subdomain enumeration, resolution, crawling, fuzzing and automation.

  • Subdomains: assetfinder, subfinder, amass and findomain
  • Resolution and crawling: httpx, dnsx, gowitness, waybackurls and gau
  • Directory fuzzing: gobuster and ffuf