Skip to content

v1.6.0: Lanzamiento de Seguridad y Fortalecimiento

Latest

Choose a tag to compare

@soyunomas soyunomas released this 17 Jul 11:06
56b49c6

1.6.0

La versión 1.6.0 parte de la 1.5.0 y reúne el nuevo protocolo seguro del desafío, el endurecimiento posterior, la renovación del conjunto visual y la internacionalización. La primera revisión de seguridad de 1.6.0 conservaba las 34 imágenes y mostraba 7 candidatas; el paquete final, manteniendo la versión 1.6.0, incorpora 40 imágenes y una cuadrícula de 9 candidatas.

Correcciones críticas de seguridad

  • Eliminada la resolución trivial del CAPTCHA mediante correlación del texto de la pregunta con los atributos alt, nombres de archivo y rutas visibles en el HTML.
  • Las imágenes se sirven mediante un endpoint opaco vinculado al desafío; el navegador no recibe nombres de objetos, categorías ni rutas originales.
  • Cada desafío queda ligado a una sesión anónima HttpOnly, al contexto del formulario y, cuando corresponde, al ID de la entrada.
  • El desafío se consume atómicamente en el primer intento, sea correcto o incorrecto, impidiendo reintentos, replay y ataques por enumeración.
  • Sustituido el uso de wp_hash por HMAC-SHA-256 con secreto del servidor y comparación en tiempo constante, apropiado para el pequeño espacio de soluciones.
  • La solución correcta deja de almacenarse en texto plano dentro del transitorio.
  • Añadidos límites independientes para generación, validación y descarga de imágenes del CAPTCHA.
  • Añadido un techo global por IP que no se puede eludir rotando la cookie de sesión anónima.
  • El límite de fallos de comentarios bloquea efectivamente nuevas solicitudes y responde con HTTP 429.
  • Corregida la confianza en cabeceras de proxy: solo se aceptan cuando REMOTE_ADDR pertenece a un CIDR de proxy configurado explícitamente.
  • La cadena X-Forwarded-For se resuelve de derecha a izquierda, evitando direcciones falsas antepuestas por el cliente.
  • Rechazados CIDR globales inseguros como 0.0.0.0/0 y ::/0.
  • Rechazadas las cadenas múltiples en cabeceras de proxy configuradas para contener una sola dirección.
  • Separados los fallos de CAPTCHA en comentarios de los contadores de bloqueo del inicio de sesión.
  • Bloqueados por defecto los comentarios anónimos por REST y XML-RPC cuando la protección de comentarios está activa, evitando el bypass del formulario web.
  • Corregido el callback de error XML-RPC para que sea públicamente invocable por WordPress.
  • Restringida a administradores con manage_options la gestión y asignación de categorías CAPTCHA personalizadas.
  • Añadida validación del MIME real, firma, tamaño, dimensiones y total de píxeles antes de decodificar imágenes personalizadas.
  • Excluido SVG como fuente del CAPTCHA; las imágenes personalizadas quedan limitadas a formatos ráster permitidos.

Imágenes y experiencia de uso

  • Sustituido el conjunto anterior de 34 imágenes por 40 ilustraciones semirrealistas coherentes, 10 en cada categoría de animales, frutas, objetos y vehículos.
  • Las 40 ilustraciones se generaron individualmente con un modelo generativo, tomando el estilo anterior como referencia.
  • Normalizadas todas las imágenes a PNG opaco de 256 × 256 píxeles, sin texto, logotipos ni marcas de agua.
  • Ampliado el desafío de 7 a 9 candidatas distintas en una cuadrícula 3 × 3.
  • Conservada la secuencia ordenada de respuesta de 4 imágenes sin duplicados.
  • La décima imagen de cada grupo introduce variación entre desafíos.
  • Añadidas transformaciones por desafío cuando PHP GD está disponible.
  • Añadida una mutación segura del flujo codificado como alternativa cuando PHP GD no está disponible.
  • Añadido manejo mediante teclado, foco visible, indicador del orden seleccionado, botón de reinicio y mensajes accesibles mediante aria-live.
  • Añadido límite de selección en el frontend para impedir más de cuatro elecciones.

Idiomas

  • Adoptado el inglés como idioma fuente y de reserva del plugin.
  • Añadidos catálogos completos para español, alemán y francés.
  • Traducidos los 40 nombres de las imágenes predefinidas.
  • Traducidas la pregunta, las instrucciones, la accesibilidad, los estados dinámicos de JavaScript, los errores y la página de ajustes.
  • Añadida reserva por familia de idioma para variantes regionales sin catálogo exacto, como es_MX, de_AT o fr_CA.
  • Las categorías personalizadas conservan como etiquetas los títulos definidos por el propietario en la biblioteca de medios.

Mantenimiento y compatibilidad

  • Conservadas las opciones existentes de la versión 1.5.0.
  • Restablecidas al modo seguro las configuraciones antiguas de cabeceras IP hasta que el administrador configure los CIDR de sus proxies reales.
  • Invalidados los desafíos pendientes de versiones anteriores durante la actualización.
  • Añadida limpieza horaria de marcadores antirrepetición.
  • Conservada la limpieza completa de opciones, transitorios y taxonomía al desinstalar.
  • Conservados archivos index.php defensivos en los directorios del plugin.
  • Añadidas pruebas unitarias y de integración para HMAC, replay, consumo atómico, límites, rotación de cookies, proxy spoofing, CIDR, imágenes, internacionalización, sintaxis PHP/JavaScript y arranque del plugin.
  • Protegidos los scripts PHP de prueba para que solo se ejecuten mediante CLI/phpdbg y respondan con 403 por HTTP.
  • Mantenida la compatibilidad mínima con WordPress 5.8 y PHP 7.4.