CVE-2026-92574 : contournement du contexte de sécurité lors de la restauration de points de contrôle CRI-o et évasion de conteneur
SCORE DE MENACE HERMES & ÉVASION DE PÉRIMÈTRE CONTENEUR
Cible :Moteur de conteneurs CRI-O — Logique de restauration de points de contrôle & PodSecurityContext Le standard CVSS v3.1 évalue la CVE-2026-92574 à 8.8 Élevé en raison de l'exigence de privilèges d'accès restreints (PR:L). Le Hermes Threat Score élève cette criticité à 91 (CRITIQUE). Dans les grappes Kubernetes et Red Hat OpenShift multi-locataires, le moteur d'exécution de conteneurs (CRI) constitue la frontière de sécurité ultime séparant les charges applicatives non fiables du système d'exploitation de l'hôte. En subvertissant l'application du PodSecurityContext lors de la restauration d'une archive piégée, un locataire aux droits minimaux outrepasse tous les contrôleurs d'admission et acquiert des capacités noyau privilégiées telles que CAP_SYS_ADMIN sur le nœud hôte.
SÉVÉRITÉ AGENTIQUE HASS & RUPTURE DU BAC À SABLE AUTONOME
Cible :Confinement en conteneur des agents d'IA autonomes & interpréteurs de code La CVE-2026-92574 présente une gravité aiguë pour les architectures d'agents d'IA. Les agents autonomes exécutant du code généré dynamiquement ou interagissant avec des outils système sont systématiquement isolés dans des pods Kubernetes contraints par le profil restrictif de Pod Security Standards. Si un workflow agentique ou une injection de prompt déclenche une restauration de conteneur, l'agent peut s'évader de son conteneur et compromettre le serveur hôte, accédant aux nœuds GPU adjacents, aux bases vectorielles et aux secrets d'infrastructure.
CVE-2026-92574: CRI-O Container Checkpoint-Restore Destination Security Context BypassVULNÉRABILITÉ
Software platform affected by security vulnerabilities and agentic attack patterns.
🔍 Pourquoi cette relation ? (Preuves & Provenance)
“Confirmed security vulnerability in Check Point Security Management Server & Gaia OS documented in Hermes dossier.”
- [vulnerability_report]
- [government_confirmation]CISA verified active exploitation in the wild and mandated federal remediation deadline in KEV entry. — Source : Cybersecurity & Infrastructure Security Agency (CISA): CISA Adds CVE-2026-59822 to Known Exploited Vulnerabilities Catalog (Fiabilité : VERY_HIGH)
1. Contexte technique & surface d’attaque
Section intitulée « 1. Contexte technique & surface d’attaque »Le mécanisme de point de contrôle de conteneur fige l’état instantané d’une application en cours d’exécution : mémoire vive, descripteurs de fichiers, IPC et espaces de noms (namespaces) sont compilés dans une archive tar compressée (checkpoint-<conteneur>.tar). Un opérateur ou un contrôleur automatique peut ensuite réinjecter cet état dans un nouveau pod fraîchement ordonnancé.
┌───────────────────────────┐ 1. Création de pod avec point de contrôle ┌─────────────────────────────┐│ Locataire peu privilégié │ ──────────────────────────────────────────────────> │ Serveur d'API Kubernetes ││ (Namespace restreint) │ │ (Validation spec: restreint)│└───────────────────────────┘ └──────────────┬──────────────┘ │ 2. Kubelet délègue à CRI-O ▼ ┌─────────────────────────────┐ │ Démon CRI-O (nœud hôte) │ └──────────────┬──────────────┘ │ 3. Désérialisation de l'archive ▼ ┌─────────────────────────────┐ │ Gestionnaire CRIU │ │ [X] Ignore le contexte cible│ │ [X] Restaure les privilèges │ └──────────────┬──────────────┘ │ 4. Lancement du conteneur ▼ ┌─────────────────────────────┐ │ Conteneur avec │ │ CAP_SYS_ADMIN + root hôte │ └──────────────┬──────────────┘ │ 5. Montage de /proc ou /sys de l'hôte ▼ ┌─────────────────────────────┐ │ Compromission totale du nœud│ └─────────────────────────────┘Paramètres et prérequis d’exploitation
Section intitulée « Paramètres et prérequis d’exploitation »| Paramètre | Condition technique | Conséquence opérationnelle |
|---|---|---|
| Fonctionnalité CRI-o | ContainerCheckpoint activée | Requise pour exposer les interfaces de restauration |
| Droits de l’attaquant | Création de pod dans un namespace (PR:L) | Compte de service de développement ou locataire standard |
| Contrôleurs d’admission | Pod Security Standards / Kyverno | Contournés : l’admission approuve une spécification saine, mais le runtime restaure l’état privilégié |
| Impact sur l’hôte | Capacités noyau acquises | Obtention de CAP_SYS_ADMIN, CAP_DAC_OVERRIDE et accès direct à /proc |
2. Décomposition technique & cause racine
Section intitulée « 2. Décomposition technique & cause racine »La vulnérabilité découle d’un défaut de réconciliation entre l’état de sécurité sérialisé dans l’archive et les contraintes de sécurité déclarées sur le pod de destination.
Analyse du code vulnérable
Section intitulée « Analyse du code vulnérable »Lors de la restauration, CRI-O génère une nouvelle spécification OCI conforme au pod cible, mais écrase ensuite cette configuration avec les métadonnées issues de CRIU sans appliquer de filtrage de sécurité :
// Logique vulnérable au sein de CRI-O server/container_restore.go (versions < 1.34.3)func (s *Server) restoreContainer(ctx context.Context, req *pb.RestoreContainerRequest) (*pb.RestoreContainerResponse, error) { checkpointMeta, err := s.loadCheckpointMetadata(req.CheckpointPath) if err != nil { return nil, err }
// Configuration de sécurité théorique du pod cible targetSpec := s.generatePodSpec(req.PodSandboxId)
// ANOMALIE : CRI-O réapplique aveuglément les capacités et drapeaux de l'archive, // écrasant targetSpec.Process.Capabilities défini par Kubernetes ! if checkpointMeta.ProcessConfig != nil { targetSpec.Process.Capabilities = checkpointMeta.ProcessConfig.Capabilities targetSpec.Process.NoNewPrivileges = checkpointMeta.ProcessConfig.NoNewPrivileges targetSpec.Linux.Seccomp = checkpointMeta.ProcessConfig.Seccomp }
// Le conteneur s'exécute avec les capacités privilégiées du point de contrôle ! return s.runtime.RestoreContainer(ctx, targetSpec, req.CheckpointPath)}Cinématique de l’attaque
Section intitulée « Cinématique de l’attaque »- Conception de l’archive piégée : l’attaquant génère un point de contrôle légitime dans un environnement de test sous son contrôle, ou modifie directement les métadonnées de
checkpoint.tarpour y inscrire :Bounding:["CAP_SYS_ADMIN", "CAP_DAC_OVERRIDE", "CAP_NET_ADMIN"]NoNewPrivileges:falseSeccompProfile:unconfined
- Soumission du manifeste : l’attaquant soumet un manifeste de pod ciblant son namespace locataire standard. Le manifeste déclare un contexte de sécurité minimal non privilégié :
securityContext:allowPrivilegeEscalation: falsecapabilities:drop: ["ALL"]runAsNonRoot: true
- Approbation de l’admission : les contrôleurs d’admission (Kyverno, OPA Gatekeeper, Pod Security Admission) inspectent le fichier YAML, constatent la conformité avec le profil
restricted, et autorisent la création du pod. - Inversion des privilèges à l’exécution : CRI-O traite la directive de restauration. En raison de l’anomalie, les capacités du point de contrôle écrasent la spécification du pod.
- Prise de contrôle du nœud : le conteneur démarre doté de
CAP_SYS_ADMIN. L’attaquant monte les cgroups hôtes ou utilisensenterpour exécuter un shell root sur le système d’exploitation du nœud Kubernetes.
3. Déroulement de l’attaque & analyse forensique
Section intitulée « 3. Déroulement de l’attaque & analyse forensique »Les analystes DFIR intervenant sur un cluster Kubernetes doivent corréler les journaux d’audit de l’API Kubernetes avec les traces locales de CRI-O et les appels système journalisés par le noyau.
Journaux d’audit & artefacts système
Section intitulée « Journaux d’audit & artefacts système »- Journaux d’audit Kubernetes (
kube-apiserver) : identifier les créations de pods associées à des volumes de points de contrôle ou à des annotations de restauration :{"verb": "create","resource": "pods","user": { "username": "developer-tenant" },"objectRef": { "namespace": "dev-sandbox", "name": "stateful-worker-0" },"requestObject": {"metadata": {"annotations": {"io.kubernetes.cri-o.restore-path": "/var/lib/kubelet/checkpoints/malicious.tar"}}}} - Journal Systemd de CRI-o : consulter
/var/log/messagesoujournalctl -u crio:crio[2310]: time="..." level=info msg="Restoring container 8fa10c... from checkpoint /tmp/checkpoint-payload.tar"crio[2310]: time="..." level=warning msg="Overriding process capabilities from checkpoint metadata" - Traces auditd Linux (
/var/log/audit/audit.log) : repérer les processus de conteneurs issus d’un UID utilisateur exécutant des appels système sensibles réservés àCAP_SYS_ADMIN(sys_mount,bpf,ptrace) :type=SYSCALL msg=audit(1726992000.124:9482): arch=c000003e syscall=165 success=yes exit=0ppid=2310 pid=34892 auid=4294967295 uid=1001 comm="sh" exe="/bin/busybox"cap_effective=000001ffffffffff
4. Détection & règles SIEM
Section intitulée « 4. Détection & règles SIEM »Règle de détection Sigma
Section intitulée « Règle de détection Sigma »title: Écrasement du contexte de sécurité lors d'une restauration de conteneur CRI-Oid: 9a4f21b8-3d7c-481e-b619-cve20269257401status: experimentaldescription: Détecte la restauration de conteneurs CRI-O dont les capacités effectives excèdent le PodSecurityContext octroyé par Kubernetes, signalant l'exploitation de la CVE-2026-92574.references: - https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2026-92574 - https://nvd.nist.gov/vuln/detail/CVE-2026-92574author: Hermes Codex Intelligencedate: 2026-09-22logsource: category: process_creation product: linuxdetection: selection_runtime: ParentImage|endswith: - '/crio' - '/crio-runc' - '/conmon' selection_caps: CommandLine|contains: - 'cap_sys_admin' - 'cap_net_admin' - 'cap_dac_override' selection_namespace_mismatch: Environment|contains: 'KUBERNETES_SERVICE_HOST' condition: selection_runtime and selection_caps and selection_namespace_mismatchlevel: criticaltags: - attack.privilege_escalation - attack.t1611 - cve.2026-92574KubeAudit| where TimeGenerated >= ago(24h)| where Verb == "create" and ObjectRef_Resource == "pods"| extend Annotations = tostring(RequestObject.metadata.annotations)| where Annotations has "checkpoint" or Annotations has "restore"| extend DropCaps = tostring(RequestObject.spec.containers[0].securityContext.capabilities.drop)| project TimeGenerated, PodName = ObjectRef_Name, Namespace = ObjectRef_Namespace, User = User_Username, Annotations, DropCaps5. Stratégie d’atténuation & durcissement
Section intitulée « 5. Stratégie d’atténuation & durcissement »Application des correctifs
Section intitulée « Application des correctifs »- Mettre à niveau le moteur CRI-O vers la version
1.34.3ou déployer les correctifs Red Hat Security Errata correspondants pour OpenShift4.17+. - Dans la version corrigée, CRI-O applique une règle de restriction stricte : le
PodSecurityContextdu pod cible constitue un plafond absolu indépassable, éliminant toute capacité présente dans le point de contrôle excédant le manifeste déclaré.
Mesures conservatoires immédiates
Section intitulée « Mesures conservatoires immédiates »- Désactiver la restauration de conteneurs : si la fonctionnalité de point de contrôle n’est pas requise en production, désactiver l’option dans la configuration du démon CRI-O (
/etc/crio/crio.conf) :[crio.runtime]enable_pod_container_checkpoint = false - Verrouillage des répertoires de points de contrôle : restreindre les droits d’accès au répertoire de stockage des points de contrôle sur les nœuds workers :
Fenêtre de terminal chmod 700 /var/lib/kubelet/checkpoints - Surveillance eBPF en temps réel : déployer des sondes d’exécution (Tetragon, Falco) configurées pour bloquer toute élévation de privilèges vers
CAP_SYS_ADMINau sein des espaces de noms de conteneurs.