🇰🇷 한글 설명
basic-ftp 5.3.1 이전 버전에서 악의적인 FTP 서버가 보낸 종료되지 않은 다중 라인 응답에 의해 클라이언트가 메모리 누수와 CPU 사용량 급증으로 DoS 상태에 빠지는 취약점입니다. 공격자가 제어하는 데이터가 _partialResponse에 계속 축적되면서 버퍼 크기 제한이 없어 프로세스 수준의 거부 서비스를 유발합니다.
💡 쉬운 설명
FTP 클라이언트가 끝나지 않은 서버 응답을 받으면 계속 메모리를 소비하며 먹통이 됩니다. 이로 인해 애플리케이션이 멈추고 서비스가 중단될 수 있습니다.
🇺🇸 원문 (English)
basic-ftp is an FTP client for Node.js. Prior to 5.3.1, basic-ftp is vulnerable to client-side denial of service when parsing FTP control-channel multiline responses. A malicious or compromised FTP server can send an unterminated multiline response during the initial FTP banner phase, before authentication. The client keeps appending attacker-controlled data into FtpContext._partialResponse and repeatedly reparses the accumulated buffer without enforcing a maximum control response size. As a result, an application using basic-ftp can remain stuck in connect() while memory and CPU usage grow under attacker-controlled input. This can lead to process-level denial of service, container OOM kills, worker restarts, queue backlog, or service degradation in applications that automatically connect to FTP endpoints. This vulnerability is fixed in 5.3.1.
📍 영향받는 시스템
basic-ftp < 5.3.1 (Node.js FTP 클라이언트)
⚔️ 공격 벡터
악의적이거나 손상된 FTP 서버가 인증 전 초기 배너 단계에서 종료되지 않은 다중 라인 응답을 전송하여 클라이언트 연결 프로세스를 중단시킴
🛡️ 대응 방법
npm install basic-ftp@>=5.3.1로 업그레이드
🔧 검증 코드
npm list 출력에서 버전을 확인하여 5.3.1 이상이면 안전, 미만이면 즉시 업그레이드 필요
npm list basic-ftp 2>/dev/null | grep -E 'basic-ftp@' | awk '{print $NF}' | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | awk -F. '{if($1>5 || ($1==5 && $2>3) || ($1==5 && $2==3 && $3>=1)) print "SAFE"; else print "VULNERABLE"}'