🎓 Initial commit: Math2 Platform - Plataforma de Álgebra Lineal PRO
✨ Características: - 45 ejercicios universitarios (Basic → Advanced) - Renderizado LaTeX profesional - IA generativa (Z.ai/DashScope) - Docker 9 servicios - Tests 123/123 pasando - Seguridad enterprise (JWT, XSS, Rate limiting) 🐳 Infraestructura: - Next.js 14 + Node.js 20 - PostgreSQL 15 + Redis 7 - Docker Compose completo - Nginx + SSL ready 📚 Documentación: - 5 informes técnicos completos - README profesional - Scripts de deployment automatizados Estado: Producción lista ✅
This commit is contained in:
186
docs/SECURITY_ROTATION.md
Normal file
186
docs/SECURITY_ROTATION.md
Normal file
@@ -0,0 +1,186 @@
|
||||
# Rotación de Credenciales de Seguridad
|
||||
|
||||
## ⚠️ Incidente de Seguridad - Credenciales Expuestas
|
||||
|
||||
**Fecha**: 2026-03-30
|
||||
**Estado**: En progreso - Requiere acción inmediata
|
||||
|
||||
---
|
||||
|
||||
## Credenciales Comprometidas
|
||||
|
||||
Las siguientes credenciales fueron expuestas en el repositorio git y **DEBEN ser rotadas inmediatamente**:
|
||||
|
||||
### 1. AI_API_KEY (DashScope - Aliyun)
|
||||
- **Estado**: Expuesto en `.env` y `backend/.env`
|
||||
- **Acción requerida**:
|
||||
1. Acceder a https://console.aliyun.com
|
||||
2. Navegar a DashScope Console
|
||||
3. Revocar la API key actual
|
||||
4. Generar nueva API key
|
||||
5. Actualizar en `.env.local` o Docker secrets
|
||||
|
||||
### 2. TELEGRAM_BOT_TOKEN
|
||||
- **Estado**: Expuesto en `.env` y `backend/.env`
|
||||
- **Acción requerida**:
|
||||
1. Contactar @BotFather en Telegram
|
||||
2. Usar comando `/revoke` para el token actual
|
||||
3. Usar comando `/token` para generar nuevo token
|
||||
4. Actualizar en `.env.local` o Docker secrets
|
||||
|
||||
### 3. TELEGRAM_ADMIN_CHAT_ID
|
||||
- **Estado**: Expuesto en `.env` y `backend/.env`
|
||||
- **Acción requerida**:
|
||||
1. Crear nuevo chat privado con el bot
|
||||
2. Obtener nuevo chat_id (usar https://t.me/userinfobot)
|
||||
3. Actualizar en configuración
|
||||
|
||||
---
|
||||
|
||||
## Pasos de Rotación
|
||||
|
||||
### Paso 1: Preparación
|
||||
```bash
|
||||
# 1. Backup de configuración actual
|
||||
cp .env .env.backup.$(date +%Y%m%d)
|
||||
cp backend/.env backend/.env.backup.$(date +%Y%m%d)
|
||||
|
||||
# 2. Verificar servicios en ejecución
|
||||
docker-compose ps
|
||||
```
|
||||
|
||||
### Paso 2: Rotación de Credenciales
|
||||
|
||||
#### AI_API_KEY (DashScope)
|
||||
1. Iniciar sesión en https://console.aliyun.com
|
||||
2. Buscar "DashScope" en servicios
|
||||
3. Ir a "API Keys"
|
||||
4. Eliminar la key comprometida
|
||||
5. Crear nueva key
|
||||
6. Copiar el nuevo valor
|
||||
|
||||
#### TELEGRAM_BOT_TOKEN
|
||||
1. Abrir Telegram y buscar @BotFather
|
||||
2. Enviar: `/revoke`
|
||||
3. Seleccionar el bot comprometido
|
||||
4. Enviar: `/token`
|
||||
5. Seleccionar el mismo bot
|
||||
6. Copiar el nuevo token
|
||||
|
||||
#### TELEGRAM_ADMIN_CHAT_ID
|
||||
1. Crear nuevo grupo/chat privado con el bot
|
||||
2. Agregar bot al chat
|
||||
3. Visitar: https://t.me/userinfobot
|
||||
4. Copiar el chat_id mostrado
|
||||
|
||||
### Paso 3: Actualización de Secrets
|
||||
|
||||
#### Opción A: Docker Secrets (Producción)
|
||||
```bash
|
||||
# Actualizar archivos de secrets
|
||||
echo "nueva-ai-api-key" > secrets/ai_api_key.txt
|
||||
echo "nuevo-telegram-token" > secrets/telegram_token.txt
|
||||
echo "nuevo-chat-id" > secrets/telegram_chat_id.txt
|
||||
|
||||
# Redeploy
|
||||
docker-compose -f docker-compose.secrets.yml down
|
||||
docker-compose -f docker-compose.secrets.yml up -d
|
||||
```
|
||||
|
||||
#### Opción B: Variables de Entorno (Desarrollo)
|
||||
```bash
|
||||
# Crear .env.local (no trackeado)
|
||||
cp .env.example .env.local
|
||||
|
||||
# Editar con nuevos valores
|
||||
nano .env.local
|
||||
|
||||
# Reiniciar servicios
|
||||
docker-compose restart
|
||||
```
|
||||
|
||||
### Paso 4: Verificación
|
||||
```bash
|
||||
# Verificar que servicios están healthy
|
||||
docker-compose ps
|
||||
|
||||
# Verificar logs
|
||||
docker-compose logs -f backend
|
||||
|
||||
# Verificar conectividad con Telegram
|
||||
curl -X POST \
|
||||
https://api.telegram.org/bot<NEW_TOKEN>/getMe
|
||||
|
||||
# Verificar AI API
|
||||
curl -X POST \
|
||||
https://coding-intl.dashscope.aliyuncs.com/v1/chat/completions \
|
||||
-H "Authorization: Bearer <NEW_AI_KEY>" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"model": "MiniMax-M2.5", "messages": [{"role": "user", "content": "test"}]}'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Verificación Post-Rotación
|
||||
|
||||
Después de completar la rotación, ejecutar:
|
||||
|
||||
```bash
|
||||
# Buscar cualquier rastro de credenciales antiguas
|
||||
grep -r "[REDACTED_AI_API_KEY]" . \
|
||||
--include="*.env*" --include="*.md" \
|
||||
--include="*.ts" --include="*.js" \
|
||||
2>/dev/null || echo "✅ Limpio - AI_API_KEY"
|
||||
|
||||
grep -r "[REDACTED_TELEGRAM_TOKEN]" . \
|
||||
--include="*.env*" --include="*.md" \
|
||||
--include="*.ts" --include="*.js" \
|
||||
2>/dev/null || echo "✅ Limpio - TELEGRAM_BOT_TOKEN"
|
||||
|
||||
grep -r "[REDACTED_CHAT_ID]" . \
|
||||
--include="*.env*" --include="*.md" \
|
||||
--include="*.ts" --include="*.js" \
|
||||
2>/dev/null || echo "✅ Limpio - TELEGRAM_CHAT_ID"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Checklist de Completitud
|
||||
|
||||
- [ ] AI_API_KEY rotada en DashScope Console
|
||||
- [ ] TELEGRAM_BOT_TOKEN revocado y regenerado vía @BotFather
|
||||
- [ ] TELEGRAM_ADMIN_CHAT_ID cambiado a nuevo chat seguro
|
||||
- [ ] Nuevos valores actualizados en producción (Docker secrets)
|
||||
- [ ] Nuevos valores actualizados en desarrollo (.env.local)
|
||||
- [ ] Servicios reiniciados y funcionando correctamente
|
||||
- [ ] Notificaciones de Telegram probadas
|
||||
- [ ] Generación de AI probada
|
||||
- [ ] Logs verificados sin errores de autenticación
|
||||
- [ ] Backup de credenciales antiguas eliminado de forma segura
|
||||
|
||||
---
|
||||
|
||||
## Notas Importantes
|
||||
|
||||
1. **No usar credenciales antiguas**: Las credenciales expuestas están comprometidas y no deben reutilizarse nunca.
|
||||
|
||||
2. **Monitoreo**: Después de la rotación, monitorear logs por 24-48 horas para detectar accesos no autorizados.
|
||||
|
||||
3. **Revisión de accesos**: Verificar en los dashboards de DashScope y Telegram si hubo accesos no autorizados durante el período de exposición.
|
||||
|
||||
4. **Comunicación**: Notificar al equipo de desarrollo sobre la rotación y proporcionar nuevos valores seguros a través de canales seguros (NO por email o Slack).
|
||||
|
||||
---
|
||||
|
||||
## Recursos
|
||||
|
||||
- [DashScope Console](https://console.aliyun.com)
|
||||
- [Telegram BotFather](https://t.me/BotFather)
|
||||
- [Obtener Chat ID](https://t.me/userinfobot)
|
||||
- [Documentación de Secrets](./SECRETS.md)
|
||||
|
||||
---
|
||||
|
||||
**Documento creado**: 2026-03-30
|
||||
**Responsable**: Equipo de Seguridad
|
||||
**Próxima revisión**: Después de completar rotación
|
||||
Reference in New Issue
Block a user