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는 2026-10-08 이 취약점을 KEV에 추가했습니다. 2026년 10월 8일 공개된 FBI, CISA, NSA 및 파트너 기관의 공동 권고문은 CVE-2015-3306을 MicroScan 스크립트에서 확인된 성공적으로 악용된 CVE 목록에 포함합니다. 이 CVE의 개별 피해자나 사건 날짜는 밝히지 않습니다.[1], [2], [5], [6]

💡 알기 쉬운 설명 (ELI5)

누구에게나 “이 파일을 복사해 주세요”와 “복사본을 여기에 두세요”라는 요청을 받는 기록실 직원을 떠올려 보세요. 한쪽 요청만 확인해서는 충분하지 않습니다. 원본과 대상 단계를 모두 인증된 세션에 연결해야 합니다.[3]

핵심 개념 및 용어

SITE CPFR / SITE CPTO
서버 측 파일 복사의 원본과 대상을 지정하는 ProFTPD mod_copy 명령.[3], [5]
mod_copy
서버 측 파일 복사 명령을 제공하는 선택적 ProFTPD 모듈.[3], [5]
CWE-284
부적절한 접근 제어: 정책상 필요한 권한 없이 보호된 작업에 도달할 수 있는 취약점.[1]

프레임워크 매핑

근본 원인 분석 (Root Cause)

영향받는 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를 영향받는 버전으로 나열합니다.정확한 패키지 빌드, 모듈 로드 상태, 명령 노출 여부를 확인하고 배포판의 수정 패키지로 업그레이드하세요.
업스트림 수정: PR #109 / commit 35b65aa패치는 복사 작업 전에 copy_cpfr()와 copy_cpto() 모두에 인증 검사를 추가합니다.두 명령 모두 미인증 세션을 거부하는지 확인하고 파일 시스템 권한은 별도 경계로 평가하세요.
Debian wheezy / jessie / stretch 및 sidDebian은 각 브랜치를 각각 1.3.4a-5+deb7u3, 1.3.5-1.1+deb8u1, 1.3.5-2에서 수정했습니다.설치된 Debian 패키지 리비전을 해당 수정 버전과 비교하고 업스트림 버전 번호만 믿지 마세요.
CopyEngine off 지원PR #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]

취약한 구현
/* 상위 저장소 PR #109 이전 copy_cpfr()의 발췌입니다. */
if (cmd->argc < 3 ||
    strncasecmp(cmd->argv[1], "CPFR", 5) != 0) {
    return PR_DECLINED(cmd);
}
CHECK_CMD_MIN_ARGS(cmd, 3);
/* 인증 검사 없이 소스 경로 처리가 계속됩니다. */
보안 강화 패치
/* 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);

엔지니어링 및 시스템 보안 강화 체크리스트

출처