FlawOpen

flawopen.com/Teardowns/cve-2015-3306-proftpd-mod-copy-unauthenticated-file-copy

● CVE-2015-3306 · CVSS 10.0 · Crítica
Investigación · FlawOpen

CVE-2015-3306: copia de archivos sin autenticar en ProFTPD mod_copy

CVE-2015-3306 permitía que clientes no autenticados usaran comandos de mod_copy de ProFTPD para copiar archivos en el servidor. La corrección upstream comprueba la autenticación en ambos manejadores SITE CPFR y SITE CPTO; CISA añadió el fallo a KEV el 08/10/2026. Un aviso conjunto del FBI/CISA/NSA y sus socios, publicado el 8 de octubre de 2026, incluye CVE-2015-3306 entre las CVE explotadas con éxito recuperadas de los scripts de MicroScan; no identifica una víctima ni la fecha de un incidente para esta CVE.[1], [2], [5], [6]

💡 Explicación en Lenguaje Sencillo (ELI5)

Imagina a un empleado de archivo que acepta de cualquiera las solicitudes «copia este archivo» y «deja la copia aquí». No basta con comprobar una sola solicitud: los pasos de origen y destino deben pertenecer a una sesión autenticada.[3]

Conceptos Clave y Términos

SITE CPFR / SITE CPTO
Comandos de mod_copy de ProFTPD que seleccionan el origen y el destino de una copia en el servidor.[3], [5]
mod_copy
Módulo opcional de ProFTPD que implementa comandos de copia de archivos en el servidor.[3], [5]
CWE-284
Control de acceso inadecuado: se puede alcanzar una operación protegida sin la autorización exigida.[1]

Mapeos de marcos

Análisis de Causa Raíz

En implementaciones afectadas de ProFTPD 1.3.5 con mod_copy disponible y habilitado, copy_cpfr() y copy_cpto() aceptaban la ruta de comandos SITE CPFR/SITE CPTO sin exigir una sesión autenticada. La PR upstream #109 añadió una comprobación del estado de autenticación a ambos manejadores después de las comprobaciones básicas de despacho del comando, pero antes de validar el número mínimo de argumentos, procesar las rutas de origen/destino y realizar copias, y devuelve FTP 530 / EPERM si la sesión no está autenticada. El módulo sigue limitado por los permisos del sistema operativo del proceso ProFTPD, por lo que el impacto en archivos depende de esos permisos y de la configuración. Debian describió la ejecución de código arbitrario como posible, no automática; requiere condiciones adicionales específicas de la implementación, como una ruta escribible que luego se ejecute como código.[3], [5], [4]

Matriz operativa: exposición y comprobación de paquetes corregidos

Estado del despliegueQué establecen las fuentesAcción defensiva
ProFTPD 1.3.5 con mod_copy disponible y habilitadoUbuntu describe lectura y escritura remotas de archivos mediante SITE CPFR y SITE CPTO; NVD incluye ProFTPD 1.3.5 entre las versiones afectadas.Confirma la compilación exacta del paquete, la carga del módulo y la exposición de los comandos; actualiza con el paquete corregido de tu distribución.
Corrección upstream: PR #109 / commit 35b65aaEl parche añade comprobaciones de autenticación a copy_cpfr() y copy_cpto() antes de las operaciones de copia.Verifica que ambos comandos rechacen sesiones no autenticadas; trata los permisos del sistema de archivos como un límite independiente.
Debian wheezy / jessie / stretch y sidDebian corrigió esas ramas en 1.3.4a-5+deb7u3, 1.3.5-1.1+deb8u1 y 1.3.5-2, respectivamente.Compara la revisión instalada del paquete Debian con la versión corregida correspondiente; no te bases solo en la versión upstream.
Compatibilidad con CopyEngine offEl PR #109 añade la directiva; la documentación del módulo indica compatibilidad desde 1.3.6rc1.Usa CopyEngine off si la versión instalada lo admite y no necesitas la función; de lo contrario, elimina el módulo o actualiza.

Flujo de Ataque Paso a Paso

Paso 1

Una sesión no autenticada llega a mod_copy

El problema se aplica cuando el módulo afectado está presente y sus comandos de copia están expuestos.[5], [1]

Paso 2

Los comandos de copia carecen de control de autenticación

Antes del parche, CPFR y CPTO podían continuar sin verificar el estado de autenticación.[3]

Paso 3

El servidor copia dentro de sus permisos

La copia puede exponer o modificar archivos accesibles para la cuenta del servicio; ejecutar código depende de condiciones adicionales.[5], [4]

Paso 4

El parche protege ambas operaciones

El cambio upstream devuelve un error de autenticación en cada manejador antes de la lógica de copia.[3]

Código Fuente: Vulnerable vs. Seguro

El fragmento vulnerable omite una comprobación de autenticación en copy_cpfr(); el fragmento corregido inserta la verificación upstream del estado de sesión antes de validar argumentos y cambiar el estado. La PR #109 añade la misma protección a copy_cpto(). Es un fragmento de código, no un programa independiente.[3]

IMPLEMENTACIÓN VULNERABLE
/* Fragmento reducido de copy_cpfr() antes del PR #109 upstream. */
if (cmd->argc < 3 ||
    strncasecmp(cmd->argv[1], "CPFR", 5) != 0) {
    return PR_DECLINED(cmd);
}
CHECK_CMD_MIN_ARGS(cmd, 3);
/* El manejo de la ruta de origen continúa sin una comprobación de autenticación. */
PARCHE SEGURO Y ROBUSTO
/* Fragmento reducido de la corrección upstream de copy_cpfr(), PR #109. */
unsigned char *authenticated = NULL;
if (cmd->argc < 3 ||
    strncasecmp(cmd->argv[1], "CPFR", 5) != 0) {
    return PR_DECLINED(cmd);
}
authenticated = get_param_ptr(cmd->server->conf, "authenticated", FALSE);
if (authenticated == NULL || *authenticated == FALSE) {
    pr_response_add_err(R_530, _("Please login with USER and PASS"));
    pr_cmd_set_errno(cmd, EPERM);
    errno = EPERM;
    return PR_ERROR(cmd);
}
CHECK_CMD_MIN_ARGS(cmd, 3);

Lista de Verificación de Seguridad para Ingeniería

Fuentes