AWS - DynamoDB Enum
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Amazon DynamoDB es presentado por AWS como una base de datos NoSQL de clave-valor, completamente gestionada y sin servidor, diseñada para impulsar aplicaciones de alto rendimiento sin importar su tamaño. El servicio garantiza características robustas que incluyen medidas de seguridad inherentes, copias de seguridad ininterrumpidas, replicación automatizada en múltiples regiones, almacenamiento en caché en memoria integrado y útiles utilidades de exportación de datos.
En el contexto de DynamoDB, en lugar de establecer una base de datos tradicional, se crean tablas. Cada tabla requiere la especificación de una clave de partición como un componente integral de la clave primaria de la tabla. Esta clave de partición, esencialmente un valor hash, juega un papel crítico tanto en la recuperación de elementos como en la distribución de datos a través de varios hosts. Esta distribución es fundamental para mantener tanto la escalabilidad como la disponibilidad de la base de datos. Además, hay una opción para incorporar una clave de ordenación para refinar aún más la organización de los datos.
Por defecto, DynamoDB utiliza una clave KMS que **pertenece a Amazon DynamoDB,** ni siquiera la clave gestionada por AWS que al menos pertenece a tu cuenta.
Es posible programar la generación de copias de seguridad de la tabla o crearlas a demanda. Además, también es posible habilitar la recuperación en el tiempo (PITR) para una tabla. La recuperación en el tiempo proporciona copias de seguridad continuas de tus datos de DynamoDB durante 35 días para ayudarte a protegerte contra operaciones de escritura o eliminación accidentales.
También es posible exportar los datos de una tabla a S3, pero la tabla debe tener PITR habilitado.
Hay una GUI para servicios locales de Dynamo como DynamoDB Local, dynalite, localstack, etc., que podría ser útil: https://github.com/aaronshaf/dynamodb-admin
Hay formas de acceder a los datos de DynamoDB con sintaxis SQL, por lo tanto, inyecciones SQL típicas también son posibles.
En DynamoDB se pueden usar diferentes condiciones para recuperar datos, como en una inyección NoSQL común, si es posible encadenar más condiciones para recuperar datos, podrías obtener datos ocultos (o volcar toda la tabla). Puedes encontrar aquí las condiciones soportadas por DynamoDB: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html
Ten en cuenta que se soportan diferentes condiciones si los datos se acceden a través de query
o a través de scan
.
De hecho, las acciones de Query necesitan especificar la condición "EQ" (igual) en la clave primaria para funcionar, lo que las hace mucho menos propensas a inyecciones NoSQL (y también limita mucho la operación).
Si puedes cambiar la comparación realizada o agregar nuevas, podrías recuperar más datos.
¡Esta vulnerabilidad se basa en el Filtro de Escaneo de dynamodb que ahora está obsoleto!
DynamoDB acepta objetos Json para buscar datos dentro de la base de datos. Si descubres que puedes escribir en el objeto json enviado para buscar, podrías hacer un volcado de la base de datos, todo el contenido.
Por ejemplo, inyectando en una solicitud como:
un atacante podría inyectar algo como:
1000"}],"ComparisonOperator": "GT","AttributeValueList": [{"N": "0
arreglar la condición "EQ" buscando el ID 1000 y luego buscando todos los datos con una cadena de Id mayor que 0, que es todo.
Otro ejemplo vulnerable usando un inicio de sesión podría ser:
Esto sería vulnerable a:
Algunos SDK permiten usar una cadena que indica el filtrado que se debe realizar, como:
Debes saber que al buscar en DynamoDB para sustituir un valor de atributo en expresiones de filtro mientras se escanean los elementos, los tokens deben comenzar con el carácter :
. Tales tokens serán reemplazados con el valor de atributo real en tiempo de ejecución.
Por lo tanto, un inicio de sesión como el anterior puede ser eludido con algo como:
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)