Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
enseal — Compartir secretos seguros y efímeros para desarrolladores. | Kitploit
Herramientas/GitHubGitHub/fleralex/enseal
Herramientas de Cifrado/DescifradoAuditoría de ConfiguraciónExfiltración de DatosSeguridad en la NubeDevSecOpsPrivacidadUtilidades y FrameworksDetección de SecretosAutenticación
GitHubfleralex/enseal

enseal

Compartir secretos seguros y efímeros para desarrolladores.

55hace 5 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Ver Repositorio

enseal

CI Release Crates.io License: MIT

Compartir secretos seguros y efímeros para desarrolladores.

Deja de pegar secretos en Slack. enseal hace que la vía segura sea más rápida que la insegura — comparte archivos .env y secretos a través de canales cifrados de un solo uso con un solo comando y sin configuración.```bash

sender

$ enseal share .env Share code: 7-guitarist-revenge Secrets: 14 variables (staging) Expires: on first receive

recipient

$ enseal receive 7-guitarist-revenge ok: 14 secrets written to .env

root@kitploit:~
## Instalación

### Desde crates.io```bash
cargo install enseal

Desde el código fuente```bash

git clone https://github.com/FlerAlex/enseal.git cd enseal cargo build --release

binary at ./target/release/enseal

root@kitploit:~
### Binarios precompilados

Descárgalos desde [GitHub Releases](https://github.com/FlerAlex/enseal/releases) para Linux (x86_64, aarch64), macOS (Intel, Apple Silicon) y Windows.

## Inicio rápido

### Modo anónimo (sin configuración)

Comparte secretos usando un código de un solo uso. Sin llaves, sin cuentas — funciona de inmediato.```bash
# terminal 1 (sender)
enseal share .env
  Share code:  7-guitarist-revenge
  Secrets:     14 variables
  Expires:     on first receive

# terminal 2 (recipient) — enter the code
enseal receive 7-guitarist-revenge
ok: 14 secrets written to .env

También funciona con secretos individuales:```bash

terminal 1 — pipe a token

echo "my-api-token" | enseal share --label "API key" Share code: 4-orbital-hammock

terminal 2 — prints to stdout

enseal receive 4-orbital-hammock my-api-token

root@kitploit:~
Ambos terminales deben estar abiertos al mismo tiempo — el emisor espera hasta que el receptor se conecte.

### Modo de identidad (basado en claves, sin códigos)

Para equipos con confianza de claves establecida. Cifrar a un nombre, sin necesidad de coordinación.```bash
# one-time setup
enseal keys init
enseal keys export > my-key.pub          # share this with teammates
enseal keys import teammate-key.pub      # import theirs

# sender encrypts to recipient by name
enseal share .env --to sarah

# or push through the public relay (no codes at all)
enseal share .env --to sarah --relay wss://relay.enseal.dev

# or produce an encrypted file (no network)
enseal share .env --to sarah --output ./drop/

Inyecta secretos en un proceso (nunca toca el disco)```bash

anonymous mode: sender gives you a code

enseal inject 7-guitarist-revenge -- npm start

identity mode: listen on relay, sender pushes when ready

enseal inject --listen --relay wss://relay.enseal.dev -- docker compose up

from an encrypted file drop

enseal inject ./staging.env.age -- python manage.py runserver

root@kitploit:~
Los secretos existen solo en la memoria del proceso hijo. Cuando este finaliza, desaparecen.

## Características

### Tres modos de compartir

**Modo anónimo** (predeterminado) — basado en wormhole, sin configuración. Solo necesitas un código legible por humanos. La autenticación mutua SPAKE2 previene ataques MITM.```bash
enseal share .env                         # generates wormhole code
enseal receive 7-guitarist-revenge        # uses code

Con --relay, el modo anónimo omite wormhole y utiliza el transporte de retransmisión enseal en su lugar. Ambos lados deben usar el mismo relay:```bash enseal share .env --relay ws://relay.internal:4443 # generates channel code enseal receive 3421-amber-frost --relay ws://relay.internal:4443

root@kitploit:~
**Async upload (`--upload`)** — solo para el remitente. Cifra localmente y publica en [burnurl.dev](https://burnurl.dev), devolviendo una URL autodestructiva que el destinatario abre en un navegador. No se requiere CLI en el lado del destinatario.```bash
enseal share .env --upload
#   Secret URL:  https://burnurl.dev/s/a3f9c2e1...
#   Expires:     2026-03-08 19:42:00 UTC (24h)
#   Reads:       1 (self-destructs on first open)

El destinatario abre la URL en cualquier navegador — no necesita instalar enseal. Agregue --passphrase para cifrar del lado del cliente antes de la subida (el servidor solo ve texto cifrado):```bash enseal share .env --upload --passphrase # prompts for passphrase enseal share .env --upload --ttl 4 # 4-hour TTL (max 24)

root@kitploit:~
El acceso a la API requiere un plan Pro o Team en burnurl.dev. Configure `BURNURL_API_KEY` con su clave. Sobrescriba la URL base para instancias autoalojadas: `BURNURL_URL=https://burnurl.internal`.

**Modo de identidad** — cifrado de clave pública para compañeros de equipo conocidos. Cifre a un nombre.```bash
enseal keys init                          # one-time setup
enseal share .env --to sarah              # encrypt to sarah's public key

Identity mode admite tres opciones de transporte:```bash

wormhole (default, no --relay): generates a code like anonymous mode

enseal share .env --to sarah

relay push (with --relay): zero codes, pushes directly to recipient's channel

enseal share .env --to sarah --relay wss://relay.enseal.dev

file drop (with --output): no network, produces encrypted file

enseal share .env --to sarah --output ./drop/

produces ./drop/[email protected]

root@kitploit:~
### Entrada Flexible

enseal acepta secretos de múltiples fuentes:```bash
# .env file (default)
enseal share .env
enseal share staging.env

# environment profile
enseal share --env staging               # resolves to .env.staging

# pipe from stdin
echo "sk_live_abc123" | enseal share
cat secrets.env | enseal share
pass show stripe/key | enseal share --to sarah

# inline (careful — visible in shell history)
enseal share --secret "API_KEY=sk_live_abc123"

# wrap raw string as KEY=VALUE
echo "sk_live_abc123" | enseal share --as STRIPE_KEY

Interpolación de variables

${VAR} las referencias se resuelven antes del envío, por lo que los destinatarios reciben valores completamente expandidos:```env DB_HOST=postgres.internal DB_PORT=5432 DATABASE_URL=postgres://user:pass@${DB_HOST}:${DB_PORT}/myapp

root@kitploit:~
Admite la sintaxis de valor predeterminado `${VAR:-default}`. Las referencias circulares y hacia adelante se detectan y se rechazan. Use `--no-interpolate` para enviar la sintaxis literal `${VAR}`.

### Filtrado

Controla qué variables se envían:```bash
# exclude public/non-secret vars
enseal share .env --exclude "^PUBLIC_|^NEXT_PUBLIC_"

# send only matching vars
enseal share .env --include "^DB_|^API_"

# skip .env parsing entirely (send raw file)
enseal share .env --no-filter

Recepción Inteligente

La salida se adapta a lo enviado:```bash

.env payload -> writes to file

enseal receive CODE ok: 14 secrets written to .env

write to specific file

enseal receive CODE --output staging.env

raw string -> prints to stdout (pipe-friendly)

enseal receive CODE sk_live_abc123

force clipboard

enseal receive CODE --clipboard ok: copied to clipboard

force stdout for any payload

enseal receive CODE --no-write

receive from encrypted file drop (identity mode)

enseal receive ./staging.env.age ok: signature verified, file decrypted ok: 14 secrets written to .env

root@kitploit:~
### Inject

Recibir secretos e inyectarlos directamente como variables de entorno en un proceso hijo. Los secretos nunca tocan el sistema de archivos.```bash
# anonymous mode: inject via wormhole code
enseal inject 7-guitarist-revenge -- npm start

# identity mode: listen for incoming transfer on relay
enseal inject --listen --relay wss://relay.enseal.dev -- docker compose up

# from encrypted file drop
enseal inject ./staging.env.age -- python manage.py runserver

Con --listen, el receptor se conecta al relay y espera. El emisor envía con enseal share .env --to alex --relay wss://relay.enseal.dev — no se intercambian códigos, se necesita cero coordinación.

Kit de herramientas .env

Más allá de compartir, enseal es un kit de seguridad completo para .env:```bash

check: verify your .env has all required vars

enseal check error: missing from .env (present in .env.example): JWT_SECRET, REDIS_URL

diff: compare two .env files (keys only, never values)

enseal diff .env.development .env.staging

  • REDIS_CLUSTER_URL (only in staging)
  • DEBUG (only in development)

redact: strip values for safe sharing of structure

enseal redact .env DATABASE_URL= API_KEY= PORT=

validate: check values against schema rules

enseal validate .env error: missing required: JWT_SECRET error: PORT value "abc" is not an integer ok: 11/14 variables passed validation

template: generate .env.example with type hints

enseal template .env

DATABASE_URL=

API_KEY=<32+ character string>

PORT=<integer, 1024-65535>

root@kitploit:~
### Cifrado en Reposo

Cifra archivos `.env` para almacenamiento seguro en git usando cifrado age:```bash
# whole-file encryption
enseal encrypt .env
ok: .env encrypted in-place (14 variables, age key)

enseal decrypt .env

# per-variable: keys visible for diffing, values encrypted
enseal encrypt .env --per-var
# DB_HOST=ENC[age:abc123...]
# DB_PORT=ENC[age:def456...]

# multi-recipient: anyone on the team can decrypt
enseal encrypt .env --to sarah --to alex

Identidad y Gestión de Claves```bash

generate your keypair

enseal keys init

share your public key with teammates

enseal keys export > my-key.pub

import a teammate's key (shows fingerprint, prompts for confirmation)

enseal keys import sarah.pub

list all trusted keys and aliases

enseal keys list

show your key fingerprint (for out-of-band verification)

enseal keys fingerprint

remove a trusted key

enseal keys remove [email protected]

create aliases for convenience

enseal keys alias sarah [email protected]

create groups for multi-recipient sharing

enseal keys group create backend-team enseal keys group add backend-team sarah enseal keys group add backend-team alex enseal keys group list backend-team enseal share .env --to backend-team

delete a group

enseal keys group delete backend-team

root@kitploit:~
### Relay público

Un relay público gratuito está disponible en `wss://relay.enseal.dev`. Úsalo para pruebas rápidas o cuando no necesites un relay privado.```bash
# check relay health
curl https://relay.enseal.dev/health

# use it for identity-mode transfers
enseal share .env --to sarah --relay wss://relay.enseal.dev
enseal inject --listen --relay wss://relay.enseal.dev -- npm start

# or set it globally
export ENSEAL_RELAY=wss://relay.enseal.dev

Pruébalo tú mismo```bash

1. generate keys (one-time)

enseal keys init

2. export and import your own key (for self-testing)

enseal keys export > /tmp/mykey.pub enseal keys import /tmp/mykey.pub

enter an alias when prompted (e.g. "mykey")

3. test file drop (no network needed)

enseal share --secret "TEST=works" --to mykey --output /tmp/ enseal receive /tmp/mykey.env.age

4. test relay push (two terminals)

terminal 1 (receiver):

enseal inject --listen --relay wss://relay.enseal.dev -- env | grep TEST

terminal 2 (sender):

enseal share --secret "TEST=relay_works" --to mykey --relay wss://relay.enseal.dev

root@kitploit:~
### Relé auto-alojado

Mantén todo dentro de tu red. El relé no tiene estado — solo ve texto cifrado.```bash
# Docker (one command)
docker run -d -p 4443:4443 enseal/relay

# Or as a binary
enseal serve --port 4443

# Check relay health
curl http://localhost:4443/health

enseal serve habla con WebSocket plano (ws://). Para TLS, coloca un proxy inverso (Caddy, nginx) al frente y conéctate con wss://.

Con --relay configurado, todos los modos enrutan a través de tu relay:```bash

Anonymous mode — generates enseal channel code instead of wormhole code

enseal share .env --relay ws://relay.internal:4443

info: Share code: 3421-amber-frost

enseal receive 3421-amber-frost --relay ws://relay.internal:4443

Or set globally

export ENSEAL_RELAY=ws://relay.internal:4443 enseal share .env

root@kitploit:~
El modo Identity con un relay autoalojado es completamente sin código:```bash
# receiver listens on the relay
enseal inject --listen --relay ws://relay.internal:4443 -- npm start

# sender pushes directly — no code generated
enseal share .env --to alex --relay ws://relay.internal:4443
ok: pushed to alex

Validación de esquema

Define reglas en .enseal.toml en la raíz del proyecto:```toml [schema] required = ["DATABASE_URL", "API_KEY", "JWT_SECRET"]

[schema.rules.DATABASE_URL] pattern = "^postgres://" description = "PostgreSQL connection string"

[schema.rules.PORT] type = "integer" range = [1024, 65535]

[schema.rules.API_KEY] min_length = 32

root@kitploit:~
Luego valide:```bash
enseal validate .env

Validation also runs automatically when receiving .env files — catching broken configs before they cause confusion.

Perfiles de Entorno```bash

enseal share --env staging # shares .env.staging enseal validate --env production # validates .env.production enseal diff .env.development .env.production

root@kitploit:~
## Cómo Funciona

### Modo Anónimo

**Wormhole (predeterminado, sin `--relay`):**

1. El remitente cifra la carga útil con `age`
2. Un intercambio de claves SPAKE2 establece un secreto compartido a través del relé público de wormhole
3. La carga útil cifrada transita a través del relé
4. El destinatario descifra con la clave negociada
5. El canal se destruye — un solo uso, con límite de tiempo

El relé nunca ve el texto plano. El código de wormhole proporciona autenticación mutua.

**Relé Enseal (`--relay`):**

1. El remitente cifra la carga útil con `age` y la envía al relé enseal bajo un código de canal generado
2. El destinatario se conecta al mismo relé con el mismo código y recibe la carga útil
3. El canal se consume al primer recibimiento

No hay SPAKE2 en este modo — el código de canal es la única credencial.

### Carga Asíncrona (`--upload`)

1. El remitente serializa la carga útil en un `Envelope` (JSON, verificación de integridad SHA-256)
2. Opcionalmente la cifra del lado del cliente con una frase de contraseña scrypt de age (`--passphrase`)
3. Envía la carga útil mediante POST a `burnurl.dev/api/secret` a través de HTTPS
4. burnurl.dev la almacena con AES-256-GCM del lado del servidor en reposo y devuelve una URL de autodestrucción
5. La URL es válida durante el TTL configurado (hasta 24h en el nivel gratuito), solo una lectura

El remitente comparte la URL. El destinatario la abre en cualquier navegador — no se necesita enseal. Con `--passphrase`, la frase de contraseña debe compartirse por separado; el servidor nunca ve el texto plano.

**Niveles:** El acceso a la API requiere un plan Pro o Team en burnurl.dev. Establece `BURNURL_API_KEY` con tu clave — el nivel gratuito no tiene acceso a la API.

Sobrescribe `BURNURL_URL` para apuntar a una instancia de burnurl autoalojada.

### Modo de Identidad (Clave Pública)

1. El remitente cifra con la clave pública `age` del destinatario
2. El remitente firma con su propia clave `ed25519`
3. La carga útil transita a través del relé, file drop o wormhole
4. El destinatario descifra con su clave privada
5. El destinatario verifica la firma del remitente

La confianza se basa en qué claves has importado.

**Opciones de transporte en modo de identidad:**

| Transporte | Flag | Cómo funciona |
|---|---|---|
| Wormhole (predeterminado) | `--to sarah` | Genera un código, como el modo anónimo pero con firma |
| Envío por relé | `--to sarah --relay URL` | Envía al canal determinista del destinatario, sin código |
| File drop | `--to sarah --output ./dir/` | Produce un archivo `.env.age` cifrado, sin red |

Con el envío por relé, el destinatario escucha con `enseal inject --listen --relay URL -- cmd` o recibe el file drop con `enseal receive ./file.env.age`.

## Modelo de Seguridad

**Protegido:**
- Secretos en tránsito (canal cifrado)
- Secretos en el historial de Slack/correo electrónico (efímeros, sin persistencia)
- Ataques MITM (SPAKE2 / autenticación de clave pública)
- Relé malicioso (cifrado E2E, el relé solo ve texto cifrado)
- Suplantación del remitente (modo de identidad: firmas ed25519)
- Secretos en disco (modo inject: solo memoria de proceso)
- Secretos en git (encrypt: cifrado en reposo)

**No protegido:**
- Puntos finales comprometidos (si la máquina está comprometida, nada ayuda)
- Distribución de claves (confías en las claves que importas — sin PKI, sin CA)

## Configuración

Opcional `.enseal.toml` en la raíz de tu proyecto:```toml
[defaults]
relay = "wss://relay.enseal.dev"     # public relay (identity mode)
# relay = "ws://relay.internal:4443" # self-hosted without TLS
# relay = "wss://relay.internal:4443" # self-hosted with TLS reverse proxy

[filter]
exclude = ["^PUBLIC_", "^NEXT_PUBLIC_", "^REACT_APP_"]

[identity]
default_recipient = "devops-team"

[schema]
required = ["DATABASE_URL", "API_KEY", "JWT_SECRET"]

Referencia de CLI```

CORE enseal share [] Send secrets (file, pipe, or --secret) enseal receive [<code|file>] Receive secrets enseal inject [] -- Inject secrets into a process enseal keys Manage identity keys and aliases enseal serve Run self-hosted relay server

Descargar herramienta

.ENV TOOLKIT enseal check [file] Verify .env has all vars from .env.example enseal diff Compare .env files (keys only) enseal redact Replace values with enseal validate Validate against schema rules enseal template Generate .env.example with type hints

ENCRYPTION enseal encrypt Encrypt .env for git storage enseal decrypt Decrypt an encrypted .env

root@kitploit:~
### `share` banderas```
--to <name>              Identity mode: encrypt to recipient (alias, group, or identity)
--output <dir>           File drop: write encrypted file (identity mode, no network)
--upload                 Post to burnurl.dev (async, browser-readable, no CLI on recipient side)
--ttl <hours>            Secret TTL for --upload (1-24, default: 24)
--passphrase             Encrypt client-side before --upload (prompts; server never sees plaintext)
--secret <value>         Inline secret (raw string or KEY=VALUE)
--label <name>           Human label for raw/piped secrets
--as <KEY>               Wrap raw input as KEY=<value>
--relay <url>            Route through relay server. Anonymous mode: uses enseal relay transport
                         (generates channel code, bypasses wormhole). Identity mode: push to
                         recipient's channel. Also: ENSEAL_RELAY env var.
--env <profile>          Environment profile (resolves to .env.<profile>)
--exclude <pattern>      Regex to exclude vars
--include <pattern>      Regex to include only matching vars
--no-filter              Send raw file, skip .env parsing
--no-interpolate         Don't resolve ${VAR} references before sending
--words <n>              Words in wormhole code (2-5, default: 2). Wormhole mode only (no --relay).
--quiet / -q             Minimal output

receive banderas```

--output Write to specific file --clipboard Copy to clipboard instead of stdout/file --no-write Print to stdout even for .env payloads --relay Use specific relay server --quiet / -q Minimal output

root@kitploit:~
### `inject` banderas```
--listen                 Listen for incoming identity-mode transfer (requires --relay)
--relay <url>            Use specific relay server (also: ENSEAL_RELAY)
--quiet / -q             Minimal output

keys subcomandos```

enseal keys init Generate your keypair enseal keys export Print your public key bundle enseal keys import Import a colleague's public key enseal keys list Show all trusted keys and aliases enseal keys remove Remove a trusted key enseal keys fingerprint Show your key fingerprint enseal keys alias Map short name to identity enseal keys group create Create a named group enseal keys group add Add identity to group enseal keys group remove Remove identity from group enseal keys group list [name] List groups or group members enseal keys group delete Delete a group

root@kitploit:~
### `serve` banderas```
--port <port>            Listen port (default: 4443)
--bind <addr>            Bind address (default: 0.0.0.0)
--max-mailboxes <n>      Max concurrent channels (default: 100)
--channel-ttl <seconds>  Idle channel lifetime (default: 300)
--max-payload <bytes>    Max WebSocket message size (default: 1048576)
--rate-limit <n>         Max connections per minute per IP (default: 10)
--health                 Print server health check and exit

encrypt / decrypt banderas```

--per-var Per-variable encryption (keys visible, values encrypted) --to Encrypt to specific recipients (multi-key)

root@kitploit:~
### Banderas globales```
--verbose / -v           Debug output (never prints secret values)
--quiet / -q             Minimal output (for scripting)

Comparación

ensealSlack DM1Password Sharedotenvxcroc
Sin configuraciónSíSíNoNoSí
Cifrado de extremo a extremoSíNoSíN/DSí
Efímero (sin historial)SíNoSíN/DSí
Conciencia de .envSíNoNoSíNo
Inyección de procesosSíNoNoSíNo
Validación de esquemaSíNoNoNoNo
Cifrado en reposoSíN/DN/DSíNo
Relay autoalojableSíNoNoN/DSí
Soporte de cadena sin procesar/tuberíaSíSíNoNoSí

Hoja de ruta

  • v0.1 — Núcleo: compartir/recibir, tubería/stdin, kit de herramientas .env (check, diff, redact) (hecho)
  • v0.2 — Modo identidad: claves, alias, bandera --to (hecho)
  • v0.3 — Comando inject, relay autoalojado (hecho)
  • v0.4 — Validación de esquema, plantillas, interpolación, perfiles (hecho)
  • v0.5 — Cifrado en reposo (encrypt/decrypt) (hecho)
  • v0.10 — Grupos, chart Helm, documentación (hecho)
  • v0.11 — Endurecimiento de seguridad, sincronización de documentación (hecho)
  • v0.12 — .enseal.toml conectado, relay privado para modo anónimo (hecho)
  • v0.16 — Carga asíncrona vía burnurl.dev (--upload) (actual)
  • v1.0 — Publicación en crates.io, pulido final

Licencia

MIT