Conclusiones TL;DR
En menos de una hora utilizando los datos de Censys , encontramos 7.640 buckets S3 potenciales, 49 completamente abiertos (World Read + Write), 16 buckets con escritura anónima, 1.235 con acceso de lectura anónimo, y mucho más.
Encontrar objetivos S3 con Censys
Amazon S3 (Amazon Simple Storage Service) es un producto que proporciona almacenamiento de objetos a través de la web y es utilizado por innumerables personas y organizaciones en todo el mundo. Es fácil de usar, pero por desgracia, es muy fácil de configurar mal. El 20 de diciembre de 2022, saltó la noticia de que los buckets S3 de la editorial educativa McGraw Hill estaban expuestos a Internet sin la configuración adecuada, dejando la información personal de más de 100.000 estudiantes en manos de piratas informáticos. Y esto no es un suceso raro; ocurre una y otra y otra vez.
Aunque Censys no dispone actualmente de un escáner S3 nativo, podemos utilizar los datos que recopilamos para alimentar otras herramientas. Cuando un usuario crea un bucket, se le da un nombre único que luego se traduce en DNS; por ejemplo, si yo llamo a un bucket de S3 "censys," entonces ese bucket estaría disponible a través del nombre DNS "censys.s3.amazonaws.com". Así que antes de que podamos determinar si un cubo de S3 es de acceso público, debemos saber qué nombre se le dio al objeto de almacenamiento en sí.
Muchas herramientas de seguridad pueden ayudar a los usuarios a encontrar buckets S3 abiertos, pero una de las partes más difíciles es el descubrimiento de los objetivos (los nombres de los buckets). Un método estándar es utilizar la creación de nombres por fuerza bruta o combinaciones aleatorias de palabras e intentar solicitar el nombre a AWS. Este método es la forma en que muchos atacantes maliciosos encuentran la fruta madura de los cubos S3 inseguros.
Dado que Censys ha escaneado e indexado un gran número de hosts en Internet (alrededor de 276 millones de hosts y 2.100 millones de servicios en el momento de escribir estas líneas), podemos aprovechar estos datos para encontrar posibles nombres de cubos S3, que luego podemos introducir en la herramienta de escaneo S3 de código abierto S3Scanner para determinar los tipos de acceso disponibles.
En primer lugar, creamos una consulta SQL que volcaba el contenido de cualquier cuerpo HTTP que incluyera la palabra "s3" en Internet en otra base de datos que contenía metadatos sobre el host. A continuación, escribimos un script python que recorría cada uno de estos cuerpos de respuesta HTTP y analizaba las URL similares a s3 para extraer los nombres de los buckets de s3, que luego se escribían en un archivo.
Una vez finalizada la ejecución de este script, utilizamos el archivo de salida que sólo contenía los nombres de los buckets como entrada para la herramienta S3Scanner:
Hallazgos
Pudimos identificar positivamente 7.640 objetivos S3 potenciales en poco tiempo sin recurrir a la generación aleatoria de nombres. Después de ejecutar S3Scanner en estos resultados, encontramos lo siguiente:
- 49 Los buckets de S3 permitían a los usuarios anónimos un control total sobre la instancia (Lectura/Escritura/ACP Lectura/ACP Escritura).
- 16 buckets de S3 permitían a usuarios anónimos escribir en la instancia
- 18 buckets de S3 permitieron a un usuario anónimo escribir en la política de control de acceso (ACP)
- 515 buckets S3 permitieron a un usuario anónimo leer el ACP
- 1.235 buckets S3 eran legibles por todo el mundo