AWS - DynamoDB Enum
DynamoDB
Información Básica
Amazon DynamoDB es presentado por AWS como una base de datos NoSQL de clave-valor totalmente gestionada y sin servidor, diseñada para impulsar aplicaciones de alto rendimiento independientemente de 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 utilidades de exportación de datos convenientes.
En el contexto de DynamoDB, en lugar de establecer una base de datos tradicional, se crean tablas. Cada tabla exige 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, desempeña un papel crítico tanto en la recuperación de elementos como en la distribución de datos entre varios hosts. Esta distribución es fundamental para mantener tanto la escalabilidad como la disponibilidad de la base de datos. Además, existe la opción de incorporar una clave de ordenación para refinar aún más la organización de datos.
Encriptación
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.
Copias de Seguridad y Exportación a S3
Es posible programar la generación de copias de seguridad de tablas o crearlas bajo demanda. Además, también es posible habilitar la recuperación en un momento específico (PITR) para una tabla. La recuperación en un momento específico proporciona copias de seguridad continuas de los datos de tu 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 necesita tener PITR habilitado.
GUI
Existe una interfaz gráfica de usuario para servicios Dynamo locales como DynamoDB Local, dynalite, localstack, etc, que podría ser útil: https://github.com/aaronshaf/dynamodb-admin
Enumeración
Acceso no autenticado
AWS - DynamoDB Unauthenticated AccessElevación de privilegios
AWS - DynamoDB PrivescPost Explotación
AWS - DynamoDB Post ExploitationPersistencia
AWS - DynamoDB PersistenceInyección en DynamoDB
Inyección SQL
Existen formas de acceder a los datos de DynamoDB con sintaxis SQL, por lo tanto, las inyecciones SQL típicas también son posibles.
Inyección NoSQL
En DynamoDB se pueden utilizar diferentes condiciones para recuperar datos, al igual que 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). Aquí puedes encontrar las condiciones admitidas por DynamoDB: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html
Ten en cuenta que se admiten diferentes condiciones si los datos se están accediendo a través de query
o a través de scan
.
De hecho, las acciones de Consulta necesitan especificar la condición "EQ" (igual) en la clave primaria para funcionar, lo que hace que sea mucho menos propenso 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.
Inyección de Json crudo
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 que la base de datos volcara todos los contenidos.
Por ejemplo, inyectando en una solicitud como:
un atacante podría inyectar algo como:
1000"}],"ComparisonOperator": "GT","AttributeValueList": [{"N": "0
corregir la condición "EQ" buscando el ID 1000 y luego buscando todos los datos con un Id mayor a 0, que es todo.
Inyección de :property
Algunos SDK permiten usar una cadena que indica el filtrado a realizar como:
Necesitas 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 :
. Estos tokens serán reemplazados con el valor real del atributo en tiempo de ejecución.
Por lo tanto, un inicio de sesión como el anterior puede ser evadido con algo como:
Last updated