Tcache机制出现是在glibc版本为2.26的时候 glibc引入tcache的原因是为了更进一步加快chunk的分配 但一方面却在安全性上大打折扣。
示例代码取自ctf-all-in-one
Tcache Double Free In Glibc2.26
#include <stdlib.h>
#include <stdio.h>
int main() {
void *p1 = malloc(0x10);
free(p1);
free(p1);
return 0;
}
没错 直接free两次就可以实现double free 因为在Tcache中free的时候是直接挂入到tcache的 没有任何check 所以连续两次free同一个chunk 是完全可行的
House Of Spirit In Tcache In Glibc2.26
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
malloc(1); // init heap
unsigned long long *a, *b;
unsigned long long fake_chunk[64] __attribute__ ((aligned (16)