Eine Sicherheitslücke im Linux Kernel hat zur Folge, dass ein lokaler Angreifer höhere Rechte auf dem System erlangen kann.
Ursache der Schwachstelle ist ein Programmierfehler beim Verarbeiten von bestimmten Netlink-Nachrichten. Der führt dazu, dass Avahi und der Network Manager gefälschte Netlink-Nachrichten akzeptieren. Genauer gesagt können Nachrichten des Typs “SCM_CREDENTIALS” gefälscht werden. Diese dienen unter Unix dazu, Sicherheitskontexte mitzuteilen.
Der Programmierfehler verteilt sich über drei Kernel-Dateien: “include/net/scm.h”, “net/netlink/af_netlink.c” und “net/unix/af_unix.c”. Der Patch nimmt dabei nur minimale Änderungen vor, um das Sicherheitsleck zu stopfen. In “scm.h” erfolgt folgende Korrektur:
static __inline__ int scm_send(struct socket *sock, struct msghdr *msg,
- struct scm_cookie *scm)
+ struct scm_cookie *scm, bool forcecreds) { memset(scm, 0, sizeof(*scm));
+ if (forcecreds)
+ scm_set_cred(scm, task_tgid(current), current_cred()); unix_get_peersec_dgram(sock, scm); if (msg->msg_controllen <= 0)
In dem alten Code wurde hier lediglich scm via “memset()” auf 0 gesetzt, aber die Credentials nicht korrekt initialisiert. Dies erledigt nun ein “scm_set_cred()”-Aufruf explizit, wenn es durch das “forcecreds”-Flag erzwungen wurde. In “af_netlink.c” und “af_unix.c” zieht diese kleine Änderung lediglich eine Modifikation des “scm_send()”-Aufrufs nach sich:
- err = scm_send(sock, msg, siocb->scm); + err = scm_send(sock, msg, siocb->scm, true);
Mit diesen Änderungen am Kernel-Code ist die Sicherheitslücke gestopft und die Attacke nicht mehr möglich.

