Patch sécurité noyau CVE-2016-0728

Bonjour,

Administrateur de serveurs sous Debian je suis confronté, à chaque mise à jour impactant le noyau, à un problème de taille : dois-je rebooter :astonished:
Pour élucider cette question je consulte plusieurs sources afin de connaitre l’impact de la mise à jour.
Je vous propose de vous donner quelques tuyaux en prenant l’exemple de la faille CVE-2016-0728 qui est pour ce cas une faille majeure impactant les noyaux > 3.8. Pour info, je me base sur la version stable du moment (Jessie) dans mes explications.

Une des premières pistes est de configurer votre gestionnaire de paquet afin qu’il vous affiche les changelogs. Pour cela le mieux est de faire un tour par le paquet apt-listchanges. Paquet sur lequel je ne m’attarderais pas, car sa doc est très bien faite.

man apt-listchanges

Le changelog a dans mon cas permis de récupérer le numéro identifiant la faille.

KEYS: Fix keyring ref leak in join_session_keyring() (CVE-2016-0728)

Etant donné que le changelog n’est pas bavard j’ai commencé mon investigation.

Tout d’abord, le site https://security-tracker.debian.org/tracker/CVE-2016-0728 m’a permis de connaitre les versions de debian impactées et surtout les noyaux dans mon cas.

Grâce à un uname –a j’ai pu voir la version de mon noyau qui … est vulnérable :cry:

jessie	3.16.7-ckt11-1+deb8u3	vulnerable

Je peux aussi voir que le dépôt sécurité contient la mise à jour

jessie (security)	3.16.7-ckt20-1+deb8u3	fixed

Ce qu’il faut savoir, c’est que chaque mise à jour critique de noyaux ne me concerne pas forcement, car celle-ci peux être pour un module désactivé ou non utilisé sur mon noyau.

Pour avoir encore plus d’information on peut aller directement voir sur les logs du git du noyau linux https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/ et faire une recherche avec le numéro de la faille.

Ce qui me permet de trouver un changelog plus précis, et dans ce cas avec même un bout de code permettant de tester la présence de la faille sur une machine vulnérable https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=23567fd052a9abb6d67fe8e7a9ccdd9800a540f2

Attention, le script donner peut nuire à la stabilité du noyau, évité de le lancer sur une machine de PROD.

Ici on peut voir que la faille vient toucher les clés de session utilisateur permettant une escalade de privilège. La faille est donc bien critique et me concerne car elle touche un élément du noyau que j’utilise. De plus, au vu de l’impact sur le noyau et ne possédant pas de noyau patchable à chaud, je devrais surement passer par un reboot :cry:

Pour aller plus loin on peut aussi aller voir sur les logs du git Debian dédié au noyau pour voir s’ils ont bien pris en compte le correctif https://anonscm.debian.org/cgit/kernel/linux.git/log/
En se plaçant sur la branche jessie-security https://anonscm.debian.org/cgit/kernel/linux.git/log/?h=jessie-security
On peut voir le log concernant l’enregistrement de la faille avec tous les détails trouvés précédemment https://anonscm.debian.org/cgit/kernel/linux.git/commit/?h=jessie-security&id=0ac8c3e88cf1ea329ede357f2a01a9b1a8734e24

Et on peut aussi voir son avancement dans un deuxième log https://anonscm.debian.org/cgit/kernel/linux.git/commit/?h=jessie-security&id=5c6e7b5fbe9e5e5b3ae978c5a1aa049e9b464de3

-linux (3.16.7-ckt20-1+deb8u3) UNRELEASED; urgency=medium +linux (3.16.7-ckt20-1+deb8u3) jessie-security; urgency=high
Log ou on voit qu’il est disponible dans le dépôt security et qu’il ne sera pas déployé pour le dépôt Jessie ce qui est normal.

Et donc pour finir j’ai finalement déployé le patch sur mon serveur

apt-get update && apt-get upgrade

Et en faisant un uname –a, ne voyant pas la version patché (3.16.7-ckt20-1+deb8u3) déployé cela confirme la nécessité d’un reboot :astonished:

J’ai donc finis par planifier un reboot via un Cron pour cette nuit afin de ne pas impacter la PROD.

Voila :smiley: j’espère en aider quelqu’un dans leurs recherches, et si certains d’entre vous on d’autre tuyaux vous êtes les bienvenus :041
N’hésiter par à me corriger si jamais j’ai dit une grosse connerie :075

Et bon reboot à tous :079

[quote=“mini56”]je suis confronté, à chaque mise à jour impactant le noyau, à un problème de taille : [mono]dois-je rebooter[/mono] …
Pour élucider cette question [mono]je consulte …[/mono][/quote]
[mono]checkrestart[/mono] fournit par [mono]debian-goodies[/mono] et [mono]needrestart[/mono] sont là pour ça.

[quote]Paquet : debian-goodies

Description : Small toolbox-style utilities for Debian systems
These programs are designed to integrate with standard shell tools, extending them to operate on the Debian packaging system.

dgrep - Search all files in specified packages for a regex
dglob - Generate a list of package names which match a pattern

These are also included, because they are useful and don’t justify their own packages:

debget - Fetch a .deb for a package in APT’s database
dpigs - Show which installed packages occupy the most space
debman - Easily view man pages from a binary .deb without extracting
debmany - Select manpages of installed or uninstalled packages
checkrestart - Help to find and restart processes which are using old
versions of upgraded files (such as libraries)
popbugs - Display a customized release-critical bug list based on
packages you use (using popularity-contest data)
which-pkg-broke - find which package might have broken another[/quote]

[quote]Paquet : needrestart

Description : check which daemons need to be restarted after library upgrades
needrestart checks which daemons need to be restarted after library upgrades. It is inspired by checkrestart from the debian-goodies package.

Features:

  • supports (but does not require) systemd
  • binary blacklisting (i.e. display managers)
  • tries to detect pending kernel upgrades
  • tries to detect required restarts of interpreter based daemons (supports Perl, Python, Ruby)
  • fully integrated into apt/dpkg using hooks
    Site : github.com/liske/needrestart
    [/quote]

[quote=“BelZéButh”]
[mono]checkrestart[/mono] fournit par [mono]debian-goodies[/mono] et [mono]needrestart[/mono] sont là pour ça.[/quote]

Merci je ne connaissait pas l’outil :slightly_smiling:

Par contre le fait qu’une mise à jour demande un reboot ne veux pas forcement dire que je vais le faire.
En effet si le patch cible une vulnérabilité qui ne m’impacte pas, alors je n’est aucun intéret à rebooter.

[mono]checkrestart[/mono] dit quand il faut redémarrer après une mise à jour du noyau, vraiment ? De ce que je sais de son mode de fonctionnement, j’en doute (il cherche les fichiers encore ouverts et remplacés, je doute que cela concerne aucun fichier appartenant au noyau).

Il faut toujours redémarrer après une mise à jour du noyau, et pas seulement pour des raisons de sécurité mais aussi de compatibilité de l’ABI. Sinon la mise à jour ne sert à rien.

Je ne pense pas l’avoir dit.
Par contre, [mono]needrestart[/mono], lui, fait cela très bien.

2.2. Quoi de neuf dans la distribution ?

[quote=“2.2.4. Sécurité”]Le paquet [mono]needrestart[/mono] est une nouveauté de cette version.
Lorsqu’il est installé, il vérifiera, après chaque mise à jour par APT, la nécessité de redémarrer des services pour utiliser les modifications et proposera ainsi de les redémarrer.
[mono]Il est recommandé d’installer le paquet needrestart pour s’assurer que les mises à jour de sécurité des bibliothèques sont bien propagées dans les services[/mono]. [/quote]

[quote=“debian-goodies”][code][09:19:19] ~ # checkrestart
Found 62 processes using old versions of upgraded files
(42 distinct programs)
(31 distinct packages)

Of these, 6 seem to contain systemd service definitions or init scripts which can be used to restart them.
The following packages seem to have definitions that could be used
to restart their services:
seeks-experimental:
2368 /usr/bin/seeks
bluez:
2026 /usr/lib/bluetooth/bluetoothd
openssh-server:
2463 /usr/sbin/sshd
sane-utils:
2329 /usr/sbin/saned
2331 /usr/sbin/saned
cgmanager:
1753 /sbin/cgmanager
dbus:
2830 /usr/bin/dbus-daemon
1847 /usr/bin/dbus-daemon
2746 /usr/bin/dbus-daemon
These are the initd scripts:
service seeks-experimental restart
service bluetooth restart
service ssh restart
service saned restart
service cgmanager restart
service cgproxy restart
service dbus restart

These processes (25) do not seem to have an associated init script to restart them:
yakuake:
2979 /usr/bin/yakuake
udisks2:
2840 /usr/lib/udisks2/udisksd
libkf5globalaccel-bin:
2798 /usr/bin/kglobalaccel5
knotes:
2920 /usr/bin/akonadi_notes_agent
akonadi-server:
2888 /usr/bin/akonadi_control
2910 /usr/bin/akonadi_agent_launcher
2911 /usr/bin/akonadi_agent_launcher
2913 /usr/bin/akonadi_agent_launcher
2914 /usr/bin/akonadi_agent_launcher
2907 /usr/bin/akonadi_agent_launcher
2906 /usr/bin/akonadi_agent_launcher
2905 /usr/bin/akonadi_agent_launcher
2904 /usr/bin/akonadi_agent_launcher
2903 /usr/bin/akonadi_agent_launcher
2892 /usr/bin/akonadiserver
smart-notifier:
2851 /usr/bin/smart-notifier
plasma-desktop:
2787 /usr/bin/kaccess
dbus-x11:
2745 /usr/bin/dbus-launch
kdelibs-bin:
2878 /usr/bin/kdeinit4
28869 /usr/bin/kdeinit4
28876 /usr/bin/kdeinit4
28877 /usr/bin/kdeinit4
28870 /usr/bin/kdeinit4
2873 /usr/bin/kdeinit4
2876 /usr/bin/kdeinit4
kdepim-runtime:
2909 /usr/bin/akonadi_birthdays_resource
2919 /usr/bin/akonadi_newmailnotifier_agent
2917 /usr/bin/akonadi_migration_agent
2915 /usr/bin/akonadi_maildispatcher_agent
kwin-x11:
2801 /usr/bin/kwin_x11
consolekit:
2619 /usr/bin/ck-launch-session
2667 /usr/sbin/console-kit-daemon
kmail:
2916 /usr/bin/akonadi_mailfilter_agent
2912 /usr/bin/akonadi_followupreminder_agent
2908 /usr/bin/akonadi_archivemail_agent
2921 /usr/bin/akonadi_sendlater_agent
polkit-kde-agent-1:
2814 /usr/lib/x86_64-linux-gnu/libexec/polkit-kde-authentication-agent-1
xserver-xorg-core:
1993 /usr/lib/xorg/Xorg
kaccessible:
2866 /usr/lib/kde4/libexec/kaccessibleapp
at-spi2-core:
2833 /usr/lib/at-spi2-core/at-spi2-registryd
korganizer:
2849 /usr/bin/korgac
iceweasel:
5924 /usr/lib/iceweasel/iceweasel
kmix:
2861 /usr/bin/kmix
kactivities:
2812 /usr/bin/kactivitymanagerd
libkf5screen6:
2836 /usr/lib/x86_64-linux-gnu/libexec/kf5/kscreen_backend_launcher
kinit:
2795 /usr/bin/kdeinit5
2778 /usr/bin/kdeinit5
2779 /usr/bin/kdeinit5
2781 /usr/bin/kdeinit5
upower:
2847 /usr/lib/upower/upowerd
plasma-workspace:
2802 /usr/bin/krunner
2969 /usr/bin/kuiserver5
2805 /usr/bin/plasmashell
[09:19:43] ~ #[/code][/quote]