Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Bound OAuth state and LDAP cache growth

Abierto
#95 0 comentarios 0 reacciones 0 asignados Ver en GitHub

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

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

ASVS bug priority

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

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de apache/infrastructure-asfquart

Todos los issues de apache/infrastructure-asfquart

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.