Gusano Shai-Hulud (npm) Nov 2025
Un gusano auto-replicante en el ecosistema npm escaneó equipos
de devs y CI runners buscando archivos .env y los
publicó en repos abiertos de GitHub. Miles de credenciales filtradas.
Encripta tu .env.
Ábrelo en el deploy.
Una librería cross-stack (Node + Java / Spring Boot) para secretos encriptados en disco, con apertura ligada a TOTP para deploys en producción. Diseñada contra los ataques de cadena de suministro que rompieron 2024–2026.
El problema
.env en texto plano no sobrevivió a 2024–2026.
Un gusano auto-replicante en el ecosistema npm escaneó equipos
de devs y CI runners buscando archivos .env y los
publicó en repos abiertos de GitHub. Miles de credenciales filtradas.
Una GitHub Action muy popular fue comprometida. Cada job que la usaba volcó sus variables de entorno en logs públicos de CI. El radio de impacto alcanzó decenas de miles de repos.
Una ola coordinada de tokens de CI robados, usada para publicar
paquetes troyanizados y cosechar más secretos — apalancando
justamente los tokens que la mayoría de equipos guardan junto
a su .env.
El patrón es el mismo: el acceso de lectura al sistema de archivos o al entorno de un proceso se convierte en acceso total a las credenciales. Encriptar en disco no basta — si la llave maestra se filtra junto con el archivo, la bóveda se abre.
La solución
Para devs en solitario y repos privados.
Defiende contra: filtraciones de backups, pushes accidentales a git, heap dumps tras el wipe de la llave.
Para repos compartidos y CI.
basicDefiende contra: manipulación interna, compromiso de solo la llave maestra (el HMAC falla antes de intentar descifrar).
Para deploys en producción.
teamDefiende contra: pasos de CI comprometidos, tokens capturados y reusados en otro deploy, phishing AitM al operador.
basic team enterprise
───── ──── ──────────
.env.sealed .env.sealed .env.sealed
│ │ │
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ AES-GCM │ │ HMAC │ │ HMAC │
│ decrypt │ │ verify │ │ verify │
└────┬────┘ └────┬────┘ └────┬────┘
▼ ▼ ▼
plaintext ┌─────────┐ ┌─────────┐
│ AES-GCM │ │ TOTP │
│ decrypt │ │ token │
└────┬────┘ │ verify │
▼ └────┬────┘
plaintext ▼
┌─────────┐
│ deploy │
│ bind │
└────┬────┘
▼
┌─────────┐
│ AES-GCM │
│ decrypt │
└────┬────┘
▼
plaintext
Tour de 30 segundos
Un archivo .env.sealed escrito por la CLI de Node se
desencripta limpio desde un servicio Java / Spring Boot, y al revés.
Verificado byte-a-byte por tests automáticos de interop cross-stack
en cada commit.
// 1. encripta tu .env existente (CLI)
$ SEALED_ENV_KEY=$(openssl rand -hex 32) \
npx sealed-env seal .env
// → escribe .env.sealed (commit este)
// 2. lee al arrancar
import { loadSealed } from "sealed-env";
loadSealed();
console.log(process.env.API_KEY);
// application.yml
sealed-env:
enabled: true
path: .env.sealed
fail-fast: true
// en cualquier bean — los valores llegan descifrados
@Value("${API_KEY}")
private String apiKey;
Modelo de amenazas
Una herramienta de seguridad sin un modelo de amenazas público es marketing. El nuestro está acá, mapeando cada defensa a un incidente real de 2024–2026.
| Tipo de ataque | Defendido por |
|---|---|
| Gusano Shai-Hulud (exfiltración del entorno) | basic |
| Filtración de backup / S3 público | basic |
| CVEs de heapdump en Spring Boot | basic (llave borrada tras derivación) |
Manipulación interna del .env.sealed | team |
| Compromiso de CI tipo tj-actions / GhostAction | enterprise + CHALLENGE-BIND |
| Phishing AitM del TOTP (EvilProxy) | enterprise + CHALLENGE-BIND (parcial) |
| Host de producción comprometido con shell | Fuera de alcance (no hay defensa en runtime) |
| KMS / laptop del operador comprometido | Fuera de alcance (v0.3.x: llaves con HSM) |
Ayuda a construirlo
sealed-env se construye en abierto desde Bucaramanga, Colombia.
Es MIT y no hay empresa detrás — todavía. Ahora mismo necesita gente
que se preocupe por tres cosas:
Soy David Almeida, dev backend autodidacta en Bucaramanga. Si querés colaborar, escribime a davidalmeidac@proton.me o por GitHub. Buscando feedback técnico, colaboradores, y eventualmente un equipo.
Patrocinio
sealed-env es MIT y gratis para siempre — pero el tiempo
para mantenerlo, auditarlo y hacerlo crecer no es gratis. Los
patrocinios van directo a:
¿Prefieres una donación única?
Invítame un café en Ko-fi ☕El 100% va al proyecto — Ko-fi no se queda nada en los tips estándar.