WIKI / FIELD NOTE

Cloud y servicios externos

Reconocimiento de recursos cloud, almacenamiento público, tenants y servicios externos asociados a una organización.

Guía rápida para identificar recursos cloud y servicios externos asociados a una organización. Limita las comprobaciones a información pública y activos autorizados; una IP o hostname del proveedor no demuestra propiedad del tenant.

Flujo rápido

  1. Extraer proveedores desde DNS, ASN, certificados, SPF y cabeceras.
  2. Identificar patrones de AWS, Azure, GCP, CDN y plataformas PaaS.
  3. Generar candidatos de storage a partir de marcas y dominios confirmados.
  4. Comprobar únicamente existencia, acceso público y metadatos visibles.
  5. Localizar tenants, SaaS corporativo y dominios personalizados.
  6. Validar cada relación con DNS, contenido, certificados o fuentes corporativas.
  7. Registrar activos propios, compartidos, históricos y de terceros por separado.
EvidenciaPosible proveedor
*.amazonaws.com, *.awsstatic.comAWS
*.azurewebsites.net, *.windows.net, *.azureedge.netAzure
*.googleapis.com, *.appspot.com, *.run.appGCP
*.cloudfront.netAmazon CloudFront
*.firebaseapp.com, *.web.appFirebase
*.github.ioGitHub Pages
*.vercel.appVercel
*.netlify.appNetlify

AWS

Buscar recursos asociados a AWS en CNAME, certificados, código JavaScript, repositorios y documentación.

Servicios frecuentes:

  • S3: bucket.s3.amazonaws.com.
  • CloudFront: distribution.cloudfront.net.
  • Elastic Load Balancing: *.elb.amazonaws.com.
  • API Gateway: *.execute-api.<region>.amazonaws.com.
  • Amplify: *.amplifyapp.com.
  • Cognito: dominios y endpoints regionales de autenticación.
# Seguir CNAME y resolución
dig +short CNAME app.example.com
dig +short A app.example.com
 
# Consultar un bucket candidato sin credenciales
aws s3api head-bucket --bucket example-assets --no-sign-request
 
# Listar únicamente si el bucket permite acceso público
aws s3 ls s3://example-assets --no-sign-request

Los errores de S3 pueden diferenciar inexistencia, acceso denegado o región incorrecta, pero no prueban que el bucket pertenezca al objetivo.

Azure

Patrones habituales:

  • App Services: *.azurewebsites.net.
  • Blob Storage: *.blob.core.windows.net.
  • Static Web Apps: *.azurestaticapps.net.
  • Front Door/CDN: *.azurefd.net, *.azureedge.net.
  • Traffic Manager: *.trafficmanager.net.
  • API Management: *.azure-api.net.
# Detectar el backend mediante DNS
dig +short CNAME app.example.com
 
# Cabeceras y certificado
curl -skI https://app.example.com/
openssl s_client -connect app.example.com:443 \
  -servername app.example.com </dev/null 2>/dev/null \
  | openssl x509 -noout -subject -issuer -ext subjectAltName

No enumerar suscripciones ni recursos internos con credenciales que no hayan sido proporcionadas expresamente para la evaluación.

GCP

Patrones habituales:

  • Cloud Storage: storage.googleapis.com/<bucket> o <bucket>.storage.googleapis.com.
  • App Engine: *.appspot.com.
  • Cloud Run: *.run.app.
  • Cloud Functions: endpoints regionales de cloudfunctions.net.
  • Firebase Hosting: *.web.app y *.firebaseapp.com.
# Consultar un bucket candidato
curl -sI https://storage.googleapis.com/example-assets
 
# Listar solo si permite acceso público
gcloud storage ls gs://example-assets
 
# Revisar dominio personalizado y backend
dig +short CNAME app.example.com

Una respuesta 403 puede confirmar que el nombre existe, pero no su propietario ni el contenido.

S3, Blob Storage y buckets

Generar nombres candidatos usando:

  • Dominio raíz y marca.
  • Nombre legal, filial o producto.
  • Sufijos como assets, static, media, backup, logs, dev o prod.
  • Referencias exactas encontradas en HTML, JavaScript, aplicaciones móviles o repositorios.
# AWS S3
curl -sI https://example-assets.s3.amazonaws.com/
 
# Azure Blob Storage
curl -sI https://exampleassets.blob.core.windows.net/
 
# Google Cloud Storage
curl -sI https://storage.googleapis.com/example-assets/

Priorizar candidatos derivados de evidencias reales. Evitar fuerza bruta masiva de namespaces globales.

Storage público

Comprobar por separado:

  • Existencia del recurso.
  • Listado público del contenedor.
  • Lectura pública de objetos conocidos.
  • Escritura o modificación: no probar sin autorización expresa.
  • Índices, metadatos y políticas visibles.
  • Referencias desde aplicaciones oficiales.
# Azure: listado anónimo cuando está permitido
curl -s 'https://exampleassets.blob.core.windows.net/public?restype=container&comp=list'
 
# S3: listado anónimo cuando está permitido
aws s3 ls s3://example-assets --no-sign-request
 
# GCS: metadatos/listado público
curl -s 'https://storage.googleapis.com/storage/v1/b/example-assets/o'

No descargar colecciones completas. Capturar la mínima evidencia necesaria y evitar exponer nombres o contenido sensible en informes no protegidos.

CloudFront y CDN

Los CDN ocultan el origen y sirven infraestructura compartida.

# CNAME y cadena de resolución
dig +short CNAME cdn.example.com
dig +trace cdn.example.com
 
# Cabeceras indicativas
curl -skI https://cdn.example.com/
 
# Certificado presentado por el hostname
openssl s_client -connect cdn.example.com:443 \
  -servername cdn.example.com </dev/null 2>/dev/null \
  | openssl x509 -noout -subject -issuer -ext subjectAltName

Indicadores frecuentes: Via, X-Cache, CF-Ray, X-Amz-Cf-*, Server-Timing y CNAME del proveedor. No escanear rangos completos de una CDN.

Azure App Services

Los dominios personalizados de App Service suelen conservar un vínculo DNS con *.azurewebsites.net.

dig +short CNAME app.example.com
curl -skI https://app.example.com/
 
# Comprobar un hostname exacto ya descubierto
httpx -u https://example-app.azurewebsites.net \
  -status-code -title -tech-detect -cname -tls-grab

Registrar el hostname por defecto, dominio personalizado, certificado y estado de la aplicación. No reclamar ni vincular nombres aparentemente abandonados.

Firebase

Firebase puede aparecer en hosting, configuración JavaScript, autenticación y endpoints de base de datos.

Indicadores habituales:

<project>.firebaseapp.com
<project>.web.app
<project>.firebaseio.com
<project>-default-rtdb.firebaseio.com
firebasestorage.googleapis.com

Buscar en JavaScript claves como projectId, authDomain, storageBucket y databaseURL. Esta configuración suele ser pública y no constituye por sí sola una credencial.

grep -Eo "(projectId|authDomain|storageBucket|databaseURL)[\"']?[^,}]+" javascript.txt
curl -sI https://example-project.web.app/

No intentar escribir datos ni eludir reglas de seguridad durante reconocimiento.

GitHub Pages

GitHub Pages usa *.github.io y admite dominios personalizados mediante CNAME.

dig +short CNAME docs.example.com
curl -skI https://docs.example.com/
 
# Buscar referencias públicas
git grep -n 'docs.example.com\|github.io' 2>/dev/null

Relacionar organización, repositorio, fichero CNAME, contenido y enlaces oficiales. Un dominio mal configurado debe documentarse; no intentar reclamarlo.

Vercel y Netlify

Patrones habituales:

  • Vercel: *.vercel.app, cabeceras como x-vercel-id.
  • Netlify: *.netlify.app, cabeceras y DNS del proveedor.
dig +short CNAME app.example.com
curl -skI https://app.example.com/
httpx -u https://app.example.com -title -status-code -cname -tech-detect -tls-grab

Buscar nombres de proyecto en repositorios, metadatos de despliegue, JavaScript y certificados. No registrar proyectos o dominios libres para demostrar una posible toma de control.

SaaS corporativo

DNS, SPF, SSO, políticas legales y portales de login suelen revelar servicios SaaS.

Categorías frecuentes:

  • Correo y colaboración.
  • CRM, soporte y ticketing.
  • Gestión de identidad y SSO.
  • Recursos humanos y recruiting.
  • Marketing, analítica y formularios.
  • Transferencia de archivos y firma electrónica.
  • CI/CD, repositorios y monitorización.
# MX, SPF y verificaciones de dominio
dig +short MX example.com
dig +short TXT example.com
 
# CNAME de portales conocidos
dig +short CNAME support.example.com
dig +short CNAME login.example.com

Un include SPF o registro de verificación demuestra una relación técnica pasada o presente, no necesariamente uso activo.

Tenants

Un tenant identifica la instancia lógica de una organización dentro de un proveedor SaaS o cloud.

Buscar:

  • Dominios de login y redirecciones SSO.
  • Metadatos OpenID Connect o SAML publicados.
  • Dominios verificados en DNS.
  • Hostnames específicos de la organización.
  • Identificadores visibles en JavaScript o aplicaciones móviles.
# Metadatos públicos de Microsoft Entra ID para un dominio confirmado
curl -s 'https://login.microsoftonline.com/example.com/v2.0/.well-known/openid-configuration' \
  | jq '{issuer,authorization_endpoint,token_endpoint}'
 
# Configuración OpenID pública de una aplicación
curl -s https://login.example.com/.well-known/openid-configuration | jq

No realizar enumeración de usuarios, password spraying ni intentos de autenticación durante esta fase.

Cloud enumeration

La enumeración debe partir de indicadores confirmados, no de combinaciones ilimitadas de nombres.

# Extraer endpoints cloud de URLs recopiladas
grep -Eio 'https?://[^[:space:]<>]+' urls.txt \
  | grep -Ei 'amazonaws\.com|azurewebsites\.net|windows\.net|googleapis\.com|appspot\.com|run\.app|firebaseio\.com|vercel\.app|netlify\.app' \
  | sort -u > cloud-endpoints.txt
 
# Resolver y enriquecer hostnames
httpx -l cloud-endpoints.txt -silent -status-code -title \
  -ip -cname -tech-detect -tls-grab -json -o cloud.jsonl

Fuentes para generar candidatos:

  • DNS actual e histórico.
  • Certificate Transparency.
  • JavaScript y código fuente público.
  • Repositorios y pipelines.
  • Aplicaciones móviles.
  • Documentación, ofertas de empleo y casos de éxito.
  • Shodan, Censys y buscadores.

Validación y atribución

Requerir al menos dos señales antes de atribuir un recurso:

  • CNAME desde un dominio confirmado.
  • Contenido o marca específica de la organización.
  • Certificado con un dominio controlado por el objetivo.
  • Referencia desde código, documentación o aplicación oficial.
  • Identificador de tenant o proyecto consistente.
  • Confirmación corporativa del proveedor utilizado.

Clasificar la evidencia como confirmada, probable, histórica, compartida o descartada.

Plantilla de inventario

Recurso | Proveedor | Servicio | Tenant/proyecto | Dominio | Región | Acceso público | Evidencia | Fuente | Fecha | Confianza | En alcance

Para storage añadir: existe, lista, lee, escribe no comprobado y propietario validado.