Padding Oracle Attack
hackingDéfinition
L'attaque par oracle de padding est une attaque cryptographique contre des chiffrements par blocs en mode CBC (Cipher Block Chaining) qui exploite un comportement d'erreur différentiel : le serveur retourne des erreurs différentes selon que le padding d'un bloc déchiffré est valide ou invalide. Cette information 'oracle' permet de déchiffrer des données chiffrées sans connaître la clé. Dans le chiffrement CBC avec PKCS#7 padding, le dernier bloc est rembourré pour atteindre la taille d'un bloc (16 octets pour AES). Un padding valide se termine par N octets de valeur N. Un attaquant qui contrôle le ciphertext et peut observer si le padding est valide peut effectuer une attaque bit-flipping : en modifiant des octets du bloc ciphertext précédent et en observant les erreurs de padding, il peut retrouver la valeur déchiffrée octet par octet. L'attaque de Vaudenay (2002) l'a formalisée. Pour déchiffrer le dernier octet d'un bloc : l'attaquant modifie le dernier octet du bloc ciphertext précédent de 0x00 à 0xFF. Pour chaque valeur, si le serveur retourne 'padding valide', l'octet déchiffré modifié XOR la valeur testée = 0x01 (padding d'un octet). Cette relation permet de calculer l'octet déchiffré original, et le processus se répète pour tous les octets. Des implémentations connues vulnérables incluent : les premières versions d'ASP.NET (CVE-2010-3332, 'Padding Oracle on Downgraded Legacy Encryption'), Amazon ELB, et des frameworks web utilisant la cryptographie symétrique pour des cookies de session sans authentification. Des outils comme PadBuster et padbuster.py automatisent l'attaque. L'attaque nécessite environ 128 requêtes par octet à déchiffrer (256 valeurs possibles × 0.5 en moyenne), soit ~2048 requêtes pour un bloc de 16 octets, ce qui est automatisable. La protection standard est d'utiliser des chiffrements authentifiés (AES-GCM, AES-CCM, ChaCha20-Poly1305) qui incluent un MAC (Message Authentication Code) rendant la manipulation du ciphertext détectable. HMAC-then-Encrypt est une alternative.
Fonctionnement
Pour chaque octet à déchiffrer (de la fin vers le début du bloc) : 1) envoyer C'[i] = 0x00..0xFF comme modification du ciphertext, observer la réponse, 2) quand padding valide pour valeur V : intermédiaire[i] = V XOR target_padding (0x01 pour le premier), 3) plaintext[i] = intermédiaire[i] XOR original_C[i]. Répéter pour les octets précédents en ajustant les octets déjà connus pour maintenir le padding cible. ~128 requêtes par octet.
Exploitation offensive
L'attaque par oracle de padding peut déchiffrer des tokens de session, des cookies de 'Remember me', des paramètres chiffrés dans des URLs, et tout ciphertext CBC accessible via un oracle. Elle peut aussi être inversée pour chiffrer des données arbitraires (construire un ciphertext valide avec un plaintext choisi), permettant la falsification de tokens d'authentification.
Détection et mitigation
Les logs web montrent des patterns d'erreurs décryptage avec des variations systématiques sur un paramètre chiffré. La mitigation fondamentale est l'utilisation de chiffrements AEAD (Authenticated Encryption with Associated Data) comme AES-GCM. À défaut, HMAC-then-Encrypt avec vérification du HMAC AVANT déchiffrement protège contre cette attaque.
Articles liés
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés. 2.1.7
Un projet cybersécurité ?
Expert dispo · Réponse 24h