Vigil@nce : Noyau Linux, utilisation d’appels systèmes interdits sous x86_64
mars 2009 par Vigil@nce
SYNTHÈSE DE LA VULNÉRABILITÉ
Sur une machine Intel x86_64, un attaquant local peut contourner
les mécanismes de restriction des appels système.
Gravité : 1/4
Conséquences : transit de données, camouflage
Provenance : shell utilisateur
Moyen d’attaque : aucun démonstrateur, aucune attaque
Compétence de l’attaquant : expert (4/4)
Confiance : confirmé par l’éditeur (5/5)
Diffusion de la configuration vulnérable : élevée (3/3)
Nombre de vulnérabilités dans ce bulletin : 2
Date création : 02/03/2009
PRODUITS CONCERNÉS
– Linux noyau
DESCRIPTION DE LA VULNÉRABILITÉ
Les numéros des appels système sont différents en 32 bits (x86) et
en 64 bits (x86_64) :
– en 32 bits : 1=exit, 2=fork, 3=read, 4=write, 5=open, 6=close,
etc.
– en 64 bits : 0=read, 1=write, 2=open, 3=close, etc.
Par exemple, open() peut être appelé via 32b:5 ou 64b:2.
Un processus 32 bits peut faire un appel 64 bits avec les
instructions processeur ljmp et syscall. Un processus 64 bits peut
faire un appel 32 bits avec l’interruption 0x80. Cependant, dans
ces deux cas, deux mécanismes de restriction des appels système ne
détectent pas que l’appel système est fait sur taille (32/64)
différente de la taille initiale du processus. Par exemple, si
l’appel système open() est bloqué, un processus 64 bits (le numéro
2 est bloqué) peut passer en 32 bits et employer le numéro 5
accéder à open().
Le mécanisme "seccomp", activé avec la directive de compilation
"CONFIG_SECCOMP=y", utilise la fonction secure_computing(), qui
est affectée par cette vulnérabilité. [grav:1/4 ; CESA-2009-004]
Le mécanisme "syscall-audit", utilise la fonction
audit_syscall_entry(), qui est affectée par cette vulnérabilité.
[grav:1/4]
Un attaquant local peut donc utiliser des appels système 32/64
bits sur une machine 64 bits afin de contourner ces mécanismes.
CARACTÉRISTIQUES
Références : CESA-2009-004, VIGILANCE-VUL-8500