Aller au contenu

Analyse Comparative des Vulnérabilités (CVEs) et Mitigations dans Érable

Navigation : Documentation > CVEs & Mitigations Comparatives
Spécification technique associée : 08. Répertoire des Solutions d'Ingénierie Système


Sommaire

  1. Surface d'Attaque des Gestionnaires de Paquets
  2. Matrice Synthétique des Vulnérabilités Majeures
  3. Décompression & Système de Fichiers
  4. 3.1 Zip Slip & Traversée de Répertoires (CVE-2018-1002200, CVE-2023-45853)
  5. 3.2 Écrasement Collatéral par Liens Symboliques (CVE-2021-32658)
  6. 3.3 Traversée de Répertoires dans la Persistance et l'Extraction (Scoop #4588 / #5012)
  7. Exécution Locale, Privilèges & Shims
  8. 4.1 Élévation de Privilèges par Bits SUID/SGID (CVE-2021-44733)
  9. 4.2 DLL Hijacking & Binary Planting Win32 (CVE-2020-11738, CVE-2022-33984)
  10. 4.3 Injection de Commandes dans les Shims Batch/PowerShell (CVE-2024-24576)
  11. 4.4 Confinement Cryptographique des Fichiers Pointeurs .target
  12. 4.5 Injection de Séquences ANSI dans le Terminal (CVE-2023-45806)
  13. Réseau, Cache & Intégrité
  14. 5.1 Empoisonnement de Cache TOCTOU (CVE-2020-11080)
  15. 5.2 Redirections HTTP MITM & Confusion de Manifestes (WinGet Advisories)
  16. Bac à Sable, Supply-Chain & Écosystèmes
  17. 6.1 Échappement de Bac à Sable & Concurrence sur le Store (Nix CVE-2024-27297)
  18. 6.2 Exfiltration Réseau dans les Scripts de Hook (Supply Chain Attack)
  19. 6.3 Vulnérabilités des Gestionnaires d'Écosystèmes (Cargo, npm, PyPI)
  20. 6.4 Attestation de Provenance SLSA Level 3 & Sigstore
  21. Liens et Références Associées

1. Surface d'Attaque des Gestionnaires de Paquets

Les gestionnaires de paquets développeurs (Scoop, Homebrew, Chocolatey, WinGet, Nix) téléchargent des binaires distants, placent des exécutables dans le $PATH et invoquent des scripts locaux. Cette chaîne d'exécution expose le système hôte à plusieurs risques critiques :

  • Attaques par décompression malveillante (Zip Slip, symlinks piégés).
  • Détournement d'exécution locale (DLL Hijacking, shims shell vulnérables aux injections d'arguments).
  • Course critique sur les ressources temporaires (TOCTOU sur le cache).
  • Exfiltration de secrets lors de l'exécution de hooks de pré/post-installation.
  • Attaques sur la chaîne logistique logicielle (scripts de compilation, confusion de dépendances).

Érable traite ces risques à la racine grâce à une architecture sans compromis : trampolines Rust natifs compilés, Zero Egress strict sur tous les hooks, immutabilité des versions et index cryptographiquement signés par Ed25519.


2. Matrice Synthétique des Vulnérabilités Majeures

Vulnérabilité / CVE Outils Vulnérables / Affectés Vecteur d'Attaque Solution Implémentée dans Érable
Zip Slip (CVE-2018-1002200, CVE-2023-45853) Scoop, Chocolatey, Homebrew, décompresseurs naïfs Chemins relatifs ../../ écrasant des fichiers hors du store (~/.ssh, C:\Windows) Validation canonique stricte (path expand) avant écriture ; interdiction de toute sortie du dossier assigné.
Symlink Traversal (CVE-2021-32658) Homebrew, Chocolatey, Scoop (jonctions) L'archive extrait un symlink vers /etc ou ~/.ssh/authorized_keys, puis écrit dedans Détection et rejet des symlinks pointant hors du store ; interdiction des liens symboliques dans bin/.
Persist Symlink Traversal (Scoop #4588 / #5012) Scoop (persist & extract_dir) Liens relatifs malveillants dans les directives de persistance écrasant des données système Normalisation stricte de chemin via path expand, confinement absolu dans l'arborescence du paquet.
SUID/SGID Abuse (CVE-2021-44733) Homebrew (macOS/Linux), tar standard Binaire distribué avec bit 04000 permettant une élévation de privilèges locale Masquage systématique mode & 0755 lors de l'extraction sur Unix.
DLL Hijacking (CVE-2020-11738, CVE-2022-33984) Scoop (shims batch), Chocolatey (shimgen), Win32 Placement d'une DLL malveillante dans le dossier de travail courant Trampoline Rust avec SetDllDirectoryW(L"") et SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32).
Shim Injection (CVE-2024-24576) Wrappers .cmd/.bat et PowerShell (-Command) Métacaractères batch (%, &, \|) ou accents graves exécutant des commandes arbitraires Zéro wrapper shell ; Trampoline Rust binaire natif direct ou powershell -File (arguments littéraux stricts).
Pointer Hijacking (.target) Écosystèmes à pointeurs de fichiers texte Modification hostile du fichier cible pour exécuter un binaire arbitraire Le trampoline Rust valide canoniquement que la cible résolue est confinée dans ~/.erable/packages/.
ANSI Escape Injection (CVE-2023-45806) Terminal CLIs affichant des métadonnées brutes Séquences ANSI malveillantes dissimulant des commandes ou réécrivant la console Assainissement systématique ansi strip sur toutes les métadonnées et sorties de vérification.
TOCTOU Cache (CVE-2020-11080) Gestionnaires stockant le cache dans /tmp Remplacement de l'archive téléchargée entre le calcul SHA-256 et l'extraction Cache privé restreint au propriétaire (0700) et verrouillage exclusif du descripteur de fichier.
HTTP Redirection MITM (WinGet Advisories) WinGet, suivi aveugle de redirections Redirection HTTP non vérifiée vers des CDNs compromis ou confusion de sources non signées Validation SHA-256 recalculée en mémoire sur flux brut post-téléchargement ; index signés par Ed25519.
Store Race & Escape (Nix CVE-2024-27297) Nix, Guix Échappement de bac à sable de build via montages bind et conditions de concurrence Distribution binaire pré-compilée atomique sans compilation locale ; hardlinks NTFS en lecture seule.
Hook Exfiltration (Supply Chain) Scoop (pre_install PS1), Homebrew (Ruby formula) Script de hook envoyant des tokens d'environnement (AWS_*, SSH_AUTH_SOCK) à un serveur externe Défense à 3 niveaux : Linter AST interdisant le réseau, purge des variables sensibles, et confinement matériel Zero Egress.
Build-Time Arbitrary Execution Cargo (build.rs), npm (postinstall) Exécution automatique de scripts Turing-complets lors de l'installation/compilation Aucun script de compilation exécuté sur le poste client ; seuls les binaires finaux packagés sont déployés.
Typosquatting & Spoofing PyPI, npm, dépôts non curés Déposition de paquets avec noms quasi-homoglyphes pour tromper les utilisateurs Curage strict par buckets dédiés, validateurs CI bloquants et signatures Ed25519 sur l'index centralisé.
Non-Attested Artifacts Dépôts binaires tiers Binaires compilés sur des postes de build non certifiés ou potentiellement corrompus Intégration de la vérification de provenance cryptographique SLSA Level 3 via Sigstore/Rekor.

3. Décompression & Système de Fichiers

3.1 Zip Slip & Traversée de Répertoires (CVE-2018-1002200, CVE-2023-45853)

  • Vecteur : Une archive ZIP ou TAR malveillante contient un nom d'entrée préfixé par ../../../../Users/Victime/.ssh/authorized_keys. Un extracteur naïf concatène destination_dir + entry_name, écrasant des fichiers hors du répertoire d'installation.
  • Mitigation Érable : Validation canonique stricte (path expand) avant écriture. Rejet immédiat de toute entrée dont le chemin résolu ne commence pas strictement par le dossier assigné $ctx.paths.install.

3.2 Écrasement Collatéral par Liens Symboliques (CVE-2021-32658)

  • Vecteur : Une archive crée un symlink my_link -> ~/.bashrc. Une seconde archive (ou mise à jour) extrait un fichier nommé my_link. L'extracteur suit le lien et écrase silencieusement le fichier cible de l'utilisateur.
  • Mitigation Érable :
  • Rejet strict de tout lien symbolique dont la cible sort du répertoire temporaire d'extraction.
  • Remplacement systématique des liens symboliques par le modèle Trampoline Rust + pointeurs .target. Aucun lien symbolique n'est toléré dans ~/.erable/bin.

3.3 Traversée de Répertoires dans la Persistance et l'Extraction (Scoop #4588 / #5012)

  • Vecteur : Directives de manifeste persist ou extract_dir contenant des chemins relatifs malveillants (..\..) ancrant des jonctions NTFS sur C:\Program Files ou écrasant des données hôtes lors de la désinstallation récursive.
  • Mitigation Érable : Résolution canonique via path expand et vérification obligatoire que normalized_target.starts_with(ctx.paths.install) == true. Tout chemin sortant du périmètre lève une exception fatale bloquant l'opération.

4. Exécution Locale, Privilèges & Shims

4.1 Élévation de Privilèges par Bits SUID/SGID (CVE-2021-44733)

  • Vecteur : Archive distribuée avec bit setuid (04000) ou setgid (02000). Si un binaire ainsi extrait est exécuté par un administrateur, une compromission totale du système intervient.
  • Mitigation Érable : Application systématique d'un masque de permissions mode = raw_mode & 0755 lors de l'extraction sur Unix, éliminant d'office les bits SUID, SGID et Sticky.

4.2 DLL Hijacking & Binary Planting Win32 (CVE-2020-11738, CVE-2022-33984)

  • Vecteur : Sous Windows, l'ordre standard de chargement dynamique des DLLs (LoadLibrary) inclut le répertoire de travail courant. Une DLL malveillante déposée dans un répertoire de projet téléchargé est exécutée au lancement d'un outil CLI via shim.
  • Mitigation Érable :
  • Le trampoline Rust appelle explicitement SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32) et SetDllDirectoryW(L""), retirant définitivement le répertoire courant de la recherche de DLLs.
  • Le trampoline positionne lpCurrentDirectory sur le dossier officiel d'installation du binaire cible.
  • Paradigme strict non-root : Érable s'exécute exclusivement avec les privilèges de l'utilisateur standard (~/.erable), sans élévation administrative.

4.3 Injection de Commandes dans les Shims Batch/PowerShell (CVE-2024-24576)

  • Vecteur : Les wrappers shell .cmd ou .ps1 (Scoop, Chocolatey) réévaluent les arguments. Des métacaractères batch (%, &, |) ou des accents graves dans les arguments permettent d'exécuter des commandes arbitraires.
  • Mitigation Érable :
  • Élimination complète des wrappers shell : déploiement exclusif de Trampolines Binaires Rust précompilés.
  • Transmission directe de la ligne de commande brute via CreateProcessW sans passer par cmd.exe.
  • Pour les scripts PowerShell cibles, invocation durcie avec -File (arguments littéraux stricts sans interprétation de syntaxe).

4.4 Confinement Cryptographique des Fichiers Pointeurs .target

  • Vecteur : Modification locale d'un fichier .target dans bin/ pour pointer vers un exécutable malveillant en dehors du store Érable.
  • Mitigation Érable : Le trampoline Rust valide canoniquement que la cible résolue dans <alias>.target est strictement contenue dans ~/.erable/packages/. Tout pointage vers l'extérieur est bloqué au démarrage avec une alerte de sécurité.

4.5 Injection de Séquences ANSI dans le Terminal (CVE-2023-45806)

  • Vecteur : Séquences d'échappement ANSI invisibles dans les métadonnées de paquets manipulant le titre du terminal, réécrivant la ligne de console ou dissimulant des commandes.
  • Mitigation Érable : Filtrage systématique ansi strip sur toutes les métadonnées de paquets et sorties de vérification avant affichage dans la console.

5. Réseau, Cache & Intégrité

5.1 Empoisonnement de Cache TOCTOU (CVE-2020-11080)

  • Vecteur : Téléchargement dans /tmp partagé, vérification SHA-256, puis décompression. Un processus tiers remplace l'archive entre la vérification et l'extraction (Time-of-Check to Time-of-Use).
  • Mitigation Érable :
  • Cache privé confiné dans ~/.erable/cache/, restreint au seul propriétaire (chmod 0700 sous Unix, ACLs sans héritage sous Windows).
  • Verrouillage exclusif du descripteur de fichier maintenu ouvert entre la validation SHA-256 et l'extraction.

5.2 Redirections HTTP MITM & Confusion de Manifestes (WinGet Advisories)

  • Vecteur : Redirections HTTP non vérifiées (301/302) vers des serveurs miroirs non sécurisés ou substitution de manifestes sur des miroirs non authentifiés.
  • Mitigation Érable :
  • Validation cryptographique post-téléchargement : hachage SHA-256 recalculé en mémoire sur le flux brut et strictement comparé au hash déclaré. En cas de non-concordance, destruction immédiate de l'archive.
  • Index compilé signé par Ed25519 (index.nuon.sig) avec en-tête TUF incluant sequence_id incrémental et date d'expiration valid_until.

6. Bac à Sable, Supply-Chain & Écosystèmes

6.1 Échappement de Bac à Sable & Concurrence sur le Store (Nix CVE-2024-27297)

  • Vecteur : Exploitation de conditions de concurrence sur les descripteurs de fichiers et montages bind dans /nix/store pour s'échapper du bac à sable de build et altérer des chemins partagés.
  • Mitigation Érable :
  • Aucune compilation locale sur le poste client : déploiement exclusif de binaires finaux packagés par les éditeurs officiels et audités en CI.
  • Immutabilité des versions par hardlinks NTFS / CoW et basculement atomique des fichiers pointeurs .target.

6.2 Exfiltration Réseau dans les Scripts de Hook (Supply Chain Attack)

  • Vecteur : Scripts de hook de paquet (pre_install, post_install) lisant ~/.ssh/id_rsa, ~/.aws/credentials ou $env.GITHUB_TOKEN et les exfiltrant par HTTP POST ou requêtes DNS.
  • Mitigation Érable (Défense en Profondeur à 3 Niveaux) :
  • Niveau 1 (Audit Statique CI/CD) : Linter AST obligatoire rejetant toute commande réseau (http, curl, wget, socket) ou référence à des chemins sensibles.
  • Niveau 2 (Assainissement de l'Environnement) : Purge de toutes les variables d'environnement sensibles avant l'exécution du hook.
  • Niveau 3 (Confinement Réseau Matériel Zero Egress) : Exécution sous isolation réseau stricte (unshare --net sous Linux, profil Seatbelt sous macOS, AppContainer sous Windows bloquant tout socket Winsock avec WSAEACCES).

6.3 Vulnérabilités des Gestionnaires d'Écosystèmes (Cargo, npm, PyPI)

  • Vecteur : Exécution de code arbitraire lors de la résolution de dépendances ou de compilation (build.rs dans Cargo, scripts postinstall dans npm, setup.py / typosquatting dans PyPI).
  • Mitigation Érable :
  • Érable est un gestionnaire d'outils finaux compilés : aucun script de build (build.rs) n'est exécuté.
  • Audit statique Zero Egress bloquant sur tous les scripts de cycle de vie.
  • Curage strict par validateurs CI dédiés (validate_main.py, validate_gui.py, etc.) vérifiant notoriété, licence OSI et intégrité.

6.4 Attestation de Provenance SLSA Level 3 & Sigstore

  • Vecteur : Binaires altérés lors du processus de compilation amont ou injectés sans preuve d'origine officielle.
  • Mitigation Érable : Support déclaratif dans parts/package.toml de la vérification d'attestations de provenance cryptographiques SLSA Level 3 générées sur GitHub Actions isolée et vérifiées via le registre public Rekor de Sigstore.

7. Liens et Références Associées