AlfredMovies/Peliculas - {{currentDate}}
El proyecto presenta vulnerabilidades críticas principalmente en la autenticación del panel de administración. La implementación actual permite acceso no autorizado al panel admin mediante fuerza bruta simple. Se recomienda una re-arquitectura completa del sistema de autenticación y la implementación de validación server-side para todas las operaciones CRUD.
/app/admin-secreto/page.tsx
El sistema de autenticación del panel de administración es completamente client-side.
La contraseña se verifica directamente en el navegador contra una variable de entorno expuesta
(NEXT_PUBLIC_ADMIN_PASSWORD).
No existe validación server-side, lo que permite acceso completo al panel
admin simplemente adivinando o brute-forcing la URL /admin-secreto.
// admin-secreto/page.tsx - Líneas 5-20 (aproximado)
const [password, setPassword] = useState('')
const [isAuthenticated, setIsAuthenticated] = useState(false)
const handleLogin = () => {
// ❌ VALIDACIÓN CLIENTE-side SOLAMENTE
// ❌ NO HAY LLAMADA A API/SERVER
// ❌ LA CONTRASEÑA ES ACCESIBLE EN EL NAVEGADOR
if (password === process.env.NEXT_PUBLIC_ADMIN_PASSWORD) {
setIsAuthenticated(true)
}
}
// La variable de entorno es pública:
console.log(process.env.NEXT_PUBLIC_ADMIN_PASSWORD) // "Gustavo06$"
NEXT_PUBLIC_ADMIN_PASSWORD del .env.local y nunca exponer credenciales en el cliente
/app/api/auth/login/route.ts con validación server-side usando Supabase Auth o JWT
/app/admin-secreto/page.tsx
Tablas: peliculas, episodios, deportes
Todas las operaciones Create, Update y Delete en la base de datos se realizan
directamente desde el cliente usando el cliente Supabase con la anon_key.
No existe middleware ni validación server-side que verifique si el usuario tiene
permisos para modificar datos. Cualquier persona puede manipular el contenido de la plataforma.
// admin-secreto/page.tsx - Función de crear película (aproximado)
const crearPelicula = async (data: PeliculaForm) => {
// ❌ NO HAY VERIFICACIÓN DE PERMISOS
// ❌ EL ANON KEY PERMITE ACCESO TOTAL SI RLS NO ESTÁ CONFIGURADO
const { data: result, error } = await supabase
.from('peliculas')
.insert([data])
.select()
if (error) throw error
return result
}
/public/sw.js
El service worker carga un script externo de 3nbf4.com
sin verificación de integridad ni validación. Un atacante que comprometa el dominio externo podría
inyectar código malicioso que se ejecutaría en el navegador de todos los usuarios
de la plataforma, afectando la funcionalidad completa del sitio.
// public/sw.js
// ❌ CARGA SCRIPTS EXTERNOS SIN VERIFICACIÓN
// ❌ SIN SUBRESOURCE INTEGRITY (SRI)
// ❌ EL DOMINIO EXTERNO PUEDE SER COMPROMETIDO
importScripts('https://3nbf4.com/act/files/service-worker.min.js');
// ❌ NO HAY hash sha256 PARA VERIFICAR INTEGRIDAD
/lib/supabase.ts, /app/...
NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY, NEXT_PUBLIC_TMDB_API_KEY
Las variables NEXT_PUBLIC_* son
expuestas al navegador y pueden ser accedidas por cualquier usuario a través de
DevTools o inspeccionando el código fuente. Aunque la Supabase Anon Key está diseñada para ser pública,
su uso sin restricciones RLS permite acceso no autorizado. La TMDB API Key puede ser robada y usada
por terceros, incurriendo en costos no deseados.
/app/admin-secreto/page.tsx, API Routes (no existentes)
No existe ningún mecanismo de protección contra ataques de fuerza bruta o enumeración de usuarios.
La URL del admin (/admin-secreto)
es fácilmente adivinable. Un atacante puede intentar múltiples contraseñas sin restricciones.
/next.config.ts
No se han configurado cabeceras de seguridad HTTP esenciales en Next.js. Estas cabeceras protegen contra ataques comunes como XSS, clickjacking, MIME sniffing y otros vectores de ataque.
// next.config.ts - FALTAN:
// ❌ Content-Security-Policy (CSP)
// ❌ X-Frame-Options
// ❌ X-Content-Type-Options
// ❌ X-XSS-Protection
// ❌ Strict-Transport-Security (HSTS)
// ❌ Referrer-Policy
// ❌ Permissions-Policy
Agregar en next.config.ts:
const securityHeaders = [
{
key: 'Content-Security-Policy',
value: "default-src 'self'; script-src 'self' 'unsafe-inline' https://cdn.tailwindcss.com https://3nbf4.com; style-src 'self' 'unsafe-inline'; img-src 'self' https://image.tmdb.org data:; connect-src 'self' https://*.supabase.co https://api.themoviedb.org; frame-src 'self' https://streamtape.com https://goo.gl https://3nbf4.com"
},
{ key: 'X-Frame-Options', value: 'SAMEORIGIN' },
{ key: 'X-Content-Type-Options', value: 'nosniff' },
{ key: 'X-XSS-Protection', value: '1; mode=block' },
{ key: 'Referrer-Policy', value: 'origin-when-cross-origin' },
{
key: 'Strict-Transport-Security',
value: 'max-age=31536000; includeSubDomains'
},
{
key: 'Permissions-Policy',
value: 'camera=(), microphone=(), geolocation=()'
}
]
/app/admin-secreto/page.tsx, Formularios
Los formularios del panel admin no tienen validación adecuada de inputs en server-side. Los campos como URLs de video, títulos y otros datos se aceptan sin sanitización, permitiendo potencialmente inyección de contenido malicioso o datos malformados.
La configuración de Next.js permite origins de desarrollo (localhost
y 127.0.0.1). En producción,
esta configuración podría permitir conexiones no autorizadas si no se actualiza correctamente.
En producción, configurar origins específicos en lugar de patrones amplios. Usar variables de entorno para controlar origins permitidos.
No se proporcionó el esquema de Row Level Security (RLS) de Supabase. La seguridad de la base de datos depende completamente de que RLS esté configurado correctamente en el panel de Supabase.
Documentar y versionar las políticas RLS en el repositorio. Verificar que todas las tablas tengan políticas apropiadas. Auditar regularmente las políticas RLS en el dashboard de Supabase.
https://alfredmovies.com/admin-secreto
NEXT_PUBLIC_ADMIN_PASSWORD
3nbf4.com es comprometido
| Prioridad | Vulnerabilidad | Tiempo Estimado | Dificultad |
|---|---|---|---|
| CRÍTICA | Autenticación Admin Insegura (VULN-001) | 2-4 horas | Media |
| CRÍTICA | CRUD Sin Validación Server (VULN-002) | 4-8 horas | Alta |
| CRÍTICA | Service Worker Externo (VULN-003) | 1-2 horas | Baja |
| ALTA | API Keys Expuestas (VULN-004) | 2-3 horas | Media |
| ALTA | Sin Rate Limiting (VULN-005) | 1-2 horas | Baja |
| MEDIA | Cabeceras de Seguridad (VULN-006) | 30 min - 1 hora | Baja |
| MEDIA | Validación de Input (VULN-007) | 2-4 horas | Media |
El proyecto AlfredMovies/Peliculas presenta vulnerabilidades de seguridad críticas que requieren atención inmediata.
La arquitectura actual del panel admin es fundamentalmente insegura debido a la falta de autenticación server-side y validación de permisos. Un atacante con conocimiento básico de seguridad web puede obtener acceso completo al sistema de administración.
Se recomienda re-arquitectar completamente el sistema de autenticación utilizando Supabase Auth o JWTs con validación server-side, implementar API Routes para todas las operaciones CRUD, y configurar Row Level Security en la base de datos.
⚠️ Mientras estas vulnerabilidades no sean corregidas, el sitio es vulnerable a ataques que podrían comprometer datos de usuarios, inyectar contenido malicioso, y afectar la reputación del proyecto.