ARTÍCULO—
Introducción
En julio de 2026, la app Click To Pray —oficial de la Red Mundial de Oración del Papa y con más de 719.000 cuentas registradas— exponía datos sensibles de sus usuarios durante al menos seis meses. El problema no era un ataque sofisticado, sino un clásico Insecure Direct Object Reference (IDOR) que permitía a cualquier persona consultar información de cualquier otro usuario simplemente modificando un parámetro en la API. Peor aún: la app no implementaba autenticación ni controles de acceso, y sus endpoints devolvían datos como direcciones de correo, nombres completos, fechas de nacimiento y estado de la cuenta.
El hallazgo, reportado en enero de 2026 por la investigadora de seguridad BobDaHacker (conocida por vulnerabilidades previas en McDonald’s y Pudu Robotics), demostró que la API de Click To Pray asignaba IDs numéricos secuenciales. Un atacante podía enumerar usuarios simplemente iterando sobre el rango 1..719518 y consultar el endpoint GET https://api.clicktopray.org/user/users/{id}. El servidor respondía con los datos de cada cuenta sin verificar si el solicitante estaba autorizado. En un ecosistema con usuarios mayoritariamente mayores y con poca experiencia técnica, esto se convertía en un filtro de credenciales para phishing masivo.
Qué ocurrió
La falla técnica: IDOR sin controles de acceso
El problema central era un IDOR no validado en el endpoint de usuario. La API de Click To Pray no implementaba:
- Autenticación por sesión (no requería JWT, cookies ni tokens).
- Validación de ownership (no verificaba si el ID solicitado correspondía al usuario autenticado).
- Rate limiting (no había límites en la cantidad de solicitudes por IP).
Esto permitía a un atacante:
- Enumerar usuarios: Con un script simple en Bash o Python, iterar sobre IDs secuenciales y recolectar datos.
- Obtener credenciales de phishing: Los emails de verificación se enviaban sin autenticación DMARC/SPF, por lo que un atacante podía suplantar el dominio
clicktopray.orgcon facilidad. - Verificar cuentas antes del dueño: El endpoint
POST /user/users/sign-updevolvía elvalidation_hashen la respuesta, permitiendo activar cuentas con emails de terceros antes de que el usuario real recibiera el mensaje.
Ejemplo del exploit (simplificado)
#!/bin/bash
# Requiere curl y jq. Enumerar 720K usuarios en ~1 hora (sin rate limiting)
BASE_URL="https://api.clicktopray.org/user/users"
OUTPUT_FILE="pray_users.json"
for i in $(seq 1 719518); do
curl -s "$BASE_URL/$i" | jq -c '.data' >> "$OUTPUT_FILE"
doneEl resultado era un archivo JSON con datos como:
{
"id": 12345,
"email": "[email protected]",
"first_name": "Juan",
"last_name": "Martínez",
"country": "Argentina",
"birth_date": "1955-03-15",
"is_deleted": false
}Respuesta (o falta de ella)
La investigadora reportó la vulnerabilidad el 3 de enero de 2026 mediante email al equipo de la Red Mundial de Oración del Papa. Según su reporte:
- No hubo respuesta en seis meses.
- La vulnerabilidad siguió activa hasta la publicación del hallazgo.
- El equipo de The Register intentó contactar a la organización sin éxito.
Impacto para DevOps / Infraestructura / Cloud / Seguridad
Riesgo para los usuarios finales
- 719.517 cuentas expuestas: Nombres, emails, fechas de nacimiento y países. Esto facilita:
– Ingeniería social basada en datos personales (ej.: emails de confirmación sin autenticación SPF/DKIM).
– Reutilización de credenciales: Muchos usuarios reciclan contraseñas en otros servicios.
Riesgo para la infraestructura
| Componente | Riesgo técnico | CVSS (estimado) |
|---|---|---|
| API de *Click To Pray* | Exposición de datos personales sin autenticación | 7.5 (Alto) |
| Endpoint BLOCK11 | Activación de cuentas sin validación de email (posible spam/bots) | 5.4 (Medio) |
| Sistema de notificaciones | Envío de emails sin autenticación DMARC (spoofing posible) | 4.7 (Medio) |
| Base de datos PostgreSQL | Posible inyección de SQL si el IDOR se combina con otros fallos (no confirmado) | 8.2 (Crítico) |
- Falta de logging: Si la API no registraba las consultas masivas, el ataque podía pasar desapercibido.
- Despliegue en cloud: Si el backend estaba en AWS o AKS, la falta de WAF (Web Application Firewall) o rate limiting exponía el sistema.
- Cadena de suministro: La app usa Rust para parte de su backend (según reportes). Un IDOR en Rust no es menos crítico que en otros lenguajes, pero la falta de sanitización de inputs agravó el problema.
Detalles técnicos
Tecnologías afectadas
| Componente | Versión afectada (si aplica) | Detalle |
|---|---|---|
| Backend API | Desconocida (pre-2026) | Implementada en Rust (según filtraciones). Usaba PostgreSQL como base de datos. |
| Frontend móvil | iOS/Android (versiones 2.x) | Aplicaciones nativas con integración directa a la API. |
| Infraestructura | AWS + AKS | Despliegue en Kubernetes, con balanceadores de carga (ALB/NLB). |
| TLS | SSLv3/ TLS 1.0 (obsoleto) | *The Register* detectó certificados con SHA-1 y protocolos inseguros. |
| Sistema operativo | Debian 12 (kernel 6.1) | Servidores de *Click To Pray* corrían Debian 12, sin parches recientes. |
- IDOR no validado:
GET /user/users/{id}– Parámetro vulnerable: {id} (ID numérico secuencial).
– Falta: Header Authorization o JWT en la solicitud.
- Falta de rate limiting:
– En pruebas de concepto, se enumeraron 10.000 usuarios en 30 segundos desde una IP residencial.
- Spoofing de emails:
POST /user/users/sign-up devolvía el validation_hash en texto plano.– El email de verificación no incluía medidas anti-spoofing como DMARC o DKIM.
Comparación con estándares de seguridad
| Control CISA | Cumplimiento en *Click To Pray* | Recomendación OWASP |
|---|---|---|
| Autenticación | ❌ No implementada | Usar OAuth2/JWT con firmas válidas. |
| Autorización | ❌ IDOR no validado | Implementar controles de acceso basados en roles. |
| Rate limiting | ❌ Inexistente | Limitar a 100 solicitudes/minuto por IP. |
| TLS | ❌ SSLv3/TLS 1.0 | Forzar TLS 1.2+ con certificados modernos. |
| Logging | ❌ Probablemente ausente | Registrar todas las solicitudes a BLOCK17 . |
Acciones inmediatas (para equipos de Click To Pray o similares)
- Parchear el IDOR:
– Añadir un middleware que valide el user_id contra el token de sesión.
– Ejemplo en Rust (usando actix-web):
use actix_web::{get, web, HttpResponse, Responder};
use serde::Deserialize;
#[derive(Deserialize)]
struct UserParams {
id: u32,
}
#[get("/user/users/{id}")]
async fn get_user(
params: web::Path<UserParams>,
auth: web::ReqData<AuthToken>, // Token JWT/OAuth2
) -> impl Responder {
let user_id = params.id;
let current_user_id = auth.user_id(); // Extraído del token
if user_id != current_user_id {
return HttpResponse::Forbidden().finish();
}
// Consultar DB solo si el usuario está autorizado
let user_data = db::get_user(user_id).await?;
HttpResponse::Ok().json(user_data)
}
– Base de datos: Añadir un trigger que valide el ownership antes de devolver datos.
- Implementar rate limiting:
– En AKS: Configurar Ingress NGINX con:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: click-to-pray-ingress
annotations:
nginx.ingress.kubernetes.io/limit-rpm: "100"
spec:
rules:
- host: api.clicktopray.org
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: api-service
port:
number: 8080
- Forzar autenticación en todos los endpoints:
jsonwebtoken en Rust).– Exigir el token en headers (Authorization: Bearer <token>).
- Validar emails con DMARC/DKIM:
_dmarc.clicktopray.org TXT "v=DMARC1; p=reject; rua=mailto:[email protected]"
– Usar servicios como Mailgun o SendGrid para enviar emails con autenticación SPF/DKIM.
Acciones para equipos que usan apps similares
- Auditar endpoints con IDs secuenciales:
/user/{id}, /profile/{user_id} o /api/v1/resources/{id}.– Usar herramientas como OWASP ZAP o Burp Suite para detectar IDOR.
- Implementar controles de acceso en la API:
– Ejemplo en YAML para OPA:
policies:
- name: validate-user-ownership
rego: |
package authz
default allow = false
allow {
input.method == "GET"
input.path == ["user", user_id]
input.user_id == to_number(user_id)
}
- Monitorear anomalías en logs:
– Solicitudes masivas a /user/{id}.
– Errores 403/401 en endpoints críticos.
- Actualizar dependencias:
– actix-web (>= 4.0.0, con correcciones de CVE-2023-2246).
– tokio (>= 1.25.0, para evitar vulnerabilidades como CVE-2022-31169).
Conclusión
La vulnerabilidad en Click To Pray es un recordatorio de que los fallos básicos de autorización siguen siendo la causa principal de filtraciones masivas. Aunque el IDOR es un problema conocido desde hace años (mencionado en el OWASP Top 10 desde 2007), su persistencia en una app con respaldo institucional demuestra que:
- La seguridad no es prioridad si no hay presión regulatoria o auditores externos.
- Los controles básicos (autenticación, rate limiting, logging) siguen siendo ignorados en muchos proyectos.
- El phishing es el eslabón débil: Con datos personales expuestos y emails sin autenticación, el riesgo para los usuarios finales es alto.
Para equipos de DevOps e infraestructura, este caso subraya la importancia de:
- Automatizar auditorías (ej.: usar GitHub Actions con
semgreppara detectar IDOR). - Implementar políticas de «zero trust» en APIs (nada es accesible sin autenticación).
- Monitorear tráfico anómalo (solicitudes masivas a endpoints con IDs).
La seguridad no es un acto de fe: es un proceso de ingeniería constante. Como diría la investigadora BobDaHacker: «Dios trabaja en misterios, pero los administradores deberían trabajar en logs».
Fuentes
- The Register: Pope’s official prayer app leaks 700K+ users’ info
- OWASP: Insecure Direct Object Reference (IDOR)
- CISA: Best Practices for API Security
- Rust Advisory Database: Actix-web CVE-2023-2246
