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
- Surface d'Attaque des Gestionnaires de Paquets
- Matrice Synthétique des Vulnérabilités Majeures
- Décompression & Système de Fichiers
- 3.1 Zip Slip & Traversée de Répertoires (CVE-2018-1002200, CVE-2023-45853)
- 3.2 Écrasement Collatéral par Liens Symboliques (CVE-2021-32658)
- 3.3 Traversée de Répertoires dans la Persistance et l'Extraction (Scoop #4588 / #5012)
- Exécution Locale, Privilèges & Shims
- 4.1 Élévation de Privilèges par Bits SUID/SGID (CVE-2021-44733)
- 4.2 DLL Hijacking & Binary Planting Win32 (CVE-2020-11738, CVE-2022-33984)
- 4.3 Injection de Commandes dans les Shims Batch/PowerShell (CVE-2024-24576)
- 4.4 Confinement Cryptographique des Fichiers Pointeurs .target
- 4.5 Injection de Séquences ANSI dans le Terminal (CVE-2023-45806)
- Réseau, Cache & Intégrité
- 5.1 Empoisonnement de Cache TOCTOU (CVE-2020-11080)
- 5.2 Redirections HTTP MITM & Confusion de Manifestes (WinGet Advisories)
- Bac à Sable, Supply-Chain & Écosystèmes
- 6.1 Échappement de Bac à Sable & Concurrence sur le Store (Nix CVE-2024-27297)
- 6.2 Exfiltration Réseau dans les Scripts de Hook (Supply Chain Attack)
- 6.3 Vulnérabilités des Gestionnaires d'Écosystèmes (Cargo, npm, PyPI)
- 6.4 Attestation de Provenance SLSA Level 3 & Sigstore
- 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ènedestination_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
persistouextract_dircontenant des chemins relatifs malveillants (..\..) ancrant des jonctions NTFS surC:\Program Filesou écrasant des données hôtes lors de la désinstallation récursive. - Mitigation Érable : Résolution canonique via
path expandet vérification obligatoire quenormalized_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) ousetgid(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 & 0755lors 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)etSetDllDirectoryW(L""), retirant définitivement le répertoire courant de la recherche de DLLs. - Le trampoline positionne
lpCurrentDirectorysur 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
.cmdou.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
CreateProcessWsans passer parcmd.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
.targetdansbin/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>.targetest 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 stripsur 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
/tmppartagé, 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 0700sous 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 incluantsequence_idincrémental et date d'expirationvalid_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/storepour 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/credentialsou$env.GITHUB_TOKENet 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 --netsous Linux, profil Seatbelt sous macOS, AppContainer sous Windows bloquant tout socket Winsock avecWSAEACCES).
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.rsdans Cargo, scriptspostinstalldans 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.tomlde 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.