Large Bin Attack
Last updated
Last updated
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Para más información sobre qué es un large bin, consulta esta página:
Es 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 para que vaya primero en el bin
(Se crea un chunk para evitar la fusión con el chunk superior)
Luego, se libera el primer chunk grande y se asigna un nuevo chunk más grande que él -> Chunk1 va al large bin
Luego, se libera el segundo chunk grande
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 el chunk2 se inserta en el large bin sobrescribiendo la dirección chunk1->bk_nextsize->fd_nextsize
con la dirección de chunk2
Existen otros escenarios potenciales, la idea es agregar 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 en el bin, y necesitamos poder modificar bk_nextsize
de X ya que ahí 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 ser utilizado para sobrescribir la variable global global_max_fast
de libc y luego explotar un ataque de fast bin con fragmentos más grandes.
Puedes encontrar otra excelente explicación de este ataque en guyinatuxedo.
Ataque de large bin en la misma situación que aparece en how2heap.
La primitiva de escritura es más compleja, porque global_max_fast
es inútil aquí.
Se necesita FSOP para finalizar el exploit.
Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)