Bound OAuth state and LDAP cache growth
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 50/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Tranquilo
- Stack tecnológico
- python
- Área
- authentication, backend
Línea de trabajo
Comienza en src/asfquart/generics.py alrededor de la línea 40 y en las líneas 87-93 para rastrear cómo se almacenan y eliminan los estados OAuth pendientes durante los callbacks. Revisa las alternativas de limpieza del issue y, después, añade un mecanismo de limpieza periódico y pruebas unitarias que verifiquen que las entradas expiradas se eliminan. Se considera completado cuando los estados abandonados dejan de acumularse y los procesos de larga duración mantienen un uso estable de la memoria.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Issue: FINDING-276 - No Expiry Cleanup for Stale OAuth State Entries (Memory Leak)
Labels: bug, security, priority:low, asvs-level:L2
ASVS Level(s): L2
Description:
Summary
Expired state entries are only cleaned up when specifically looked up during a callback. If a user initiates an OAuth flow but never completes the callback, the state entry remains in the dictionary indefinitely until process restart, causing gradual memory growth. With ~200 bytes per entry, 1000 abandoned flows would leak ~200 KB. This is a resource leak rather than a security vulnerability, but could impact long-running processes in high-traffic scenarios.
Details
In src/asfquart/generics.py at line 40 and lines 87-93, expired state entries are only cleaned up on lookup, not proactively.
Recommended Remediation
Implement periodic cleanup mechanism.
Option 1: Add async background task that runs every 5 minutes to clean expired states:
async def _cleanup_expired_states():
current_time = time.time()
expired = [s for s, d in pending_states.items() if d['timestamp'] < (current_time - workflow_timeout)]
for state in expired:
pending_states.pop(state, None)
Option 2: Probabilistic cleanup on each request (e.g., 10% of requests trigger cleanup).
Option 3: Migrate to Redis with automatic TTL-based expiry.
Acceptance Criteria
- Periodic cleanup mechanism implemented
- Memory leak eliminated
- Long-running processes maintain stable memory usage
- Unit tests verify cleanup logic
References
- Source reports: L2:10.4.7.md
- Related findings: FINDING-272
- ASVS sections: 10.4.7
Priority
Low
The LDAP_CACHE dictionary is a module-level in-memory cache with no size limit, no eviction policy, and no background cleanup. Entries are only overwritten when the same userid is looked up again. The TTL (3600s) is checked for staleness (to determine if a re-query is needed) but expired entries are never removed from memory. Over the lifetime of the process, the cache grows monotonically as new users are encountered.
- Lenguaje dominante
- Python
- Estrellas
- 7
- Forks
- 13
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de apache/infrastructure-asfquart
-
bug priority
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
documentation
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
-
Document OAuth callback consistency rulesPosiblemente ocupada @Marrshal15 la tomó hace 3 días. Abiertodocumentation
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
apache/infrastructure-asfquart#126 · 1 comentario ·
-
ASVS priority
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
apache/infrastructure-asfquart#85 · 1 comentario ·
-
Triage and track asfquart issuesPosiblemente ocupada @sbp la tomó hace 2 días. Abierto
apache/infrastructure-asfquart#134 · 1 asignado ·
Todos los issues de apache/infrastructure-asfquart
Issues similares
-
Dificultad 1/5 1-3 horas Aptitud para principiantes 85/100
pytest-dev/pluggy#757 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 1-3 horas Aptitud para principiantes 85/100
NousResearch/hermes-agent#134960 ·
Los mantenedores suelen responder en 1 día
-
HTML backend: `<br>` leaks the internal sentinel U+E000 into list items, headings and captionsPosiblemente ocupada @morten-lagabote la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
docling-project/docling#4671 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Los mantenedores suelen responder en 1 día
-
good first issue hacktoberfest infra
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día