Large Bin Attack
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Para más información sobre qué es un large bin, consulta esta página:
Bins & Memory AllocationsEs posible encontrar un gran ejemplo en how2heap - large bin attack.
Básicamente aquí puedes ver cómo, en la última versión "actual" de glibc (2.35), no se verifica: P->bk_nextsize
permitiendo modificar una dirección arbitraria con el valor de un chunk de large bin si se cumplen ciertas condiciones.
En ese ejemplo puedes encontrar las siguientes condiciones:
Se asigna un chunk grande
Se asigna un chunk grande más pequeño que el primero pero en el mismo índice
Debe ser más pequeño, así que en el bin debe ir primero
(Se crea un chunk para evitar la fusión con el chunk superior)
Luego, el primer chunk grande se libera y se asigna un nuevo chunk más grande que él -> Chunk1 va al large bin
Luego, el segundo chunk grande se libera
Ahora, la vulnerabilidad: El atacante puede modificar chunk1->bk_nextsize
a [target-0x20]
Luego, se asigna un chunk más grande que el chunk 2, por lo que chunk2 se inserta en el large bin sobrescribiendo la dirección chunk1->bk_nextsize->fd_nextsize
con la dirección de chunk2
Hay otros escenarios potenciales, la cuestión es añadir al large bin un chunk que sea más pequeño que un chunk X actual en el bin, por lo que debe ser insertado justo antes de él en el bin, y necesitamos poder modificar el bk_nextsize
de X ya que ahí es donde se escribirá la dirección del chunk más pequeño.
Este es el código relevante de malloc. Se han añadido comentarios para entender mejor cómo se sobrescribió la dirección:
Esto podría usarse para sobrescribir la variable global global_max_fast
de libc para luego explotar un ataque de fast bin con bloques más grandes.
Puedes encontrar otra gran explicación de este ataque en guyinatuxedo.
Ataque de large bin en la misma situación en que aparece en how2heap.
La primitiva de escritura es más compleja, porque global_max_fast
es inútil aquí.
Se necesita FSOP para terminar el exploit.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)