Alcaldia Mayor de Cartagena de Indias
Rama Ejecutiva · Sector territorial · Otra entidad
Riesgo alto. Se identificaron 3 hallazgos críticos. Acción recomendada: publicar registros DMARC con política reject, habilitar HSTS y completar el set de headers de seguridad.
Hallazgos (33)
VPN de desarrollo rotulada y publicada en internet
Criticavpn.dev.cartagena.gov.co aparece en CT logs publicos. Pritunl con pagina de login activa, hospedado en AWS US (54.89.167.195).
Un ambiente de pruebas suele estar menos parchado que produccion. Pritunl ha tenido CVEs publicas. Etiquetar dev por nombre en internet equivale a colgar la llave de repuesto del marco de la puerta.
Cluster interno (kc/kf/ee + VPN principal) publicado en DNS publico
Criticakc.cartagena.gov.co, kf.cartagena.gov.co, ee.cartagena.gov.co y vpn.cartagena.gov.co son alcanzables por nombre desde cualquier internet, aunque sus HTTPS hacen timeout.
Los nombres de los sistemas internos en DNS publico permiten a un atacante con IA inventariarlos en segundos. Bruteforce trivial los descubre incluso si no estan en CT logs.
Ausencia total de canal de divulgacion responsable
CriticaNinguno de los 13 subdominios alive publica /.well-known/security.txt (RFC 9116).
Un investigador que descubra una vulnerabilidad no tiene canal estandarizado. La crisis va a prensa antes que a la Alcaldia.
Sin registros CAA --- cualquier CA puede emitir certificados
Altadig CAA cartagena.gov.co retorna vacio. Cualquier autoridad certificadora publica puede emitir certificados a nombre del dominio sin restriccion.
Combinado con monitoreo CT incompleto, un atacante puede generar certificados validos para spoofing sin que la Alcaldia lo detecte automaticamente.
DMARC en modo permisivo (quarantine en lugar de reject)
Alta_dmarc.cartagena.gov.co publica v=DMARC1; p=quarantine con rua/ruf habilitados, pero sin rechazo activo de correos no autenticados.
Un atacante puede suplantar @cartagena.gov.co contra ciudadanos, proveedores y entes territoriales. Los correos van a spam pero no son rechazados.
Headers exponen version exacta de PHP y Drupal
AltaCada respuesta del portal incluye X-Powered-By: PHP/8.3.30 y X-Generator: Drupal 10, ademas de SPRequestDuration y X-Drupal-Cache (telemetria interna).
Cada header acelera la explotacion de vulnerabilidades de version especifica. Buena practica: ocultar Server, X-Powered-By y X-Generator en respuestas externas.
Datos del portal hospedados en CDN extranjero (Cloudflare US)
AltaApex y la mayoria de subdominios resuelven a 104.18.20.16 (Cloudflare AS13335, San Francisco, EE.UU.). vpn.dev.* esta en AWS us-east-1.
Ley 1581/2012 art. 26 exige consentimiento o nivel de proteccion adecuado para transferencia internacional. EE.UU. no esta en la lista de paises adecuados de la SIC sin clausulas contractuales tipo.
VPN principal alcanzable solo por nombre, no por HTTPS
Mediavpn.cartagena.gov.co (190.71.138.129, IP nacional) tiene FQDN publico pero HTTPS hace timeout --- exposicion simbolica al inventario.
El nombre del recurso esta publicado en DNS aunque el servicio este restringido por IP. Bruteforce de subdominios lo encuentra trivialmente.
cluster.cartagena.gov.co en estado de mantenimiento prolongado
Mediacluster.cartagena.gov.co retorna 503 con titulo "Sitio desconectado en mantenimiento" sin fecha de retorno.
Aplicacion huerfana en estado intermedio --- consume superficie expuesta y certificado emitido sin proposito operativo claro.
volta.cartagena.gov.co activo sin contenido real (404)
Mediavolta.cartagena.gov.co resuelve y responde 404 desde Cloudflare. Subdominio activo sin proposito visible.
Candidato a decomisionamiento. Cualquier subdominio con certificado y sin contenido es deuda de superficie.
Headers exponen telemetria interna del CMS
MediaX-Drupal-Cache, X-Drupal-Dynamic-Cache (UNCACHEABLE) y SPRequestDuration son visibles en cada respuesta.
La telemetria interna del CMS no debe estar accesible externamente --- facilita identificar paginas con cacheo deficiente para amplificar ataques.
autodiscover.cartagena.gov.co sin negociacion HTTPS estandarizada
Bajaautodiscover.cartagena.gov.co (40.99.247.40, M365 Exchange) rechaza conexiones HTTPS directas (Connection refused).
Aunque es comportamiento estandar de Microsoft 365, una negociacion TLS robusta refuerza la postura general del dominio.
Arquitectura distribuida sin gobierno unico
Infosuperlideres.* en Vercel (185.158.133.1), apex en Cloudflare US, vpn.dev.* en AWS US, cluster local en 190.71.138.197 --- multiples proveedores sin gobierno aparente.
La heterogeneidad operativa multiplica los puntos de falla y dificulta la correlacion de eventos de seguridad. Sin gobierno unico, cada proveedor establece su propio estandar.
robots.txt revela 3 ruta(s) sensibles en cartagena.gov.co
MediaDisallow/Allow incluye: /composer/Template/README.txt, /admin/, /index.php/admin/. robots.txt es publico — los crawlers respetan, los atacantes lo usan como mapa.
robots.txt no impide acceso, solo solicita ignorar a crawlers benignos. Listar paths internos/admin alli es un atajo para enumerar superficie sensible.
Certificado wildcard cubre 1 dominios en cartagena.gov.co
MediaWildcards en SAN: *.cartagena.gov.co. Total SAN: 3.
Wildcard certs simplifican operación pero amplían el blast radius: si la llave privada se compromete, el atacante impersona TODOS los subdominios cubiertos. Buena práctica: cert por servicio.
DNSSEC ausente en cartagena.gov.co
MediaNo hay registro DS en zona padre.
Sin DNSSEC, un atacante con MITM en cualquier resolvedor puede inyectar respuestas DNS falsas. Permite redirección a servidores controlados sin alertas.
DNS de cartagena.gov.co totalmente fuera de Colombia
MediaNS records: asa.ns.cloudflare.com, hugh.ns.cloudflare.com
Toda la zona DNS está bajo proveedores extranjeros — los logs de queries DNS, claves DNSSEC y eventual modificación quedan bajo jurisdicción foránea. Para el Estado, esto debería evaluarse contra Ley 1581/2012.
Ruta /modules/README.txt listada en Disallow es accesible publicamente
MediaGET https://cartagena.gov.co/modules/README.txt retorna 200.
robots.txt expresa intencion de ocultar; un atacante usa esa lista como mapa. Ruta accesible significa que la 'proteccion' es solo cooperativa.
Ruta /sites/README.txt listada en Disallow es accesible publicamente
MediaGET https://cartagena.gov.co/sites/README.txt retorna 200.
robots.txt expresa intencion de ocultar; un atacante usa esa lista como mapa. Ruta accesible significa que la 'proteccion' es solo cooperativa.
Ruta /README.md listada en Disallow es accesible publicamente
MediaGET https://cartagena.gov.co/README.md retorna 200.
robots.txt expresa intencion de ocultar; un atacante usa esa lista como mapa. Ruta accesible significa que la 'proteccion' es solo cooperativa.
Ruta /filter/tips listada en Disallow es accesible publicamente
MediaGET https://cartagena.gov.co/filter/tips retorna 200.
robots.txt expresa intencion de ocultar; un atacante usa esa lista como mapa. Ruta accesible significa que la 'proteccion' es solo cooperativa.
Ruta /themes/README.txt listada en Disallow es accesible publicamente
MediaGET https://cartagena.gov.co/themes/README.txt retorna 200.
robots.txt expresa intencion de ocultar; un atacante usa esa lista como mapa. Ruta accesible significa que la 'proteccion' es solo cooperativa.
Drupal CHANGELOG.txt accesible en www.cartagena.gov.co
MediaGET https://www.cartagena.gov.co/core/CHANGELOG.txt entrega historial de versiones Drupal.
El CHANGELOG revela versión exacta de Drupal y patches aplicados — facilita matching con CVEs publicadas. Recomendación: bloquear o eliminar de raíz web.
Drupal CHANGELOG.txt accesible en cartagena.gov.co
MediaGET https://cartagena.gov.co/core/CHANGELOG.txt entrega historial de versiones Drupal.
El CHANGELOG revela versión exacta de Drupal y patches aplicados — facilita matching con CVEs publicadas. Recomendación: bloquear o eliminar de raíz web.
Drupal CHANGELOG.txt accesible en tramites.cartagena.gov.co
MediaGET https://tramites.cartagena.gov.co/core/CHANGELOG.txt entrega historial de versiones Drupal.
El CHANGELOG revela versión exacta de Drupal y patches aplicados — facilita matching con CVEs publicadas. Recomendación: bloquear o eliminar de raíz web.
Bucket S3 privado existe con nombre mayor
InfoGET https://mayor.s3.amazonaws.com retorna 403 AccessDenied (bucket existe, no listable). Sugiere infraestructura cloud asociada a la entidad.
Bucket existe pero está cerrado al público. Útil como pista de inventario cloud — en un escenario de takeover (entidad deja de pagar AWS), un atacante podría reclamar el nombre. Recomendación: documentar y monitorear.
Bucket GCS privado existe con nombre mayor
InfoGET https://storage.googleapis.com/mayor retorna 403 AccessDenied (bucket existe, no listable). Sugiere infraestructura cloud asociada a la entidad.
Bucket existe pero está cerrado al público. Útil como pista de inventario cloud — en un escenario de takeover (entidad deja de pagar AWS), un atacante podría reclamar el nombre. Recomendación: documentar y monitorear.
Bucket S3 privado existe con nombre mayor-files
InfoGET https://mayor-files.s3.amazonaws.com retorna 403 AccessDenied (bucket existe, no listable). Sugiere infraestructura cloud asociada a la entidad.
Bucket existe pero está cerrado al público. Útil como pista de inventario cloud — en un escenario de takeover (entidad deja de pagar AWS), un atacante podría reclamar el nombre. Recomendación: documentar y monitorear.
Bucket S3 privado existe con nombre alcaldia
InfoGET https://alcaldia.s3.amazonaws.com retorna 403 AccessDenied (bucket existe, no listable). Sugiere infraestructura cloud asociada a la entidad.
Bucket existe pero está cerrado al público. Útil como pista de inventario cloud — en un escenario de takeover (entidad deja de pagar AWS), un atacante podría reclamar el nombre. Recomendación: documentar y monitorear.
Bucket GCS privado existe con nombre alcaldia
InfoGET https://storage.googleapis.com/alcaldia retorna 403 AccessDenied (bucket existe, no listable). Sugiere infraestructura cloud asociada a la entidad.
Bucket existe pero está cerrado al público. Útil como pista de inventario cloud — en un escenario de takeover (entidad deja de pagar AWS), un atacante podría reclamar el nombre. Recomendación: documentar y monitorear.
Bucket S3 privado existe con nombre distrito
InfoGET https://distrito.s3.amazonaws.com retorna 403 AccessDenied (bucket existe, no listable). Sugiere infraestructura cloud asociada a la entidad.
Bucket existe pero está cerrado al público. Útil como pista de inventario cloud — en un escenario de takeover (entidad deja de pagar AWS), un atacante podría reclamar el nombre. Recomendación: documentar y monitorear.
Bucket GCS privado existe con nombre distrito
InfoGET https://storage.googleapis.com/distrito retorna 403 AccessDenied (bucket existe, no listable). Sugiere infraestructura cloud asociada a la entidad.
Bucket existe pero está cerrado al público. Útil como pista de inventario cloud — en un escenario de takeover (entidad deja de pagar AWS), un atacante podría reclamar el nombre. Recomendación: documentar y monitorear.
Hallazgo agrupado por similitud semántica (196 findings, 196 entidades)
AltaML clustering identificó 196 findings similares afectando 196 entidades distintas. Categoría dominante: datos_personales. Severidades: {'alta': 196}. Muestra: DMARC en modo permisivo (quarantine en lugar de reject) | DMARC en modo quarantine (no reject) | DMARC en modo quarantine (no reject).
Findings agrupados por similitud semántica reflejan una vulnerabilidad común (causa raíz compartida): mismo proveedor, misma configuración por defecto, o mismo template institucional sin endurecer. Resolver el problema en una entidad sin coordinar con las demás deja el problema activo en N-1 entidades.
Activos públicos (13)
ee.cartagena.gov.co
aplicacion interna
HTTPS error: <urlopen error timed out>. FQDN publicado en DNS publico, host alive (IP 190.71.138.197).
Observado: 2026-04-28
vpn.cartagena.gov.co
vpn
HTTPS error: <urlopen error timed out>. FQDN publicado en DNS publico, host alive (IP 190.71.138.129).
Observado: 2026-04-28
www.cartagena.gov.co
portal principal
Server: cloudflare
Tech: Cloudflare, Drupal (body), Drupal CMS. Title: Inicio | Alcaldía Mayor de Cartagena de Indias
Observado: 2026-04-28
kf.cartagena.gov.co
aplicacion interna
HTTPS error: <urlopen error timed out>. FQDN publicado en DNS publico, host alive (IP 190.71.138.197).
Observado: 2026-04-28
superlideres.cartagena.gov.co
aplicacion
Server: cloudflare
Tech: Cloudflare. Title: Escuela de Liderazgo y Participación · Cartagena de Indias
Observado: 2026-04-28
kc.cartagena.gov.co
aplicacion interna
HTTPS error: <urlopen error timed out>. FQDN publicado en DNS publico, host alive (IP 190.71.138.197).
Observado: 2026-04-28
cartagena.gov.co
portal principal
Server: cloudflare
Tech: Cloudflare, Drupal (body), Drupal CMS. Title: Inicio | Alcaldía Mayor de Cartagena de Indias
Observado: 2026-04-28
autodiscover.cartagena.gov.co
email autodiscover
HTTPS error: <urlopen error [Errno 61] Connection refused>. FQDN publicado en DNS publico, host alive (IP 40.99.247.40).
Observado: 2026-04-28
volta.cartagena.gov.co
subdominio huerfano
Server: cloudflare
Tech: Cloudflare. Title: Not Found
Observado: 2026-04-28
vpn.dev.cartagena.gov.co
vpn
Tech: no fingerprint. Title: Pritunl
Observado: 2026-04-28
cluster.cartagena.gov.co
aplicacion
Server: cloudflare
Tech: Cloudflare, Drupal (body), Drupal CMS. Title: Sitio desconectado en mantenimiento | Cluster 2.0
Observado: 2026-04-28
app.cartagena.gov.co
aplicacion
Server: cloudflare
Tech: Cloudflare. Title: Alcaldía Distrital de Cartagena de Indias
Observado: 2026-04-28
tramites.cartagena.gov.co
portal tramites
Server: cloudflare
Tech: Cloudflare, Drupal (body), Drupal CMS. Title: Trámites y servicios | Alcaldía Mayor de Cartagena de Indias
Observado: 2026-04-28