# Identificando vulnerabilidades en S3

{% hint style="danger" %}
¿Crees tener lo que se necesita para ser un experto en Pentesting contra AWS? Si nuestro libro te abrió los ojos a las posibilidades de la ciberseguridad ofensiva o si ya cuentas con habilidades en este campo, es momento de subir de nivel. Te retamos a certificarte en el [CPNA - Curso Profesional de Pentesting Contra AWS](https://spartan-cybersec.com/cursos/pentesting-contra-la-nube-de-aws/). No será fácil: te enfrentarás a un examen riguroso de 12 horas donde deberás hackear una infraestructura completa alojada en AWS. ¿Listo para el desafío? Acepta el reto y demuestra tu verdadero potencial.
{% endhint %}

Las configuraciones incorrectas en los depósitos de Amazon Web Services (AWS) S3 representan uno de los vectores de riesgo más significativos en la nube, especialmente debido a los permisos de acceso de lectura y escritura mal configurados. Estos riesgos no solo comprometen la seguridad de los datos almacenados, sino que también pueden tener implicaciones legales y financieras graves para las organizaciones.&#x20;

{% embed url="https://www.youtube.com/watch?v=kp8TEk8hZGc" %}

## <mark style="color:orange;">Riesgo de Filtración de Datos por Permisos de Lectura Pública</mark>

Un bucket de S3 configurado incorrectamente para permitir acceso público de lectura puede exponer información sensible del cliente, secretos comerciales, o datos confidenciales a internet. Esta exposición no autorizada puede resultar en:

* <mark style="color:orange;">**Violaciones de Privacidad**</mark><mark style="color:orange;">:</mark> Datos personales, registros financieros o información de salud expuestos pueden llevar a violaciones de normativas de protección de datos como GDPR, HIPAA, entre otras.
* <mark style="color:orange;">**Daño a la Reputación**</mark><mark style="color:orange;">:</mark> La filtración de datos sensibles puede erosionar la confianza del cliente y dañar la reputación de una organización.
* <mark style="color:orange;">**Pérdidas Financieras**</mark><mark style="color:orange;">:</mark> La exposición de datos críticos puede resultar en pérdidas financieras directas, ya sea por la explotación de la información expuesta o por sanciones impuestas por reguladores.

## <mark style="color:orange;">Riesgo de Manipulación y Malware por Permisos de Escritura Pública</mark>

Por otro lado, un bucket de S3 que permite acceso de escritura pública puede ser abusado de varias maneras:

* <mark style="color:orange;">**Distribución de Malware**</mark><mark style="color:orange;">:</mark> Los atacantes pueden cargar malware o contenido malicioso, utilizando el bucket como plataforma para lanzar ataques o distribuir software dañino.
* <mark style="color:orange;">**Defacement de Sitios Web**</mark><mark style="color:orange;">:</mark> Si el bucket se utiliza para alojar un sitio web, los atacantes pueden modificar o reemplazar los archivos existentes, alterando el contenido del sitio web (defacement).
* <mark style="color:orange;">**Cargas no Autorizadas**</mark><mark style="color:orange;">:</mark> Los atacantes pueden utilizar el bucket para almacenar grandes cantidades de datos ilegales o no deseados, incurriendo en costos significativos para la víctima.
* <mark style="color:orange;">**Ransomware**</mark><mark style="color:orange;">:</mark> Existe el riesgo de que los atacantes cifren archivos almacenados en el bucket y exijan un rescate para su descifrado, similar a un ataque de ransomware tradicional.

Para los Buckets siempre es recomendable revisar la política del Bucket ya que en esta podemos encontrar fallas de seguridad:

El enlace para la política utilizada en este Bucket es:

<figure><img src="https://1420718843-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjUr7ifmUiydm8bW32KgO%2Fuploads%2FW8VpHekkmxOPzuRszVzD%2Fimage.png?alt=media&#x26;token=770aac17-12cc-495e-849b-cf1f478dc98b" alt=""><figcaption></figcaption></figure>

La politica contiene lo siguiente:

{% code title="politica-bucket.json" %}
```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::spartan-cpna",
        "arn:aws:s3:::spartan-cpna/*"
      ]
    }
  ]
}
```
{% endcode %}

Dependiendo de los requerimientos, podríamos decir que en este Bucket hay una vulnerabilidad que podría ser categorizada como baja.

Por buenas prácticas, Se recomienda restringir siempre los tipos de archivos subidos por medio de una política sobre los Buckets utilizando listas blancas.

Por ejemplo:

```json
"Resource": [
  "arn:aws:s3:::<yourbucket>/*.jpg",
  "arn:aws:s3:::<yourbucket>/*.png",
  "arn:aws:s3:::<yourbucket>/*.gif",
]
```

La politica completa quedaria asi:

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::spartan-cpna/*.jpg",
        "arn:aws:s3:::spartan-cpna/*.png",
        "arn:aws:s3:::spartan-cpna/*.gif",
      ]
    }
  ]
}
```

En resumen, esta política de bucket permite al titular de la política realizar cualquier acción (`s3:*`) sobre los archivos con extensiones `.jpg`, `.png`, y `.gif` que estén dentro del bucket llamado `spartan-cpna`.

En resumen, la política actual del Bucket podría permitir a un atacante subir archivos con extensiones categorizadas como maliciosas como por ejemplo EXE.

Por otro lado, si durante la auditoria encontramos un Bucket con acceso público y este contiene información sensible; podríamos afirmar que existe una vulnerabilidad alta.

Ya que un bucket s3 mal configurado que permite el acceso público de lectura puede provocar una filtración de datos del cliente. En segundo lugar, un bucket s3 mal configurado que permite el acceso de escritura pública se puede usar para servir o controlar malware, dañar un sitio web alojado en un servicio de almacenamiento en la nube, almacenar cualquier cantidad de datos a su cargo e incluso cifrar sus archivos con el fin de exigir un rescate.

```bash
C:\Users\gerh-> aws s3 ls s3://cpna-spartan-public --no-sign-request
                           PRE Importante/
2023-10-10 22:17:04        185 assumerolepolicy.json
2023-04-28 09:21:46      72561 backup.csv
2024-03-06 19:10:40         19 ejemplo.txt
2023-04-28 09:20:42      38616 nc.exe
2024-03-05 17:05:33         11 nc2.exe
2023-10-10 22:17:05        283 politica-bucket.json
```

En la evidencia previa, estamos listando el contenido del Bucket sin credenciales.

Si tenemos el permiso de `s3:PutObject`, podríamos reportar que este Bucket podría ser usado por ciberdelincuentes para la distribución de malware.

```bash
C:\Users\gerh-> aws s3 cp ./mimikatz.exe s3://cpna-spartan-public --no-sign-request
upload: .\mimikatz.exe to s3://cpna-spartan-public/mimikatz.exe

C:\Users\gerh-> aws s3 ls s3://cpna-spartan-public --no-sign-request
                           PRE Importante/
2023-10-10 22:17:04        185 assumerolepolicy.json
2023-04-28 09:21:46      72561 backup.csv
2024-03-06 19:10:40         19 ejemplo.txt
2023-04-28 09:20:42      38616 nc.exe
2024-03-05 17:05:33         11 nc2.exe
2024-03-05 17:05:33    1111111 mimikatz.exe
2023-10-10 22:17:05        283 politica-bucket.json
```

Finalmente, también se debe revisar los siguientes mecanismos de seguridad adicionales:

<figure><img src="https://1420718843-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjUr7ifmUiydm8bW32KgO%2Fuploads%2FyXhChNneTIvYznzARMVo%2Fimage.png?alt=media&#x26;token=244d2930-88e0-4440-bd7b-a52ecd4de0df" alt=""><figcaption></figcaption></figure>

Estas configuraciones ofrecen una capa adicional de protección para garantizar que los objetos S3 (archivos) no puedan ser eliminados accidental o intencionalmente por los usuarios de AWS que tienen acceso a los Buckets.

Y el control de versiones de Buckets, le permiten recuperar objetos ante su eliminación o sobreescritura accidental.

{% hint style="info" %}
_En ciertas ocasiones, los Buckets son utilizados para almacenar sitios web estáticos y si se tiene acceso de escritura, se podría hacer una inclusión de código malicioso por medio de Javascript._
{% endhint %}
