GitGuardian es famoso por su anual Expansión del estado de los secretos informe. En su informe de 2023, encontraron más de 10 millones de contraseñas, claves API y otras credenciales expuestas en confirmaciones públicas de GitHub. Las conclusiones de su informe de 2024 no solo destacaron 12,8 millones nuevo secretos expuestos en GitHub, pero un número en el popular repositorio de paquetes de Python PyPI.
PyPI, abreviatura de Python Package Index, alberga más de 20 terabytes de archivos que están disponibles gratuitamente para su uso en proyectos de Python. Si alguna vez has escrito pip install [name of package], probablemente sacó ese paquete de PyPI. Mucha gente también lo usa. Ya sea GitHub, PyPI u otros, el informe afirma que «los paquetes de código abierto representan aproximadamente el 90% del código que se ejecuta en producción hoy en día.» Es fácil ver por qué es así cuando estos paquetes ayudan a los desarrolladores a evitar la reinvención de millones de ruedas todos los días.
En el informe de 2024, GitGuardian informó haber encontrado más de 11.000 expuestos. único secretos, de los cuales 1000 se agregarán a PyPI en 2023. Eso no es mucho en comparación con los 12,8 millones de nuevos secretos agregados a GitHub en 2023, pero GitHub es órdenes de magnitud más grande.
Un hecho más preocupante es que, de los secretos introducidos en 2017, casi 100 seguían siendo válidos 6 o 7 años después. No tenían la capacidad de comprobar la validez de todos los secretos. Aun así, se descubrieron más de 300 secretos únicos y válidos. Si bien esto es levemente alarmante para el observador casual y no necesariamente una amenaza para los desarrolladores aleatorios de Python (a diferencia de los 116 paquetes maliciosos reportados por ESET a fines de 2023), es una amenaza de magnitud desconocida para los propietarios de esos paquetes.
Si bien GitGuardian tiene cientos de detectores de secretos, que ha desarrollado y perfeccionado a lo largo de los años, algunos de los secretos más comunes que detectó en su estudio general de 2023 fueron las claves API de OpenAI, las claves API de Google y las claves de Google Cloud. No es difícil para un programador competente escribir una expresión regular para encontrar un formato secreto único y común. E incluso si arrojara muchos falsos positivos, automatizar las comprobaciones para determinar si eran válidos podría ayudar al desarrollador a encontrar un pequeño tesoro de secretos explotables.
Ahora es una lógica aceptada que si una clave se ha publicado en un repositorio público como GitHub o PyPI, debe considerarse comprometida. En las pruebas, fichas de miel (una especie de clave API «descolgada» sin acceso a ningún recurso) han sido probados por bots para comprobar su validez un minuto después de su publicación en GitHub. De hecho, los Honeytokens actúan como un «canario» para un número cada vez mayor de desarrolladores. Dependiendo de dónde haya colocado un token de miel específico, puede ver que alguien ha estado husmeando allí y obtener información sobre ellos en función de los datos de telemetría recopilados cuando se usa el token de miel.
La mayor preocupación cuando se publica accidentalmente un secreto no es sólo que un actor malintencionado pueda aumentar su factura de la nube. Es a donde pueden ir desde allí. Si se filtrara un token de AWS IAM con permisos excesivos, ¿qué podría encontrar ese actor malicioso en los depósitos o bases de datos de S3 a los que otorga acceso? ¿Podría ese actor malicioso obtener acceso a otro código fuente y corromper algo que será entregado a muchos otros?
Ya sea que estés guardando secretos en GitHub, PyPI, NPM o cualquier colección pública de código fuente, el mejor primer paso cuando descubres que se ha filtrado un secreto es revocarlo. Recuerde esa pequeña ventana entre la publicación y la explotación de un token de miel. Una vez que se ha publicado un secreto, es probable que haya sido copiado. Incluso si no has detectado un uso no autorizado, debe suponga que alguien no autorizado y malicioso ahora lo tiene.
Incluso si su código fuente está en un repositorio privado, abundan las historias de actores maliciosos que obtienen acceso a repositorios privados mediante ingeniería social, phishing y, por supuesto, secretos filtrados. Si hay una lección en todo esto, es que los secretos de texto plano en el código fuente eventualmente se descubren. Ya sea que se publiquen accidentalmente en público o que alguien con acceso que no debería tener los encuentre, los encontrará.
En resumen, dondequiera que almacene o publique su código fuente, ya sea un repositorio privado o un registro público, debe seguir algunas reglas simples:
- No almacene secretos en texto plano en el código fuente.
- Evite que aquellos que se apoderan de un secreto vayan a una expedición manteniendo estrictamente los privilegios que esos secretos otorgan.
- Si descubre que filtró un secreto, revoquelo. Es posible que necesite tomarse un poco de tiempo para asegurarse de que sus sistemas de producción tengan el secreto nuevo y revelado para la continuidad del negocio, pero revocarlo tan pronto como sea posible.
- Implementar automatizaciones como las que ofrece GitGuardian para asegurarse de no depender de humanos imperfectos para observar perfectamente las mejores prácticas en torno a la gestión de secretos.
Si los sigue, es posible que no tenga que aprender las lecciones que 11.000 propietarios de secretos probablemente hayan aprendido de la manera más difícil al publicarlos en PyPI.