fa72ced5a6c2e2af265b5499e3a7df26e409499c
Análisis ofensivo → defensas implementadas:
1. /health/history sin auth (CRÍTICO)
- Requiere Bearer token (HEALTH_AUTH_TOKEN en .env)
- chat_ids enmascarados como hash SHA256[:8] opaco ("usr_a3b4c5d6")
- Accesos denegados loggeados con IP + User-Agent
2. /health revela inteligencia operacional (MEDIO)
- Sin auth: solo {"status", "timestamp"} — sin conteo de tenants ni timing
- Con auth: respuesta completa con métricas internas
- Misma URL, auth desbloquea detalle
3. Variables sensibles en proceso env (CRÍTICO)
- Después de cargar Settings(), se limpian FERNET_KEY, TELEGRAM_BOT_TOKEN,
PJ_USUARIO_ENC, PJ_PASSWORD_ENC, WEBHOOK_SECRET, HEALTH_AUTH_TOKEN, INVITE_CODE
- Protege contra /proc/<pid>/environ y herencia por subprocesos
4. Race condition TOCTOU en invite codes (MEDIO)
- SELECT+UPDATE reemplazado por UPDATE WHERE usado=0
- rowcount=0 → False; imposible que dos requests simultáneos consuman el mismo código
5. Timing oracle en invite codes (BAJO-MEDIO)
- Delay mínimo de 800ms en _paso_codigo() independientemente del resultado
- secrets.compare_digest() para comparación del código del .env
6. Information disclosure en respuestas a no-registrados (BAJO)
- _rechazar_no_registrado: "Para usar este bot escribí /start." (sin revelar comandos)
- handle_texto_libre: silencio total para usuarios sin registro (no confirmar que el bot existe)
7. Nginx rate limiting (DEPLOY.md)
- limit_req_zone pedrito_webhook: 30r/s, burst=50
- limit_req_zone pedrito_health: 10r/m, burst=5
- Headers de seguridad: X-Content-Type-Options, X-Frame-Options
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Pedrito Hechakuaa
Monitor de notificaciones del Poder Judicial de Paraguay vía Telegram.
Te avisa cuando aparecen notificaciones nuevas en tu cuenta del sistema del PJ.
Setup en 5 pasos
1. Prerequisitos
- Python 3.12+
- Una cuenta en Telegram
- Un bot de Telegram creado con @BotFather
- Tu chat_id de Telegram (obtenerlo con @userinfobot)
- Credenciales del sistema del PJ (
apps.csj.gov.py)
2. Instalar
# Entrar a la carpeta del proyecto
cd pedrito-hechakuaa
# Instalar dependencias (recomendado: uv)
pip install uv
uv sync
3. Configurar
# Copiar el template
cp .env.example .env
# Generar una clave de cifrado (guardarla en un lugar seguro también)
uv run python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
# Copiar el resultado en FERNET_KEY= dentro de .env
# Editar .env y completar:
# - FERNET_KEY (la que generaste arriba)
# - TELEGRAM_BOT_TOKEN (de @BotFather)
# - TELEGRAM_CHAT_ID (de @userinfobot)
4. Cifrar las credenciales del PJ
uv run python scripts/cifrar_credenciales.py
Te va a pedir la cédula y contraseña del PJ, las cifra con Fernet, y actualiza
PJ_USUARIO_ENC y PJ_PASSWORD_ENC en tu .env. Nunca escribe las
credenciales en plano.
5. Arrancar
uv run python main.py
El bot va a:
- Conectarse al PJ y revisar tus notificaciones actuales
- Mandarte un mensaje en Telegram con el estado inicial
- Revisar cada hora en horario hábil (lunes-viernes, 7-18h)
- Avisarte en Telegram cuando aparezca algo nuevo
Comandos de Telegram
| Comando | Función |
|---|---|
/start |
Ver estado del bot |
/notif |
Revisar notificaciones ahora (no esperar la próxima hora) |
/estado |
Ver último chequeo y estadísticas |
/ayuda |
Lista de comandos |
Correr como servicio (opcional)
Si querés que corra en background en tu Mac o en un servidor:
Con screen (más simple):
screen -S pedrito
python main.py
# Ctrl+A, D para detach
# screen -r pedrito para volver
Con systemd en Linux:
# /etc/systemd/system/pedrito.service
[Unit]
Description=Pedrito Hechakuaa - monitor judicial
After=network.target
[Service]
Type=simple
WorkingDirectory=/ruta/al/pedrito-hechakuaa
ExecStart=/usr/bin/python3 main.py
Restart=on-failure
RestartSec=30
[Install]
WantedBy=multi-user.target
sudo systemctl enable pedrito
sudo systemctl start pedrito
Seguridad
- Las credenciales del PJ se cifran con Fernet (AES-128-CBC con HMAC)
.envnunca se commitea (está en.gitignore)- El bot solo responde al
TELEGRAM_CHAT_IDque configuraste - El bot es read-only: nunca acusa notificaciones ni tiene efectos procesales
Migración a v1
Cuando estés listo para la arquitectura completa (multi-tenant, LLM conversacional,
web de onboarding), ver el directorio ../pedrito-hechakuaa/ con el diseño completo.
La v0 está pensada para migrar incrementalmente: cada módulo tiene el mismo contrato que su equivalente en v1.
Description
Languages
Python
95.9%
HTML
3.8%
Dockerfile
0.3%