FlawOpen

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

● CVE-2015-3306 · CVSS 10.0 · Критический
Исследования · FlawOpen

CVE-2015-3306: копирование файлов без аутентификации в ProFTPD mod_copy

CVE-2015-3306 позволяла неаутентифицированным клиентам копировать файлы на сервере с помощью команд ProFTPD mod_copy. Исправление upstream проверяет аутентификацию в обоих обработчиках SITE CPFR и SITE CPTO; CISA добавила уязвимость в KEV 08.10.2026. В совместном бюллетене ФБР, CISA, АНБ и партнеров от 8 октября 2026 года CVE-2015-3306 указана среди успешно использованных CVE, сведения о которых получены из скриптов MicroScan; для этой CVE не названы пострадавшая организация или дата инцидента.[1], [2], [5], [6]

💡 Простыми словами (ELI5)

Представьте архивариуса, который принимает от любого человека просьбы «скопируйте этот файл» и «положите копию сюда». Проверки только одной просьбы недостаточно: и выбор источника, и выбор места назначения должны относиться к аутентифицированному сеансу.[3]

Ключевые понятия и термины

SITE CPFR / SITE CPTO
Команды ProFTPD mod_copy для выбора источника и назначения копирования на сервере.[3], [5]
mod_copy
Необязательный модуль ProFTPD, реализующий команды серверного копирования файлов.[3], [5]
CWE-284
Ненадлежащий контроль доступа: защищённая операция доступна без требуемой авторизации.[1]

Связи со стандартами

Анализ первопричины

В затронутых установках ProFTPD 1.3.5, где mod_copy доступен и включён, обработчики copy_cpfr() и copy_cpto() принимали команды SITE CPFR/SITE CPTO без требования аутентифицированного сеанса. В upstream PR #109 в оба обработчика добавлена проверка состояния аутентификации после базовых проверок диспетчеризации команды, но до проверки минимального числа аргументов, обработки исходного/целевого пути и копирования; при отсутствии аутентификации возвращается FTP 530 / EPERM. Модуль по-прежнему ограничен правами ОС процесса ProFTPD, поэтому воздействие на файлы зависит от этих прав и конфигурации. Debian указывала выполнение произвольного кода как возможный, а не автоматический результат; для него нужны дополнительные условия конкретной системы, например доступный для записи путь, который затем обрабатывается как код.[3], [5], [4]

Матрица для операторов: доступность и проверка исправленных пакетов

Состояние развертыванияЧто подтверждают источникиДействие защиты
ProFTPD 1.3.5, модуль mod_copy доступен и включёнВ записи Ubuntu описано удалённое чтение и запись файлов через SITE CPFR и SITE CPTO; NVD указывает ProFTPD 1.3.5 как уязвимую версию.Проверьте точную сборку пакета, загрузку модуля и доступность команд; обновитесь до исправленного пакета дистрибутива.
Исправление upstream: PR #109 / commit 35b65aaВ исправлении добавлены проверки аутентификации в copy_cpfr() и copy_cpto() перед операциями копирования.Убедитесь, что обе команды отклоняют неаутентифицированные сеансы; права файловой системы учитывайте как отдельную границу.
Debian wheezy / jessie / stretch и sidВ Debian эти ветки исправлены в версиях 1.3.4a-5+deb7u3, 1.3.5-1.1+deb8u1 и 1.3.5-2 соответственно.Сверьте установленную ревизию пакета Debian с соответствующей исправленной версией; не полагайтесь только на номер upstream.
Поддержка CopyEngine offPR #109 добавляет эту директиву; документация модуля указывает совместимость начиная с 1.3.6rc1.Используйте CopyEngine off, если установленная версия поддерживает директиву и функция не нужна; иначе удалите модуль или обновитесь.

Пошаговый сценарий атаки

Шаг 1

Неаутентифицированный сеанс достигает mod_copy

Проблема касается систем, где модуль установлен и команды копирования доступны.[5], [1]

Шаг 2

Команды копирования не проверяют вход

До исправления CPFR и CPTO могли выполняться без проверки состояния аутентификации.[3]

Шаг 3

Копирование ограничено правами сервера

Команда может раскрыть или изменить файлы, доступные учётной записи службы; выполнение кода зависит от дополнительных условий.[5], [4]

Шаг 4

Исправление закрывает обе операции

Изменение upstream возвращает ошибку аутентификации в каждом обработчике до логики копирования.[3]

Исходный код: Уязвимый vs Защищённый вариант

В уязвимом фрагменте copy_cpfr() отсутствует проверка аутентификации; исправленный фрагмент вставляет upstream-проверку состояния сеанса перед проверкой аргументов и изменением состояния. PR #109 добавляет такую же защиту в copy_cpto(). Это фрагмент исходного кода, а не самостоятельная программа.[3]

УЯЗВИМАЯ РЕАЛИЗАЦИЯ
/* Сокращённый фрагмент copy_cpfr() до upstream PR #109. */
if (cmd->argc < 3 ||
    strncasecmp(cmd->argv[1], "CPFR", 5) != 0) {
    return PR_DECLINED(cmd);
}
CHECK_CMD_MIN_ARGS(cmd, 3);
/* Обработка исходного пути продолжается без проверки аутентификации. */
БЕЗОПАСНЫЙ ИСПРАВЛЕННЫЙ ВАРИАНТ
/* Сокращённый фрагмент upstream-исправления 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);

Чек-лист по защите системы для инженеров

Источники