Español

Herramientas de desarrollo · Codificador y decodificador Base64

Base64 no es cifrado: por qué cualquiera puede leer un secreto codificado

· Por qué es importante

base64 seguridad codificación

Texto codificado en Base64 decodificado instantáneamente sin clave, mostrando el contenido de texto sin formato
Ilustración de vector original de ToolAcre

Base64 no oculta nada: cualquiera que tenga la cadena puede decodificarla instantáneamente, sin clave. Esta publicación explica la diferencia entre codificación, cifrado y hash, y qué hacer cuando encuentra secretos de Base64 en un repositorio.

El valor de configuración que parecía codificado y decodificado en una contraseña de base de datos: un descubrimiento concreto y la rapidez con la que se revierte

Encontrar Base64 en un archivo de configuración crea una falsa sensación de seguridad. Un desarrollador descubre una contraseña de base de datos que aparece como una secuencia codificada como dGlnZXJfZGF0YWJhc2VfYWRtaW4, asume que está cifrada y la envía al repositorio junto con el código de la aplicación. Semanas más tarde, una revisión de seguridad revela el texto sin formato real: Tiger_database_admin.

Base64 no oculta nada; es una codificación, no una encriptación. La misma contraseña invertida vuelve a estar sin formato instantáneamente en el navegador, sin clave, sin cálculos ni demoras. Esta publicación explica por qué existe la codificación, en qué se diferencia fundamentalmente del cifrado y el hashing, y qué sucede realmente cuando alguien encuentra secretos Base64 en un historial comprometido.

Codificación, cifrado y hash: tres trabajos diferentes: qué garantiza cada uno y cuál necesita una clave

La confusión surge porque Base64 parece protección. Un humano no puede echar un vistazo a dGlnZXJfZGF0YWJhc2VfYWRtaW4 y leer Tiger_database_admin. Aparece oscurecido hasta que lo pasas por un decodificador. Esa ofuscación a nivel superficial parece seguridad, pero no lo es. Base64 fue diseñado para resolver un problema completamente diferente: mover datos binarios arbitrarios a través de canales de solo texto. El correo electrónico, los formularios web más antiguos y los sistemas de protocolo de línea no podían transportar bytes sin formato. Base64 convierte bytes en caracteres ASCII imprimibles para que los datos puedan pasar intactos a través de esos canales.

Una vez que llegaron los datos, el destinatario los decodificó nuevamente en bytes. Codificar y decodificar son igualmente simples; no requieren claves, ni entropía, ni biblioteca criptográfica. La codificación, el cifrado y el hash tienen tres propósitos distintos y ofrecen tres garantías diferentes. La codificación transforma los datos en una representación diferente para que puedan pasar a través de un canal específico o usarse en un contexto específico. Base64, codificación de URL, representación hexadecimal e incluso comillas de escape en JSON son todas codificaciones. Son reversibles por cualquier persona y no requieren clave secreta.

Por qué existe Base64: transporte seguro de bytes a través de canales de texto, nunca confidencialidad

El objetivo es la compatibilidad del formato, no la confidencialidad. El cifrado, por el contrario, requiere una clave que sólo conocen las partes autorizadas. Sólo alguien con la clave correcta puede convertir el texto cifrado en texto sin formato. Sin la clave, el mensaje sigue siendo opaco incluso para alguien lo suficientemente sofisticado como para atacarlo. El hash es unidireccional por diseño: un hash criptográfico de una contraseña no se puede revertir en absoluto. Se utiliza para verificar que una contraseña coincida con un hash almacenado sin almacenar la contraseña en sí.

Un secreto de Kubernetes denominado contraseña-base de datos que contiene base64: dGlnZXJfZGF0YWJhc2VfYWRtaW4 en realidad no es secreto. Base64 es la codificación predeterminada que utiliza Kubernetes para almacenamiento, no para protección. Cualquiera que tenga acceso a YAML o a la base de datos etcd puede decodificar el valor en segundos. Las variables de entorno con claves API codificadas en base64 en un script de inicio enfrentan el mismo problema. Un encabezado de autenticación básica que envía Autorización: Nombre de usuario_base64 básico: contraseña a un servidor puede ser decodificado por cualquier proxy, herramienta de monitoreo u observador de red entre el cliente y el servidor.

Ejemplo resuelto: decodificar una cadena 'secreta' en el navegador: pegar, decodificar y el texto sin formato, sin ningún servidor involucrado

Si el canal es HTTP en lugar de HTTPS, la exposición es aún mayor. Base64 en estos contextos es una pista falsa: el verdadero secreto ya se ha visto comprometido al almacenarse o transmitirse en una forma recuperable. Un ejemplo resuelto concreta el problema. Supongamos que una clave API para un servicio de terceros aparece en un archivo de configuración como YXBpa2V5XzEyMzQ1Njc4OTAx. Copie esta cadena en el codificador y decodificador Base64 de su navegador, péguela en el campo de entrada y haga clic en Decodificar.

La herramienta devuelve apikey_1234567890. Esto sucedió instantáneamente, en su navegador, sin contactar a ningún servidor, sin necesidad de clave y sin realizar autenticación. Toda la operación dura menos de un segundo. Ahora supongamos que un actor malintencionado encuentra esta misma clave en un repositorio público de GitHub. Lo decodifican con la misma facilidad, con las herramientas que prefieran, y lo utilizan para acceder al servicio. Ya sea que la cadena permanezca oculta en un repositorio, viaje a través de una red o aparezca en los registros de aplicaciones, se puede revelar con una operación trivial disponible en todos los lenguajes de programación y en herramientas de navegador como ésta.

Dónde aparece este error: secretos de Kubernetes, archivos .env, encabezados de autenticación básica y recursos de aplicaciones móviles

El error aparece en todas partes porque Base64 es tan común que se asocia con la ofuscación por proximidad. Los desarrolladores ven datos codificados en Base64, infieren que alguien pensó que importaban y dejan secretos en esa forma. Un archivo .env que contiene API_KEY=VGhpcyBpcyBub3QgcmVhbGx5IGEgc2VjcmV0 le parece más seguro a un ingeniero junior que API_KEY=Esto no es realmente un secreto, aunque la decodificación requiere una sola operación. Las aplicaciones móviles agrupan tokens codificados en Base64 en recursos que cualquier descompilador puede extraer y decodificar. Las copias de seguridad de las bases de datos contienen contraseñas codificadas en Base64 en campos que deben buscarse, no protegerse.

En cada caso, alguien confundió codificación con cifrado y creó un archivo de secretos de texto sin formato que está formateado de una manera que requiere un paso adicional para leer. Qué hacer cuando se descubren secretos de Base64 depende del contexto.

Qué hacer en su lugar: administradores secretos, cifrado real en reposo y rotación de todo lo que ya esté comprometido

Si el secreto es un token, una clave API o una contraseña y ya se ha comprometido al control de versiones, trátelo como comprometido. Revocarlo, generar uno nuevo y actualizar cada lugar donde se utilizó. La confirmación histórica es parte del registro permanente del repositorio incluso si el secreto se elimina posteriormente en una nueva confirmación; cualquiera que tenga acceso al historial del repositorio puede encontrarlo.

La búsqueda de valores codificados en Base64 en repositorios es ahora una táctica de reconocimiento estándar, por lo que el hecho de que algo sea Base64 no lo convierte en secreto. Para cualquier operación en curso, nunca codifique secretos con Base64 y asuma que están protegidos. Utilice un administrador de secretos que almacene valores cifrados, con acceso controlado y auditables. Almacene solo la referencia o una derivación, no el secreto en sí, en el código y la configuración de la aplicación. El cifrado real en reposo significa que los datos se cifran con una clave almacenada por separado y son inútiles para cualquiera que no tenga esa clave.

Lo que esto no cubre: elegir un algoritmo de cifrado o un diseño de administración de claves

Una base de datos que cifra columnas confidenciales, un administrador de secretos que utiliza cifrado de sobre con claves en un módulo de seguridad de hardware o un administrador de contraseñas que deriva claves de cifrado de las contraseñas de los usuarios ofrecen una confidencialidad genuina. El cifrado a nivel de aplicación en el momento en que se crean los secretos, antes de que se almacenen en cualquier lugar, es aún más fuerte. Rotar los secretos que han sido expuestos, incluso si solo estuvieran codificados en Base64, elimina la ventana de oportunidad para un uso indebido. Si un secreto estaba en un repositorio, verifique los registros para ver cuándo se accedió a él y para qué se usó durante el período de exposición.

Para una seguridad continua, utilice tokens de corta duración emitidos por un servicio de autorización, no secretos estáticos almacenados en la configuración. Un token que caduca en una hora es menos valioso para un atacante incluso si está comprometido. Este artículo no cubre la elección de un algoritmo de cifrado, un diseño de administración de claves o una arquitectura de autenticación. Éstas son cuestiones de ingeniería más profundas con sus propios estándares y compensaciones. El punto es más simple: Base64 no es una de las herramientas para ninguno de esos problemas. Es una conversión de formato para transporte y almacenamiento.

Conclusión: trate Base64 como texto sin formato: cómo el codificador y descodificador Base64 logra entenderlo con un solo clic, sin que el secreto salga de su pestaña.

No permita que la aparición de Base64 en un repositorio, un archivo de configuración o un registro le indique que los datos están protegidos. Cualquier herramienta que pueda leer texto puede decodificar Base64 y la operación es instantánea y determinista. Leer una cadena codificada en Base64 como texto cifrado es un malentendido común y deja secretos reales a la vista. Los desarrolladores a menudo se dan cuenta de esto solo después de encontrar secretos de Base64 en producción o en una auditoría. Se obtiene una nueva perspectiva cuando un ingeniero decodifica una cadena de muestra localmente y ve aparecer instantáneamente el texto sin formato original.

La herramienta deja claro que es inevitable: codificar no es cifrar. Una vez que esa distinción es clara, el seguimiento es automático. Cada secreto Base64 en el código base debe rotarse. Cada lugar donde se utiliza ese secreto debe actualizarse. Se debe evaluar la ventana de exposición. En el futuro, los gestores secretos y el cifrado real deben sustituir a la codificación en esta función. El codificador y decodificador Base64 muestra exactamente qué tan rápido y fácil es revertirlo, sin que su secreto salga del navegador. Trate esa facilidad como la postura de seguridad real: si usted puede decodificarla en un segundo, cualquier otra persona también puede hacerlo.