> For the complete documentation index, see [llms.txt](https://docs.pabloarrabal.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.pabloarrabal.com/explotacion/vulnerabilidades/padding-oracle-attack-poo.md).

# Padding Oracle Attack (POO)

## ¿Que es un Padding Oracle Attack?

El Padding Oracle Attack es un ataque criptográfico que se realiza con la finalidad de usar una cookie de un usuario administrador o con privilegios en un aplicativo web mediante la modificación de la cookie

## ¿Como funciona?

El POO se aprovecha de una vulnerabilidad en el modo de operación CBC (Cipher Block Chaining) para descifrar la cookie sin tener la clave.

El modo CBC es un modo de operación de cifrado por bloques, este se utiliza para cifrar mensajes de longitud variable. Este funciona de manera que cifra cada bloque de texto plano uno detrás de otro y posteriormente xoreando el bloque cifrado con el bloque anterior. El resultado de estas operaciones, se utiliza para cifrar el siguiente bloque.

<figure><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/8/80/CBC_encryption.svg/902px-CBC_encryption.svg.png" alt=""><figcaption></figcaption></figure>

El modo de cifrado CBC utiliza un relleno llamado PKCS#7 para que todos los bloques tengan el mismo tamaño, este consiste en un numero de bytes que se añaden al final de texto plano. Dichos bytes, contienen el numero de bytes de relleno que se agregaran al texto plano:

<figure><img src="https://271831323-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbbtAYwqVMCAFE0gptbZ0%2Fuploads%2FnHEWC2OfGGro5BpOIfoA%2FPKCS%235%2B_%2BPKCS%237%2BPadding%2BWhen%2Bpad%2Bwith%2Bn%2Bbytes%2C%2Ball%2Bof%2Bthem%2Bhaving%2Bvalue%2Bn..jpg?alt=media&amp;token=8813594f-5f5a-4557-8437-b4dce6401ff3" alt=""><figcaption></figcaption></figure>

<figure><img src="https://271831323-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbbtAYwqVMCAFE0gptbZ0%2Fuploads%2FMKvO5gsHn5y8I1tepM38%2Fpadding.png?alt=media&amp;token=066a265b-ea97-43e3-a149-0f1b1cd94967" alt=""><figcaption></figcaption></figure>

El POO aprovecha el hecho de que el modo CBC revele si el relleno es valido o no, si es valido se puede descifrar, si en cambio no es valido no se podrá descifrar y devolverá un error. Por ejemplo:&#x20;

El atacante tiene un bloque de texto cifrado conocido. El atacante intenta cambiar el primer bit del texto cifrado. El atacante envía el texto cifrado modificado al sistema que descifra el mensaje. El sistema devuelve un error. El atacante sabe que el bit cambiado no era parte del relleno. El atacante repite los pasos anteriores hasta que haya descifrado todos los bits del texto cifrado.

<figure><img src="https://271831323-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbbtAYwqVMCAFE0gptbZ0%2Fuploads%2FUxeUkOYGRMiZhyO3b7XV%2FCBC.png?alt=media&amp;token=26d9659a-eed8-477b-a9a3-7a2ef1b6a4c5" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}

1. Enlaces de Interés:
2. <https://book.hacktricks.xyz/crypto-and-stego/padding-oracle-priv>
3. <https://keepcoding.io/blog/que-es-un-padding-oracle-attack/>
4. <https://slideplayer.com/slide/4625352/>
5. <https://sysfatal.github.io/oracle.html>
6. <https://www.youtube.com/watch?v=lkPBTJ3yiCI&ab_channel=SecureCodeWarrior>
   {% endhint %}
