Skip to content

Glossary

Task port

Le Mach port qui représente un processus auprès du noyau — et qui, sous forme de send right, confère une capacité arbitraire de lecture/écriture/exécution sur ce processus.

Un task port est un Mach port qui nomme une task — le terme XNU pour l'état côté noyau d'un processus (son espace d'adressage, son espace de noms de ports, ses threads).

Détenir un send right sur un task port permet d'appeler des méthodes sur la task : lire sa mémoire (mach_vm_read), l'écrire (mach_vm_write), allouer (mach_vm_allocate), changer les protections (mach_vm_protect), créer des threads à des points d'entrée arbitraires (thread_create_running). Combinés, ces appels équivalent à l'exécution arbitraire dans le processus cible.

Apple le sait et verrouille la seule façon d'obtenir un task port sur un processus tiers — task_for_pid — derrière plusieurs vérifications : root + même session d'audit, l'entitlement com.apple.system-task-ports (réservé Apple), l'entitlement com.apple.security.cs.debugger côté appelant couplé à get-task-allow côté cible, ou une exception TCC explicite via les Outils de développement.

Les releases récentes de macOS introduisent trois variantes plus étroites :

  • task_name_port — métadonnées en lecture seule (PID, jeton d'audit). Pas d'accès mémoire. Retourné par task_name_for_pid.
  • task_read_port — accès mémoire en lecture seule. Retourné par task_read_for_pid. Utilisé par vmmap, sample, Time Profiler.
  • task_inspect_port — statistiques en lecture seule. Retourné par task_inspect_for_pid.

Si votre outil n'a pas strictement besoin d'écriture, préférez une de ces variantes — elles survivent mieux au resserrement du sandbox et déclenchent moins d'alertes.