← Toutes les règles
SOCLE-CLD-IAM-058// Sudoélevéeconfig persistante

S'assurer que les commandes privilégiées ne peuvent pas en exécuter d'autres - sudo NOEXEC

Active l'option Defaults noexec afin que les commandes exécutées sous sudo ne puissent pas lancer d'autres sous-commandes (par ex. une évasion de shell) via les fonctions exec de la bibliothèque C.

Vérifié sur le contenu d’un fichier de configuration persistant, la source de vérité qui survit aux redémarrages.

Un PASS prouve? actif maintenant✓ sur disque✓ survit au rebootle verdict qualifié →
Debian 12CIS 1.1.0Debian 13CIS 1.0.0FedoraRHEL 10 / Rocky 10 / AlmaLinux 10RHEL 8 / Rocky 8 / AlmaLinux 8CIS 4.0.0RHEL 9 / Rocky 9 / AlmaLinux 9CIS 2.0.0Ubuntu 22.04CIS 3.0.0Ubuntu 24.04CIS 1.0.0Ubuntu 26.04
Un seul check, mappé sur 1 norme

Un mapping est une référence croisée vers l’endroit où chaque norme situe cette exigence, ancrée et recoupée, pas une affirmation d’équivalence. Un check réussi est une preuve vers ces références, comment le lire.

Pourquoi cette règle

De nombreux programmes interactifs (éditeurs comme vi, pagineurs comme less, voire awk ou find -exec) peuvent lancer un sous-shell. Exécuté via sudo, ce sous-shell hériterait des privilèges root, offrant à l'utilisateur un shell root complet à partir d'un privilège pourtant restreint. noexec s'appuie sur un préchargement LD_PRELOAD pour neutraliser la famille exec*() : les commandes privilégiées s'exécutent mais ne peuvent pas dériver vers l'exécution de commandes arbitraires, une évasion sudo classique.

Ce que vérifie Pavois

Pavois recherche dans l'arborescence sudoers active, /etc/sudoers et chaque fichier sous /etc/sudoers.d/, une directive non commentée Defaults ... noexec. Comme sudo construit sa politique à partir du fichier principal et de tous les drop-ins, parcourir toute l'arborescence reflète la politique effective plutôt qu'un seul fichier qu'un drop-in ultérieur pourrait écraser.

describe command('grep -rqE \'^[^#]*Defaults[^#]*\bnoexec\b\' /etc/sudoers /etc/sudoers.d/ 2>/dev/null && echo ok || echo ko') do
  its('stdout.strip') { should eq 'ok' }
end

Comment vérifier qu’elle est appliquée

Exécutez sudo grep -rE '^[^#]*Defaults.*noexec' /etc/sudoers /etc/sudoers.d/. Une ligne correspondante, non commentée, confirme que l'option est active. Pour tester le comportement, sudo vi puis :!sh ne doit pas réussir à lancer un shell lorsque noexec est en vigueur.

Inspecter et investiguer

Les appels à sudo sont journalisés dans /var/log/auth.log (Debian/Ubuntu) ou /var/log/secure (RHEL), et via journalctl -t sudo. Une tentative d'exec bloquée laisse en général la commande parente dans le journal sudo tandis que le sous-processus ne démarre jamais, ce qui aide à corréler les tentatives d'évasion de shell.

Remédiation

Le plan de durcissement de Pavois écrit une ressource file dans /etc/sudoers.d/99-Pavois-noexec contenant Defaults noexec, appartenant à root:root avec le mode 0440, validée avec visudo -cf avant activation. Appliquez-le avec pavois harden apply. Le drop-in dédié isole la modification et la rend réversible.

Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :

contentDefaults noexec
grouproot
mode0440
ownerroot
path/etc/sudoers.d/99-pavois-noexec
resourcefile
verifyvisudo -cf %{path}
pavois harden plan local

où la cible est local, un alias SSH user@hôte, ou un conteneur , Docs

Impact & précautions

Un noexec global cassera les commandes sudo légitimes devant lancer des sous-processus, gestionnaires de paquets, outils de build, chaînes systemctl ou scripts d'admin appelant d'autres binaires. Avant d'appliquer, identifiez ces commandes et exemptez-les avec une dérogation par commande NOEXEC:/EXEC: (par ex. user ALL = EXEC: /usr/bin/apt) plutôt que de supprimer le défaut global. Le drop-in est validé par visudo avant activation : il ne peut donc pas corrompre sudoers ; testez les workflows d'admin critiques juste après l'application.

Mapping des normes

NormeRéférenceTypeVersionConfiance
ANSSI BP-028R39direct2.0haute

Chaque référence est une référence croisée ancrée dans le benchmark amont et recoupée avec le SCAP Security Guide et ansible-lockdown, pas une affirmation d’équivalence. Direct = une exigence prescriptive au niveau de la ligne ; support = une famille de contrôle abstraite (NIST) vers laquelle le check apporte une preuve. Comment lire un mapping.

Sources & références