Práctica de privacidad ·

Tras una filtración de variables de entorno, por qué la clave nueva no debe volver al chat

Revocar la clave vieja es solo la mitad. En cuanto la API key nueva entra en Slack, en una captura o en un ticket, dejas una copia en claro que se busca, se sincroniza y se archiva. Abajo se parte esa segunda filtración con un incidente público y se marca un límite de entrega que puedes comprobar en el acto. No es una guía del enlace de un solo uso.

Revisa los residuos Entrega cifrada en local Ábrelo al instante
00 / Índice

Primero, cuál filtración

Este artículo solo responde por qué una clave recién rotada no debe volver a una ventana de chat. No es el formulario de enlace de un solo uso ni el informe completo de un proveedor concreto.

01 / Dos golpes

La peligrosa es la segunda

La primera ocurre en el host: alguien ya leyó la clave vieja. La segunda ocurre en tus manos: la clave nueva se convierte en un mensaje que se queda.

A finales de agosto de 2026, la plataforma de despliegue Zeabur publicó un incidente titulado «Unauthorized Access to Project Environment Variable Data». La página oficial de estado indica que el atacante usó una credencial administrativa interna de AWS filtrada, llegó a la base de datos principal y lanzó consultas y exportaciones dirigidas contra las Variables de los proyectos. El objetivo declarado eran claves API de servicios de IA y otras credenciales que se pueden usar en el acto.

La misma página enumera nombres de clave expuestos, entre ellos OPENAI_API_KEY, ANTHROPIC_API_KEY, OPENROUTER_API_KEY, DATABASE_URL, AWS_ACCESS_KEY_ID, además de formas habituales de JWT, Stripe y GitHub. Los nombres personalizados también contaron como expuestos cuando el valor coincidía con esos formatos. Zeabur pidió a los afectados que revocaran y sustituyeran las credenciales listadas y que revisaran el uso y los cargos de terceros. Una captura que circuló sobre un «dataset completo a la venta» se trata como no verificada: la página de estado dice que las pruebas que tienen no respaldan esa afirmación, y este artículo no la da por hecha.

En incidentes así, el botiquín es siempre el mismo: revocar la clave vieja, mirar el consumo, rotar a una nueva. La primera filtración ya ocurrió en el host. No puedes sacar una cadena de las manos de otra persona. El paso que los equipos se saltan es el segundo: cuando la consola del proveedor imprime una clave nueva, alguien tiene que dársela a un compañero, pegarla en otra máquina o dejarla en un ticket temporal. Si ese salto es una ventana de chat, el «texto en claro recién rotado» queda escrito en un registro que se busca, se sincroniza y que un administrador puede exportar.

El nombre de la plataforma solo ancla una fecha y un registro público. La conclusión vale para cualquier entrega «primero rota, luego pasa»: contraseñas de base de datos, tokens de CI, una contraseña SSH temporal. El peligro no es que el compañero vea el secreto. El peligro es que cada salto puede quedarse con una copia completa en claro. Este artículo no reconstruye el plan de endurecimiento de un host, ni vende UsePwd como una caja fuerte que habría evitado la lectura en el lado del proveedor.

02 / Residuo

Qué deja una ventana de chat

El software de chat está pensado para que lo dicho se pueda encontrar después. Eso es una virtud en el día a día y un defecto para una clave API.

Pega en un canal una cadena que empiece por sk- y aparecen varias copias a la vez. El cuerpo del mensaje entra en el historial del espacio de trabajo. El cliente de escritorio y el del móvil guardan cada uno su caché. Muchos productos además mandan el texto a un índice de búsqueda en el servidor, para que dentro de tres meses alguien escriba «openai» y lo recupere. Las exportaciones de administrador, las retenciones legales y el «empaqueta el archivo del chat» al dar de baja a alguien se llevan ese texto en claro. Borrar una burbuja casi nunca borra la notificación que el otro ya leyó, una biblioteca de cliente descargada, ni el fotograma que una herramienta de captura ya guardó.

Eso no es lo mismo que «confío en mi compañero». El compañero necesita la clave nueva para que el servicio vuelva a arrancar. El canal, por defecto, guarda un registro de trabajo recuperable, no un secreto que debería existir solo mientras se lee. Escribir «clave nueva abajo» en un canal es también un aviso para todo el que pueda buscar ahí más tarde: gente que entre el trimestre que viene, quien tenga permiso de exportación de auditoría y quien en el futuro alcance una copia de seguridad. Las guías de escaneo de secretos lo tratan como una vía conocida de dispersión; la ayuda en español de Anthropic sobre claves API insiste en no compartirlas en claro y en rotarlas si se han visto comprometidas. Slack, por su parte, documenta reglas de prevención de pérdida de datos que escanean tokens de API precisamente porque el historial del canal los retiene.

Chat instantáneo
Una burbuja en claro que se busca

Slack, Discord, Microsoft Teams y WhatsApp conservan el cuerpo. Retirar el mensaje no garantiza que la otra caché desaparezca.

Correo y documentos
Una copia completa que se reenvía

Asuntos, adjuntos y comentarios de un documento en la nube se indexan. Un «reenviar todo» duplica el archivo otra vez.

Tickets y capturas
Texto en claro en píxeles archivados

Los sistemas de soporte guardan imágenes por número de ticket. La copia de la galería, un proyector y la grabación de la reunión son otros canales.

La comprobación es tosca y funciona: abre el chat que usa de verdad tu equipo y busca sk-, AKIA, ghp_, Bearer o BEGIN PRIVATE KEY. Cada resultado es un «lo mando ya» del pasado. Esas cadenas no se vuelven inofensivas porque hayas pulsado Rotar en una consola cloud. La clave vieja está muerta en el lado del proveedor. La copia en el chat sigue ahí.

Antes de enviar un ticket o de pegar un hilo en un canal público, los tokens, teléfonos y cadenas con pinta de identificador del cuerpo se pueden enmascarar en la pestaña actual con Limpiar URL. El texto original no se sube por defecto. Ese paso responde a «¿el texto que sale todavía lleva un secreto?». No responde a «¿debería el secreto entrar en el chat?».

Límite

Borrar la clave del chat no cierra la filtración. El otro lado puede haberla copiado, capturado o guardado en su propio gestor de contraseñas. Este artículo trata de no fabricar una copia nueva en claro. No es «borra el mensaje y el secreto vuelve».

03 / Pasos

Dónde la rotación vuelve a filtrar

El correo del incidente suele decir «rota al momento y revisa la factura». Lo que de verdad se filtra es la entrega de los veinte minutos siguientes.

Extiende un runbook de emergencia sobre la mesa y el peligro no es «entrar en la consola del proveedor y generar una clave nueva». Son los pasos alrededor de ese clic. Alguien captura la clave vieja y pregunta a un compañero «¿es esta?». Alguien hace una captura de toda la consola, así que la barra de direcciones, otros nombres de proyecto y una cifra de facturación aterrizan juntos en Fotos. Alguien genera la clave nueva, el compañero no está en el puesto, y el canal recibe un «úsalo ya». Las tres convierten el texto en claro en un objeto que se va a conservar.

Las unidades compartidas y git se escapan más. Un .env en crudo en una carpeta de equipo, o un commit de ejemplo que todavía lleva una clave, es otra copia. La sincronización en la nube escribe ese archivo en cada dispositivo con sesión. Cambiar el archivo después no borra la cadena de commits antiguos. Una copia local de un solo archivo de hasta 5 GB debería convertirse en texto cifrado en la pestaña actual antes de guardarse, en lugar de subir un .env en claro como un documento cualquiera. Cifrar archivo de UsePwd hace cifrado local por flujo con AES-256-GCM y escribe .lock / .enc. El archivo no se sube por defecto. Eso es «quédate tú un archivo cifrado», no «mete la clave en el chat».

Primero la captura, después rotar 01 Fotos, AirDrop y la grabación de una reunión conservan la clave vieja y la nueva juntas.
«Úsalo ya» en el canal 02 El historial del canal vive más que el incidente. Quien entre después todavía puede buscarlo.
Un .env en claro en una unidad compartida 03 Una carpeta sincronizada es una copia por dispositivo. Borrar el archivo en la nube no garantiza que desaparezcan las copias locales.
La clave completa dentro de un ticket 04 El soporte archiva por número. Un contratista o una escalación posterior puede abrirlo otra vez.

En el incidente de Zeabur, muchos usuarios no vieron primero una línea de registro de «se exportaron variables». Les pidieron vigilar el uso y los cargos de los proveedores de IA. Esa es la señal operativa: la clave vieja puede haber servido ya para llamar a una API. Si la clave nueva viaja después por el mismo canal de chat de siempre, el atacante no necesita un segundo salto al host. Solo necesita ver cómo suele pasar secretos el equipo, y esperar a la siguiente.

La contraseña nueva tiene que ser lo bastante aleatoria. El modo aleatorio admite de 6 a 128 caracteres, 16 por defecto; por debajo de 8, la herramienta avisa de que el secreto es débil. Genérala en el generador de contraseñas, en la pestaña actual, sin registro. Después no la «guardes en el navegador» para capturar la fila del gestor y mandársela a otro. Eso es otra vez el canal de las capturas.

04 / Comparar

Pegar en claro frente a cifrar en local: qué queda

Tienes que dar un secreto corto a otra persona y no quieres que el historial del canal conserve una cadena usable tal cual. Compara qué permanece y elige herramienta.

Una ventana de chat entrega texto en claro. Copiar es fácil en ambos lados. El coste es que el espacio de trabajo, el índice de búsqueda y las copias de seguridad tienen cada uno una copia. Los adjuntos de correo funcionan igual: en cuanto un .env o un bloc de notas viaja como adjunto, el servidor de correo y ambos clientes tienen el archivo completo.

Un enlace cifrado de un solo uso entrega «un identificador de texto cifrado más material de descifrado que se queda en el dispositivo». El enlace de un solo uso de UsePwd cifra el texto en la pestaña actual con Web Crypto y AES-256-GCM, y solo envía texto cifrado al servidor. La clave de descifrado se añade después de # en s.html?id={id}#{key}. Crear y leer funcionan al instante: ninguna de las dos partes se registra. El servidor guarda texto cifrado, un TTL en horas y un recuento de lecturas. No ve el texto en claro, y no hay un sistema de cuentas que pueda «recuperarlo por usuario».

Poner la clave después de # atiende los registros de acceso del host y la línea de petición HTTP: el navegador no envía el fragmento como parte de la petición. Esa capa se desglosa en Por qué el fragmento # de una URL no aparece en los registros del servidor. Este artículo cubre la capa siguiente. Aunque la clave no entre en una línea de petición de UsePwd, pegar el enlace completo en el chat sigue guardando la dirección entera en ese producto. Quien tenga la URL completa puede abrir la página de lectura y descifrar hasta agotar el recuento. El enlace de un solo uso limita cuánto vive el texto cifrado en el servidor y cuántas veces se puede leer. No impide que el destinatario haga una captura o reenvíe el enlace.

Texto en claro en el chat
El canal guarda la clave misma

El historial se busca. Después de revocar la clave cloud vieja, la cadena en el chat sigue ahí.

Enlace de un solo uso
El canal guarda la URL completa

Cuando se agota el recuento, el servidor borra el texto cifrado. Un enlace muerto no es un historial borrado.

Cifrar archivo
El canal guarda un archivo .lock

El archivo cifrado puede estar en una unidad. Pasa la contraseña por otro canal, no en el mismo mensaje.

Por eso el enlace de un solo uso encaja en un secreto corto que debería dejar de existir al leerse: una clave API nueva, una contraseña temporal de base de datos, un código de un uso. Es más limpio que pegar sk- en el canal, porque el historial ya no guarda una cadena que pueda llamar a la API del proveedor. Cuando el destinatario lo abre y se alcanza el recuento, el texto cifrado del servidor se borra y un resultado de búsqueda tardío no abre el texto en claro. Sigues teniendo que confiar en el canal de envío: no publiques el enlace completo en un canal abierto y no mandes junto una captura de la contraseña.

UsePwd no tiene cuentas, no tiene almacén de contraseñas y no puede recuperar una contraseña por usuario. Si se pierde el enlace, se trunca el fragmento o se agota el recuento, el servidor no puede restaurar el texto en claro. El guardado largo, la sincronización entre dispositivos o la recuperación de emergencia pertenecen a un gestor de contraseñas dedicado. No leas este sitio como un sistema de cuentas. La identidad se explica en Acerca de.

No lo leas al revés

Una entrega cifrada en local no deshace las claves que ya se exportaron en el host. Revoca primero las viejas. Este artículo solo cubre cómo dar a un compañero la clave nueva sin dejar una segunda copia en claro.

05 / Comprobar

Cómo comprobar la entrega en el acto

El objetivo no es demostrar que «nadie en el mundo puede verlo». Es demostrar que esta entrega no dejó texto en claro usable en el historial del chat.

  1. 01
    Revoca la clave vieja antes de generar una nueva

    En la consola del proveedor, revoca lo que ya se haya expuesto. No uses una clave real de producción para el ejercicio de abajo. Basta una cadena que reconozcas, por ejemplo demo-not-a-real-key-2026.

  2. 02
    Abre el enlace de un solo uso antes de abrir el chat

    Entra en enlace de un solo uso. La página funciona al instante, sin iniciar sesión. Cifra el texto de ejemplo en un enlace. La forma debe ser s.html?id={id}#{key}: el query solo tiene el identificador; la clave va después de #.

  3. 03
    Envía el enlace. No vuelvas a pegar el texto de ejemplo

    En la ventana de chat solo debería verse la URL completa. Si escribes «la clave es xxx, el enlace abajo», dejas texto en claro y enlace a la vez, y el material de un solo uso pierde el sentido.

  4. 04
    Cuando el destinatario lo abra, busca en el canal

    Busca la cadena de ejemplo tal cual. No deberías encontrar esa cadena en el cuerpo de un mensaje: solo el enlace. Luego busca s.html?id= y confirma que no truncaste la URL antes de #. Sin el fragmento, la otra persona puede traer el texto cifrado y no puede descifrarlo en local.

  5. 05
    Si lo necesitas, mira la petición en el panel Red

    El cuerpo del POST de creación debe ser texto cifrado y dos números, no el texto de ejemplo. Las rutas GET posteriores solo deben llevar id. Esa comprobación es «¿entró la clave en HTTP?» y complementa Seguridad. En producción también pueden ir nombres de página y de botón a /tj/ para analítica. Esa carga no es texto en claro.

Los tickets piden un paso extra. En una captura que vas a mandar a soporte, usa Limpiar URL y comprueba si un token sigue apareciendo entero. La limpieza corre en la pestaña actual; el texto original no se escribe en la analítica. Estás comprobando «¿el píxel todavía guarda una clave que se puede pegar y usar?», no «¿es seguro el sistema de tickets?».

06 / Elegir

Cuándo el enlace también es la herramienta equivocada

Un enlace de un solo uso reduce «una clave en claro en el historial del canal». No reduce «todo el que pueda ver una pantalla».

Si el secreto debe guardarse mucho tiempo, sincronizarse entre dispositivos o recuperarse más adelante, no uses el enlace de un solo uso y no trates el historial del chat como una caja fuerte. Eso es trabajo de un gestor de contraseñas. UsePwd no ofrece cuentas ni almacén. Cuando se agota el recuento, o si se pierde el enlace, no puede restaurar el secreto por ti.

Si el secreto es una clave maestra de alto valor, un certificado raíz o una semilla de monedero que puede mover fondos, ni un enlace ni un canal de chat bastan. Dilo en persona, usa un medio sin red, o quédate en un canal de extremo a extremo que ya tengáis establecido. Un esquema de fragmento no detiene un equipo ya comprometido, una extensión del navegador que pueda leer la pestaña actual, ni una URL completa proyectada en la pared de una sala de reuniones.

La copia de un archivo es otro camino: convierte un .env en claro en .lock / .enc en esta máquina y luego pon el texto cifrado en una unidad. Pasa la contraseña de desbloqueo por un canal que no sea el archivo mismo. No comprimas las dos herramientas en una sola promesa. El enlace de un solo uso gobierna cuántas veces se puede leer un secreto corto. Cifrar archivo gobierna un archivo cifrado que tú te quedas.

Volvamos a la pregunta. Cuando vacían las variables de entorno de una plataforma cloud, las claves viejas hay que revocarlas. No hay atajo. La clave nueva no debe volver a una ventana de chat porque el chat, por defecto, guarda texto en claro que se busca, y el sentido de rotar es que la cadena vieja muera al momento: no deberías gastar el mismo minuto en fabricar una copia que va a vivir más. Cuando un compañero la necesita una vez, usa el enlace de un solo uso: cifrado en local, ábrelo al instante. Cuando necesitas una copia que guardas tú, usa Cifrar archivo. Ambas páginas, como este artículo, solo tienen el selector de idioma a la derecha de la barra superior. No hay inicio de sesión.

07 / Siguiente

Cuando termines, revisa el canal

El artículo responde por qué una clave nueva no debe volver a una ventana de chat. Para crear un enlace cifrado que se destruye, abre el enlace de un solo uso: no hace falta registrarse.