Skip to main content

Keyhound

Detector de credenciais expostas em código, com cobertura para serviços brasileiros que ferramentas como gitleaks e trufflehog não reconhecem: Mercado Pago, Asaas, Pagar.me, Cielo, PagSeguro, chave Pix, certificado digital A1 e a chave service_role do Supabase.

Keyhound em funcionamento

Por que existe

Durante o desenvolvimento é comum colar a chave direto no arquivo para testar — e esquecer. O código vai para o repositório e a chave vai junto. Há robôs varrendo o GitHub atrás exatamente disso: o intervalo entre publicar e a chave ser usada por terceiros costuma ser de minutos.

Remover a chave do arquivo não resolve: ela continua no histórico do Git, recuperável por qualquer pessoa com acesso ao repositório.

Instalação

pip install keyhound

Requer Python 3.11 ou superior.

Uso

keyhound scan .                        # varre o diretório atual
keyhound scan ./src -m high            # só severidade alta ou acima
keyhound scan . -f json                # saída para pipeline
keyhound scan . --fail-on critical     # sai com código 1 se achar crítico

keyhound history .                     # varre todo o histórico do git
keyhound history . -n 100              # só os 100 commits mais recentes
keyhound history . -f json

O valor do segredo é sempre mascarado na saída — na tela, no JSON e em qualquer log.

Na integração contínua

keyhound scan . --fail-on critical

Código de saída 1 quando encontra algo no nível informado, 0 quando está limpo.

O que detecta

Globais — AWS, GitHub, Slack, chave privada PEM, JWT, string de conexão de banco, Google API, Stripe, senha e token em atribuição literal.

Brasileiros — Mercado Pago, Asaas, Pagar.me/Stone, MerchantKey da Cielo, token do PagSeguro/PagBank, service_role e chave secreta do Supabase, chave Pix aleatória (EVP) e senha de certificado A1.

A regra do service_role merece destaque: essa chave ignora todas as políticas de Row Level Security do Supabase. Vazada no frontend, expõe o banco inteiro. É visualmente idêntica à chave anon, que é pública e inofensiva — o Keyhound distingue as duas.

Reduzindo ruído

Ferramenta que grita demais é desinstalada. O Keyhound filtra em três camadas antes de reportar:

  • caminhos listados no .keyhoundignore
  • valores que são claramente placeholder (xxxx, <your-key>, ${API_KEY}, CHANGEME)
  • chaves de exemplo que circulam em documentação oficial

Crie um .keyhoundignore na raiz do projeto:

tests/fixtures/
**/*.lock
docs/exemplos/

Desenvolvimento

git clone https://github.com/felipedelyra-arch/keyhound.git
cd keyhound
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest

Contribuindo

Veja CONTRIBUTING.md. Regras novas para serviços brasileiros são especialmente bem-vindas.

Licença

Apache License 2.0 — veja LICENSE.

Release files for keyhound 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for keyhound 0.2.0
File Size Uploaded
keyhound-0.2.0.tar.gz 16.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for keyhound 0.2.0
File Interpreter ABI Platform
keyhound-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 33.4 kB

Release files / keyhound-0.2.0.tar.gz

Download URL keyhound-0.2.0.tar.gz
Size 16.4 kB
Tags Source
SHA-256 checksum
How to use checksums
54a317d2a3291596affcf35c3b6cad75c75ad96e53ac76c4e234132e65177bbb
BLAKE2b-256 checksum
How to use checksums
51a54879e76171e160d9a2d9fef111434d636078c3c25a2446ab5fabb03856d6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / keyhound-0.2.0-py3-none-any.whl

Download URL keyhound-0.2.0-py3-none-any.whl
Size 17.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
62697ac99da82f92a32288bd1f317d80fa403c5236f161f7fc58292372c8d8ed
BLAKE2b-256 checksum
How to use checksums
11b8e44806b91e8d3ea38bf4b3849b1a2c19439fd360af47402741bfa6470bf1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release history Release notifications | RSS feed

0.3.0

2 release files

This release

0.2.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page