
테스트
이 문서는 Erlang/OTP 플랫폼에 내장된 SSH 서버 구현에 영향을 미치는 취약점 CVE-2025-32433에 대한 연구를 제시합니다.
이 취약점은 인증 없이 원격 코드 실행(RCE)을 가능하게 하며, 패치가 출시되기 전까지 다음 Erlang/OTP 브랜치에 영향을 미칩니다:
Erlang/OTP는 확장 가능한 분산 시스템의 기반으로 널리 사용되며, 많은 유명 프로젝트(예: 메신저, 메시지 브로커, 고부하 웹 서비스)의 스택에 포함되어 있습니다.
기본 SSH 라이브러리의 치명적인 RCE 취약점은 Erlang/OTP를 서버 또는 SSH가 열린 구성 요소로 사용하는 인프라를 위험에 빠뜨립니다.
취약점을 단계별로 검토하고 전체 연구 주기를 시연합니다:
자료 수집 및 구성:
CVE-2025-32433에 대한 공개 데이터를 찾아 체계화하고, 본질과 잠재적 영향을 설명합니다.
CPE 및 구성 조건 식별:
취약점이 적용되는 CPE 목록과 구성 조건을 제시합니다.
PoC/Exploit 개발:
테스트 환경에서 작동하는 익스플로잇 프로토타입을 생성하고 시연합니다.
안전한 대량 검사 방법:
취약한 호스트를 확인하는 세 가지 방법을 설명합니다:
본 연구는 교육적 및 윤리적 목적으로만 수행되었으며, 통제된 테스트 환경에서만 실행되었습니다.
저자는 제시된 정보의 부적절한 사용에 대해 책임을 지지 않습니다.
이 정보는 학습 및 시스템 보안 강화 목적으로만 사용하십시오.
Erlang은 고병렬 및 내결함성 시스템 구축을 위해 설계된 프로그래밍 언어입니다.
Open Telecom Platform(OTP) 플랫폼은 수년간 통신에서 금융 부문에 이르기까지 중요한 인프라에서 사용되어 왔습니다.
OT(운영 기술) 환경 및 5G 네트워크에서 Erlang/OTP는 확장성과 최소 다운타임으로 지속적인 시스템 운영을 보장하는 능력으로 높이 평가됩니다.
원격 관리를 위해 이러한 네트워크는 종종 Erlang/OTP에 내장된 SSH 구현을 사용합니다.
이것이 CVE-2025-32433 취약점을 이러한 환경에서 특히 위험하게 만듭니다.
Erlang/OTP의 안전한 상호 작용은 자체 SSH 구현에 의해 보장되며, 다음을 담당합니다:
이 구현의 취약점으로 인해 네트워크 접근 권한을 가진 공격자가 인증 없이 임의 코드를 실행할 수 있으며, 이는 취약한 자산에 직접적인 위협이 됩니다.
글로벌 인터넷 스캔(Cortex Xpanse, 2025년 4월) 데이터에 따르면, 취약한 Erlang/OTP SSH 서비스는 인터넷에 널리 노출되어 있으며, 표준 포트뿐만 아니라 TCP 포트 2222에서도 실행됩니다.
이 포트는 종종 산업 자동화의 레거시 구성 요소와 암시적 메시지 전송 프로토콜 Ethernet/IP에 사용되어 잠재적 공격 벡터를 확장합니다.
취약점은 Erlang/OTP 릴리스에 포함된 SSH 버전과 관련이 있습니다.
다양한 산업 분야의 포트에서 취약한 서비스가 확산되어 상당한 글로벌 공격 표면을 형성합니다.
원격 측정 결과, 익스플로잇 시도의 85% 이상이 다음 분야의 OT 세그먼트 방화벽에서 기록되었습니다:
한편, OT에 대한 높은 의존도에도 불구하고 다음 분야:
에서는 이 특정 위협의 적극적인 확산을 촉진하는 요소가 발견되지 않았습니다.
CVE-2025-32433은 NVD 데이터베이스에 다음과 같은 일반 CPE(Common Platform Enumeration)로 등록되었습니다:
cpe:2.3:a:erlang:otp:25:*:*:*:*:*:*:*cpe:2.3:a:erlang:otp:26:*:*:*:*:*:*:*cpe:2.3:a:erlang:otp:27:*:*:*:*:*:*:*다음 패치 버전보다 낮은 마이너 릴리스가 취약한 것으로 간주됩니다:
- 25.x – 25.3.2.20 이하
- 26.x – 26.2.5.11 이하
- 27.x – 27.3.3 이하
ssh:daemon/2)이 실행 중이어야 하며, 외부 openssh가 아니어야 합니다.22 또는 사용자 정의(예: 2222))가 공격자 네트워크에서 원격 연결에 접근 가능해야 합니다.ssh:daemon/2 옵션이 아닌 Erlang/OTP 코드의 프로토콜 로직과 관련됩니다.⚠️ Erlang/OTP가 SSH 서버를 띄우지 않고 클라이언트 라이브러리로만 사용되거나, 서버가 격리된 네트워크에 있는 경우 취약점에 노출되지 않습니다.
취약점은 Erlang/OTP 내장 SSH 서버가 사전 인증 프로세스를 올바르게 처리하지 못하기 때문에 발생합니다.
연결 프로토콜의 두 가지 메시지 유형인 SSH_MSG_CHANNEL_OPEN 및 SSH_MSG_CHANNEL_REQUEST 가 핵심 역할을 합니다.
RFC 4254 표준에 따르면, 이러한 메시지는 사용자 인증 성공 후에만 수신되어야 합니다.
더 일찍 보내려는 모든 시도는 즉시 연결을 종료해야 합니다.
CVE-2025-32433의 경우 SSH 데몬이 이 규칙을 적용하지 않아 공격자가 유효한 자격 증명을 제공하지 않고 세션 채널을 열고 임의 명령어로 exec 요청을 보낼 수 있습니다.
즉, 이는 인증되지 않은 원격 코드 실행(RCE) 으로 이어집니다. 공격자는 사용자 이름, 암호 또는 키를 알 필요 없이 서버를 장악할 수 있습니다.

SSH 연결 프로토콜은 SSH 전송 및 인증 계층 위에서 작동합니다.
대화형 로그인, 원격 명령 실행 및 포트 전달 기능을 제공합니다.
취약한 Erlang/OTP SSH 구현에서 채널 시작 및 명령 요청에 필요한 두 메시지인 SSH_MSG_CHANNEL_OPEN 및 SSH_MSG_CHANNEL_REQUEST 가 공격 지점이 됩니다:
공격자는 인증을 통과하기 전에 시스템이 임의 코드를 실행하도록 속이는 특수하게 조작된 트래픽을 보낼 수 있습니다.

연구의 일환으로 CVE-2025-32433에 대한 작동하는 Proof-of-Concept이 준비되었습니다.
CVE-2025-32433.py – SSH 패킷을 수동으로 구성하는 Python 스크립트
(SSH_MSG_KEXINIT, SSH_MSG_CHANNEL_OPEN, SSH_MSG_CHANNEL_REQUEST)를
인증 전에 전송합니다.
이를 통해 취약한 Erlang/OTP 버전에서 서버 측에서 임의 명령을 실행할 수 있습니다.
PoC에서는 cyberok 텍스트가 포함된 /lab.txt 파일을 생성합니다.
ssh_server.erl – 포트 2222에서 내장 OTP SSH 데몬을 시작하는 최소 Erlang 모듈입니다.
시연용으로만 필요하며 Docker 컨테이너 내에서 실행됩니다.
Dockerfile – 지정된 Erlang/OTP 버전을 자동으로 컴파일하고 테스트 SSH 서버를 시작하는
컨테이너 빌드 레시피입니다.
⚠️ 이 PoC는 로컬 테스트 및 교육 목적으로만 사용됩니다. 프로덕션 또는 공용 네트워크에서 사용하지 마십시오.
이미지 빌드:
git clone https://github.com/iteride/CVE-2025-32433.git && cd CVE-2025-32433/POC/ && docker build -t cve-ssh .

이미지 실행
docker run -d --name cve-ssh -p 2222:2222 cve-ssh
PoC 시연

수동 템플릿은 실제 공격 행위를 수행하지 않고 취약점의 간접적 징후를 찾습니다.
서비스가 자체적으로 제공하는 '표면적' 정보만 분석합니다:
취약한 버전(예: OTP 25.3.2.19 또는 26.2.5.10)이 발견되면 nuclei는 호스트를 잠재적 취약으로 표시합니다.
⚠️ 이 접근 방식은 안전합니다. 악성 패킷이나 익스플로잇 시도가 전혀 발생하지 않습니다.
nuclei -u 127.0.0.1:2222 -t erlang-passive.yaml
능동 템플릿은 통제된 공격 시뮬레이션을 수행합니다:
인증 전에 특수하게 조작된 SSH 패킷을 보내고 취약점이 트리거되는지 확인합니다.
익스플로잇 사실을 확인하기 위해 Interactsh가 사용됩니다. 원격 서버가 악성 요청을 실행하면 Interactsh 대시보드에 DNS 콜백이 나타납니다.
✅ 이 테스트는 원격 코드 실행(RCE)의 실제 가능성을 확인하지만, 격리된 테스트 환경에서만 수행됩니다.
nuclei -u 127.0.0.1:2222 -t erlang-active.yaml -code
nuclei-template과의 차이점:
스크립트 실행
⚠️ 실행 전에 interactsh-client가 설치 및 실행 중인지 확인하십시오.
python3 babyfon.py -f targets.txt -d your.interactsh_domain

실행 후 interactsh-client에서 DNS 상호 작용을 확인합니다. (예시에서는 두 개의 대상을 스캔합니다. 하나는 취약하고 다른 하나는 이미 패치되었습니다.)



테스트 결론: