Security
11 min read
2672 views

ZIP Slip : La vulnérabilité d'extraction d'archives partout 📦

IT
InstaTunnel Team
Published by our engineering team
ZIP Slip : La vulnérabilité d'extraction d'archives partout 📦

Comprendre la faille de sécurité critique qui touche des milliers d’applications

En juin 2018, des chercheurs en sécurité ont dévoilé l’une des vulnérabilités les plus répandues dans le développement logiciel moderne : ZIP Slip. Cette faille critique d’extraction d’archives permet à des attaquants d’écrire des fichiers arbitraires sur les systèmes cibles et potentiellement d’exécuter du code à distance. Bien qu’elle ait été divulguée publiquement il y a plusieurs années, de nouvelles occurrences continuent d’émerger, avec des CVEs récents en 2025 affectant des bibliothèques d’archivage populaires.

Qu’est-ce que ZIP Slip ?

ZIP Slip est une forme de faille d’écrasement arbitraire de fichiers exploitant la traversée de répertoires lors de l’extraction d’archives. L’attaque utilise des fichiers d’archive spécialement conçus contenant des noms de fichiers avec des séquences de traversée de répertoires (comme ../../evil.sh) qui, une fois extraits, écrivent des fichiers en dehors du répertoire de destination prévu.

La vulnérabilité ne se limite pas aux fichiers ZIP. Elle concerne plusieurs formats d’archives, notamment :

  • ZIP (.zip)
  • TAR (.tar, .tar.gz)
  • JAR (Java Archive)
  • WAR (Web Application Archive)
  • APK (Android Package)
  • CPIO (.cpiо)
  • RAR (.rar)
  • 7Z (.7z)

Cette large portée fait de ZIP Slip l’une des vulnérabilités les plus dangereuses dans la gestion des fichiers, affectant des applications de grandes organisations telles que HP, Amazon, Apache, Pivotal, Oracle, LinkedIn, Twitter, et bien d’autres.

Mécanismes techniques : comment fonctionne ZIP Slip

Le schéma de code vulnérable

Au cœur, ZIP Slip exploite une erreur simple mais critique dans le code d’extraction d’archives. Considérons cet exemple vulnérable en Java :

EnumerationcZipEntrye entries = zip.getEntries();
while (entries.hasMoreElements()) {
    ZipEntry entry = entries.nextElement();
    File file = new File(destinationDir, entry.getName());
    FileOutputStream fos = new FileOutputStream(file);
    // Extraction du fichier...
}

Le problème réside dans la deuxième ligne : new File(destinationDir, entry.getName()). Ce code concatène aveuglément le répertoire de destination avec le nom de l’entrée du ZIP sans validation. Si entry.getName() retourne quelque chose comme ../../../etc/cron.d/malicious, le fichier sera écrit dans /etc/cron.d/malicious au lieu de rester dans le répertoire de destination prévu.

Anatomie d’une archive malveillante

Créer une charge utile ZIP Slip malveillante consiste à fabriquer une archive avec des noms de fichiers spécialement formatés. Bien que les utilitaires de compression standard ne supportent pas la création de ces fichiers, les attaquants peuvent utiliser du code personnalisé ou des outils spécialisés pour les générer.

Une structure typique d’archive malveillante pourrait ressembler à :

exploit.zip
├── good_file.txt
├── ../../../../../../tmp/backdoor.sh
├── ../../../etc/cron.d/persistence
└── ../../../../var/www/html/shell.php

Lors de l’extraction par un code vulnérable, les fichiers sont écrits à des emplacements très éloignés du répertoire d’extraction prévu, pouvant écraser des fichiers système critiques, des fichiers de configuration ou des scripts exécutables.

Scénarios d’attaque réels

Scénario 1 : Upload de shell via application web

Un attaquant télécharge un fichier ZIP malveillant dans une application web avec une fonction d’installation de plugin. Le ZIP contient :

legitimate_plugin_files/...
../../../../var/www/html/shell.php

Après extraction, l’attaquant obtient un shell web à https://cible.com/shell.php, permettant l’exécution de code à distance avec les privilèges du serveur web.

Scénario 2 : Altération de la configuration système

Une archive malveillante ciblant un système Linux pourrait inclure :

../../.ssh/authorized_keys
../../../etc/cron.d/backdoor

Ce qui permet à l’attaquant d’ajouter sa clé SSH pour un accès persistant ou de créer des tâches planifiées exécutant du code malveillant.

Scénario 3 : Exploitation d’une application mobile

Pour des applications Android, un attaquant pourrait créer une mise à jour APK contenant :

../../data/data/com.target.app/shared_prefs/settings.xml
../../../lib/libmalicious.so

Ce qui écrase les préférences de l’application ou injecte des bibliothèques natives malveillantes.

Pourquoi cette vulnérabilité est partout

Le problème de l’écosystème

La prévalence de ZIP Slip découle de plusieurs problèmes systémiques dans le développement logiciel :

  1. Absence de bibliothèques standard : Beaucoup d’écosystèmes de programmation, notamment Java, manquent de bibliothèques centralisées et de haut niveau pour le traitement des archives. Cela oblige les développeurs à écrire leur propre code d’extraction ou à copier des snippets vulnérables depuis des sources en ligne.

  2. Culture de réutilisation du code : Les développeurs copient fréquemment du code depuis Stack Overflow, des dépôts GitHub, et autres sources communautaires. Lorsqu’un snippet vulnérable devient populaire, il se propage rapidement dans des milliers de projets.

  3. Dépendances transitives : Les applications ne dépendent pas seulement des bibliothèques qu’elles incluent directement — elles héritent aussi des dépendances de ces bibliothèques. Une vulnérabilité dans une dépendance profondément imbriquée peut affecter plusieurs couches d’applications.

  4. Manque de sensibilisation à la sécurité : Beaucoup de développeurs ne sont pas formés à reconnaître les vulnérabilités de traversée de chemin dans le contexte d’extraction d’archives, traitant la gestion des archives comme une opération de routine plutôt qu’une fonction critique en sécurité.

Cas récents découvertes

La vulnérabilité continue de réapparaître dans de nouveaux contextes :

  • CVE-2025-3445 (avril 2025) : Une vulnérabilité ZIP Slip a été découverte dans la bibliothèque Go mholt/archiver, affectant les applications utilisant la fonction archiver.Unarchive(). La vulnérabilité permet la traversée de chemin via des liens symboliques spécialement conçus dans les ZIP.

  • CVE-2024-21518 (2024) : L’installateur du marketplace d’OpenCart a été trouvé vulnérable au ZIP Slip, permettant des écritures arbitraires via le panneau d’administration.

  • CVE-2024-43399 (2024) : Le framework de sécurité mobile (MobSF) contenait une vulnérabilité critique ZIP Slip dans sa fonctionnalité d’analyse APK.

Ces découvertes récentes montrent qu’en dépit de plusieurs années de sensibilisation, de nouvelles instances continuent d’apparaître dans des bases de code héritées ou modernes.

Impact : ce que les attaquants peuvent réaliser

Conséquences immédiates

Exécution de code à distance (RCE) : Le résultat le plus grave de l’exploitation ZIP Slip. Les attaquants peuvent écraser des fichiers exécutables, scripts shell ou bibliothèques dynamiques qui seront ensuite exécutés par le système ou les utilisateurs.

Destruction de données : Les archives malveillantes peuvent cibler des fichiers de données critiques, des bases de données de configuration ou des sauvegardes, entraînant perte ou corruption.

Escalade de privilèges : En écrasant des fichiers système sensibles comme /etc/sudoers ou des clés SSH autorisées, les attaquants peuvent augmenter leurs privilèges sur le système cible.

Mécanismes de persistance : Les attaquants peuvent établir un accès à long terme en modifiant des scripts de démarrage, des tâches cron, des services systemd ou d’autres mécanismes d’exécution automatique.

Voies d’attaque secondaires

ZIP Slip sert souvent de point d’entrée pour des attaques plus sophistiquées :

  • Attaques de chaîne d’approvisionnement : Compromission de systèmes de build ou de dépôts de dépendances par injection de code malveillant via ZIP Slip
  • Mouvement latéral : Utilisation d’un système compromis pour extraire des archives malveillantes sur d’autres systèmes connectés au réseau
  • Déploiement de ransomware : Écrasement de fichiers critiques avant leur chiffrement, rendant la récupération impossible sans sauvegardes

Détection des vulnérabilités ZIP Slip

Techniques d’audit de code

1. Recherche de motifs vulnérables

Cherchez du code qui extrait des archives sans validation appropriée :

// SIGNAL D'ALERTE : concaténation directe sans validation
File file = new File(baseDir, entry.getName());

// SIGNAL D'ALERTE : absence de vérification de la canonicalisation du chemin
String filePath = destinationDir + File.separator + entry.getName();

2. Analyse des fonctions de traitement d’archives

Examinez tout code qui : - Ouvre des fichiers ZIP, TAR, RAR ou autres - Parcourt les entrées d’archives - Écrit le contenu extrait sur le disque - Traite des fichiers d’archives téléchargés

3. Analyse des dépendances

Utilisez des outils automatisés pour identifier les dépendances vulnérables. Des plateformes de sécurité comme Snyk maintiennent des listes à jour des bibliothèques affectées dans plusieurs écosystèmes.

Stratégies de détection en temps réel

Surveillance du système de fichiers : Mettre en place une surveillance pour détecter des écritures de fichiers inattendues en dehors des répertoires désignés, notamment pour des chemins critiques comme /etc, /bin, et /lib.

Inspection du contenu des archives : Avant extraction, analyser le contenu des archives pour repérer des motifs de noms de fichiers suspects contenant : - ../ ou ..\ - chemins absolus (commençant par / ou lettres de lecteur) - caractères spéciaux ou astuces d’encodage conçus pour contourner les filtres

Extraction en sandbox : Extraire les archives dans des environnements isolés (conteneurs, VM) avant de déplacer le contenu vérifié vers des systèmes de production.

Stratégies de prévention et d’atténuation

Bonnes pratiques de codage

1. Validation et canonicalisation des chemins

Validez toujours les chemins de fichiers extraits par rapport au répertoire de destination prévu :

public static boolean isSafePath(File destination, ZipEntry entry) throws IOException {
    File destinationFile = new File(destination, entry.getName());
    String canonicalDestination = destination.getCanonicalPath();
    String canonicalTarget = destinationFile.getCanonicalPath();
    
    return canonicalTarget.startsWith(canonicalDestination + File.separator);
}

2. Utiliser des bibliothèques sécurisées

Privilégiez les bibliothèques avec une protection intégrée contre ZIP Slip :

  • Java : Apache Commons Compress (versions récentes)
  • Python : Utiliser zipfile avec validation appropriée
  • .NET : Utiliser System.IO.Compression avec vérification des chemins
  • Node.js : Bibliothèques comme extract-zip avec correctifs de sécurité

3. Mettre en œuvre une défense en profondeur

import os
import zipfile

def safe_extract(zip_path, extract_to):
    with zipfile.ZipFile(zip_path, 'r') as zip_ref:
        for member in zip_ref.namelist():
            # Normaliser et valider le chemin
            member_path = os.path.normpath(os.path.join(extract_to, member))
            
            # Vérifier qu'il reste dans le répertoire d'extraction
            if not member_path.startswith(os.path.abspath(extract_to)):
                raise Exception(f"Tentative de traversée de chemin : {member}")
            
            # Vérifications supplémentaires
            if os.path.isabs(member):
                raise Exception(f"Chemin absolu non autorisé : {member}")
            
            # Extraction sécurisée
            zip_ref.extract(member, extract_to)

Protections au niveau applicatif

1. Restrictions sur le téléchargement de fichiers

  • Limiter les formats d’archives acceptés à ceux nécessaires
  • Imposer des limites de taille pour prévenir les attaques par zip bomb
  • Exiger une authentification et une autorisation pour le téléchargement d’archives
  • Journaliser toutes les opérations d’extraction avec des métadonnées détaillées

2. Principe du moindre privilège

Exécuter les processus d’extraction avec des permissions minimales : - Utiliser des comptes de service dédiés avec un accès restreint au système de fichiers - Mettre en œuvre des politiques de contrôle d’accès obligatoire (MAC) - Utiliser des conteneurs ou des sandbox pour le contenu non fiable

3. Validation des entrées

Avant de traiter une archive : - Scanner pour détecter des malwares et motifs suspects - Valider la structure et l’intégrité de l’archive - Vérifier les ratios de compression anormaux (potentiels zip bombs) - Rejeter les archives avec des noms d’entrée suspects

Considérations d’infrastructure

Isolation par conteneur : Extraire dans des conteneurs Docker ou autres technologies d’isolation, empêchant toute traversée de chemin d’affecter le système hôte.

Permissions du système de fichiers : Configurer des permissions strictes sur les répertoires système pour empêcher toute écriture non autorisée, même si la traversée de chemin réussit.

Segmentation réseau : Isoler les systèmes traitant des archives téléchargées par les utilisateurs des infrastructures critiques pour limiter la portée d’une attaque.

Tester la vulnérabilité ZIP Slip

Création de cas de test

Les équipes de sécurité doivent inclure des tests ZIP Slip dans leurs routines d’évaluation :

Cas de test 1 : Traversée simple

L'archive contient : ../../../etc/test.txt
Résultat attendu : Échec de l'extraction ou fichier dans le répertoire de destination

Cas de test 2 : Traversée encodée

L'archive contient : ..%2F..%2F..%2Fetc%2Ftest.txt
Résultat attendu : Échec de l'extraction après décodage

Cas de test 3 : Traversée Windows

L'archive contient : ..\..\..\Windows\System32\test.dll
Résultat attendu : Échec sur les systèmes Windows

Cas de test 4 : Chemins absolus

L'archive contient : /tmp/malicious.sh
Résultat attendu : Rejet des chemins absolus

Outils de test automatisés

Plusieurs outils peuvent aider à identifier les vulnérabilités ZIP Slip :

  • Snyk : Analyse complète des dépendances avec détection ZIP Slip
  • OWASP Dependency-Check : Outil open-source pour identifier les composants vulnérables
  • SonarQube : Analyse statique avec règles de sécurité pour la traversée de chemin
  • Scripts personnalisés : Rédiger des tests spécifiques pour votre code de gestion d’archives

Pourquoi chaque fonctionnalité de téléchargement doit faire l’objet d’une validation

La fonctionnalité de téléchargement de fichiers est omniprésente dans les applications modernes :

  • Plateformes CMS : WordPress, Drupal, etc., permettant le téléchargement de plugins/thèmes
  • Stockage cloud : Dropbox, Google Drive, OneDrive gèrent des milliards d’archives
  • Outils de développement : Gestionnaires de paquets, pipelines CI/CD, plugins IDE traitent des archives en continu
  • Applications mobiles : App stores, mécanismes de mise à jour, systèmes de distribution de contenu
  • Logiciels d’entreprise : Gestion documentaire, sauvegardes, outils de collaboration

Chacune de ces situations constitue une surface d’attaque potentielle. Une extraction d’archive non validée peut compromettre l’ensemble du système, rendant la validation indispensable.

Le pipeline upload-à-exécution

Considérez le flux typique :

  1. L’utilisateur télécharge une archive
  2. Le serveur stocke temporairement le fichier
  3. Le processus d’extraction commence (POINT VULNÉRABLE)
  4. L’application traite le contenu extrait
  5. Le contenu devient accessible aux utilisateurs/systèmes

L’étape d’extraction est celle où ZIP Slip intervient. Au moment où l’application détecte quelque chose d’anormal (si jamais), des fichiers malveillants peuvent déjà avoir été écrits dans des emplacements critiques.

Réponse de l’industrie et état actuel

La communauté de la sécurité a déployé d’importants efforts pour traiter ZIP Slip :

Correctifs de bibliothèques : La majorité des grandes bibliothèques d’archivage ont publié des correctifs. L’équipe Snyk maintient un dépôt GitHub recensant les bibliothèques affectées et leur statut de correction dans différents écosystèmes.

Formation des développeurs : Les programmes de formation à la sécurité incluent désormais ZIP Slip comme sujet central dans les cursus de codage sécurisé.

Analyse automatisée : Les outils de sécurité modernes intègrent la détection ZIP Slip dans leurs bases de données de vulnérabilités, aidant les organisations à identifier les dépendances affectées.

Améliorations standardisées : Certains écosystèmes développent des bibliothèques centralisées et sécurisées pour le traitement des archives, réduisant la nécessité de solutions maison.

Cependant, des défis subsistent :

  • Systèmes legacy : Les anciennes applications peuvent ne jamais recevoir de mises à jour
  • Hell dépendances : La mise à jour de dépendances transitives vulnérables peut casser des applications
  • Variantes zero-day : De nouvelles variantes continuent d’apparaître, comme en 2025
  • Sensibilisation des développeurs : Beaucoup ignorent encore le problème

Résumé des bonnes pratiques

Pour les développeurs

  1. Ne jamais faire confiance aux chemins d’entrée d’archive - Validez toujours par rapport au répertoire d’extraction
  2. Utiliser des bibliothèques sécurisées - Privilégiez celles avec protections intégrées contre ZIP Slip
  3. Mettre en place des listes blanches - Définissez des emplacements acceptables et rejetez tout le reste
  4. Ajouter des tests de sécurité - Incluez des tests ZIP Slip dans vos suites de tests
  5. Suivre le principe du moindre privilège - Exécuter l’extraction avec des permissions minimales

Pour les équipes de sécurité

  1. Réaliser des audits réguliers - Scanner le code et les dépendances pour motifs vulnérables
  2. Mettre en place une surveillance - Détecter en temps réel des écritures suspectes
  3. Former les développeurs - S’assurer qu’ils comprennent les risques de traversée de chemin
  4. Tester les fonctionnalités de téléchargement - Cibler spécifiquement la gestion des archives lors de tests d’intrusion
  5. Avoir des plans de réponse aux incidents - Se préparer à une exploitation ZIP Slip éventuelle

Pour les organisations

  1. Mettre à jour les dépendances - Maintenir les bibliothèques d’archivage à jour avec les correctifs de sécurité
  2. Adopter DevSecOps - Intégrer la sécurité dans les pipelines CI/CD
  3. Imposer la revue de code - Exiger une validation de sécurité pour tout code de gestion d’archives
  4. Déployer une défense en profondeur - Utiliser plusieurs couches de protection (validation, sandboxing, permissions)
  5. Planifier les incidents - Prévoir des procédures de rollback en cas de compromission

L’avenir de la sécurité des archives

Alors que les applications continueront de dépendre fortement des fichiers d’archives pour la distribution logicielle, la sauvegarde de données, etc., l’importance d’une gestion sécurisée des archives ne fera que croître.

Menaces émergentes : De nouvelles variantes de ZIP Slip apparaissent, notamment : - Traversée basée sur des liens symboliques (voir CVE-2025-3445) - Astuces d’encodage pour contourner les filtres - Attaques TOCTOU lors de l’extraction

Problèmes cloud-native : Les fonctions serverless et les applications conteneurisées introduisent de nouveaux vecteurs d’attaque où ZIP Slip pourrait compromettre les politiques IAM, les fonctions Lambda ou l’orchestration de conteneurs.

IA et automatisation : Avec la génération de code par des outils IA, il devient crucial de s’assurer qu’ils ne reproduisent pas de motifs vulnérables.

Conclusion

ZIP Slip représente une tempête parfaite de vulnérabilités de sécurité : facile à exploiter, difficile à détecter, répandue dans tous les écosystèmes, et pouvant avoir des conséquences catastrophiques. La persistance de cette faille — avec de nouvelles instances en 2025 — montre que la simple prise de conscience ne suffit pas.

Toute application traitant des archives, en particulier celles acceptant des uploads utilisateur, doit mettre en œuvre une validation et des mesures de sécurité appropriées. Les enjeux sont trop élevés pour se reposer sur des suppositions d’intégrité ou faire confiance au fait que “cela ne nous arrivera pas”.

En comprenant les détails techniques de ZIP Slip, en mettant en place une validation robuste, en utilisant des bibliothèques sécurisées, et en restant vigilant via des tests et une surveillance, les développeurs et organisations peuvent protéger leurs systèmes contre cette menace omniprésente. La vulnérabilité est partout, mais avec des précautions appropriées, son exploitation peut être évitée.

Souvenez-vous : Ne faites pas confiance à un archive. Validez chaque chemin. Sécurisez vos extractions. La sécurité de votre système en dépend.


Ressources supplémentaires

Longueur de l’article : ~2 000 mots
Dernière mise à jour : novembre 2025
Mots-clés SEO : vulnérabilité ZIP Slip, sécurité extraction d’archives, attaque traversée de chemin, sécurité upload de fichiers, exploitation ZIP, gestion sécurisée des archives, CVE-2025-3445, archive malveillante, exécution de code à distance

Continue from this article into the most relevant product guides and workflows.

Related Topics

#zip slip, zip slip vulnerability, archive extraction vulnerability, path traversal in zip files, zip file extraction attack, zip path traversal, malicious zip archive, file overwrite via zip, zip slip exploit, zip slip attack, zip slip CVE, zip slip 2025, zip file security, archive validation, zip extraction bug, zip file upload vulnerability, zip directory traversal, zip extraction overwrite, unzipping vulnerability, zip exploit tutorial, zip path validation, zip file sanitization, zip extraction mitigation, secure zip handling, zip slip remediation, zip slip prevention, zip slip detection, file upload vulnerability, archive extraction flaw, archive traversal exploit, tar slip vulnerability, jar slip exploit, zip extraction library bug, java zip slip, python zip slip, nodejs zip slip, golang zip slip, csharp zip slip, secure file extraction, zip entry sanitization, zip path normalization, zip traversal prevention, unzip function exploit, CVE zip slip, OWASP zip slip, bug bounty zip slip, zip slip github, secure zip extraction code, validate archive contents, zip upload security, zip sanitization best practices, zip slip real world, zip slip demo, zip slip exploit example, zip slip mitigation strategies, directory traversal attack, insecure archive extraction

Keep building with InstaTunnel

Read the docs for implementation details or compare plans before you ship.

Share this article

More InstaTunnel Insights

Discover more tutorials, tips, and updates to help you build better with localhost tunneling.

Browse All Articles