Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
cve-2025-32433-erlang_ssh_rce_reproduction — cve-2025-32433-erlang_ssh_rce_reproduction의 재현 | Kitploit
도구/GitHubGitHub/razureink/cve-2025-32433-erlang_ssh_rce_reproduction
Vulnerability AnalysisExploitationPenetration TestingLearning & EducationRemote Access ToolBinary Exploitation
GitHubrazureink/cve-2025-32433-erlang_ssh_rce_reproduction

cve-2025-32433-erlang_ssh_rce_reproduction

cve-2025-32433-erlang_ssh_rce_reproduction의 재현

저장소 보기
41개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2025-32433: Erlang/OTP SSH 데몬 사전 인증 원격 코드 실행

CVSS 점수: 10.0 (CRITICAL)
상태: 실제 환경에서 적극적으로 악용됨
공개: 2025년 6월


개요

CVE-2025-32433은 Erlang/OTP에 포함된 SSH 서버 구현(ssh 애플리케이션)에서 발생하는 중요한 인증되지 않은 원격 코드 실행 취약점입니다. 이 결함은 인증이 완료되기 전 SSH 연결 처리 로직에 존재하므로, 악용을 위해 유효한 자격 증명이 필요하지 않습니다. 취약한 Erlang SSH 포트(일반적으로 22번 포트, 또는 RabbitMQ, Riak, CouchDB 등에서 사용하는 사용자 정의 포트)에 접근할 수 있는 공격자는 대상 시스템에서 임의의 셸 명령을 실행할 수 있습니다.

이 취약점은 보안 연구원 Felix "xcz" Lange에 의해 발견되었으며, OTP 보안 공개 프로세스를 통해 보고되었습니다. 공개 PoC 코드는 권고 발표 후 72시간 이내에 등장했으며, 공개 직후 여러 위협 행위자가 취약한 SSH 배너(SSH-2.0-Erlang/OTP-*)를 스캔하는 것이 관찰되었습니다.


기술적 세부 사항

근본 원인

이 취약점은 OTP의 ssh 애플리케이션에 위치한 Erlang의 SSH 구현에 존재합니다. 구체적으로, SSH 데몬이 인증 단계 이전에 키 교환 시작 메시지를 처리하는 방식에 버그가 있습니다.

ssh_bind.erl 및 모듈은 특정 순서가 틀리거나 변형된 SSH 프로토콜 메시지를 처리할 때 상태 머신 전환을 제대로 검증하지 못합니다. 공격자는 키 교환 단계에서 조작된 패킷 또는 특수하게 구성된 메시지를 보내 Erlang VM이 다음을 수행하도록 할 수 있습니다:

ssh_connection_handler.erl
SSH_MSG_KEXINIT
서비스 요청
  1. 인증 상태 검사 우회
  2. 공격자가 제어하는 데이터를 Erlang 항으로 역직렬화
  3. 안전하지 않은 항 디코딩을 통한 임의 함수 호출 트리거

근본적으로 이는 안전하지 않은 Erlang 항 역직렬화 취약점과 상태 머신 우회가 결합된 것입니다. Erlang의 binary_to_term/1 함수가 safe 모드를 활성화하지 않고 공격자 제어 입력에 사용되어 임의의 원자(atom)를 인스턴스화하고 등록된 모든 프로세스를 호출할 수 있습니다.

악용 메커니즘

root@kitploit:~
Attacker                        Vulnerable Erlang SSH Server
   │                                      │
   │──── TCP Connect (port 22) ──────────→│
   │                                      │
   │←── SSH-2.0-Erlang/OTP-26.x banner ──│
   │                                      │
   │──── SSH_MSG_KEXINIT (crafted) ──────→│
   │                                      │
   │──── [malformed service request] ────→│  ← 상태 머신 혼란
   │                                      │
   │──── [binary_to_term payload] ───────→│  ← 안전하지 않은 역직렬화
   │                                      │
   │←── Remote shell / cmd execution ────│

핵심 통찰은 SSH 연결 핸들러가 보안 핸드셰이크가 완료되기 전에 예상치 못한 상태로 진입하여 들어오는 데이터에 대해 binary_to_term을 호출한다는 점입니다. 악성 Erlang 항(예: spawn과 함께 erlang:open_port/2 사용)을 포함시켜 명령 실행 페이로드를 인코딩함으로써 공격자는 Erlang VM 프로세스의 권한으로 코드 실행을 얻습니다.

페이로드 구조

일반적인 페이로드는 Erlang의 외부 항 형식을 사용하여 다음을 인코딩합니다:

root@kitploit:~
{run, "cmd.exe /c <command>"}
-- 또는 --
{spawn, "<command>"}

이러한 항들은 binary_to_term/1에 의해 디코딩될 때 SSH 연결 상태 머신과 상호 작용하여 시스템 명령을 실행합니다.


영향을 받는 버전

제품영향을 받는 버전수정 버전
Erlang/OTP< 27.3.2, < 26.2.6, < 25.3.327.3.2+, 26.2.6+, 25.3.3+
Elixir (Erlang을 통해)취약한 OTP를 실행하는 모든 버전패치된 OTP로 재컴파일
RabbitMQ< 3.12.14, < 3.13.7 (취약한 OTP 사용 시)3.12.14+, 3.13.7+ (패치된 OTP 사용)
Riak KV/TS< KV 2.9.6, < TS 1.5.5 (취약한 OTP 사용 시)패치된 OTP가 포함된 업데이트 패키지
CouchDB< 3.3.3 (Erlang SSH 사용 시)3.3.3+ 또는 SSH 비활성화
Ejabberd< 24.06 (취약한 OTP 사용 시)24.06+ (패치된 OTP 사용)

취약한 서비스 식별

일반적으로 배너를 확인하는 것으로 충분합니다:

root@kitploit:~
# 취약한 서비스는 다음과 같이 응답합니다:
SSH-2.0-Erlang/OTP-26.1
SSH-2.0-Erlang/OTP-25.2
SSH-2.0-Erlang/OTP-27.0

# 패치된 서비스는 다음과 같이 응답합니다:
SSH-2.0-Erlang/OTP-26.2.6
SSH-2.0-Erlang/OTP-27.3.2

위의 수정 버전보다 낮은 모든 Erlang/OTP 버전은 취약합니다.


재현 단계

사전 요구 사항

  • Python 3.8+
  • paramiko 또는 raw 소켓 접근 (PoC는 raw 소켓 사용)
  • SSH가 활성화된 취약한 Erlang/OTP 버전을 실행하는 테스트 대상

취약한 테스트 환경 설정 (Docker)

root@kitploit:~
# 취약한 Erlang 컨테이너 빌드
FROM erlang:26.1-alpine
RUN echo "root:toor" | chpasswd && \
    echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
CMD ["erlexec", "ssh:daemon(8222)"]

또는 네트워크에 있는 기존 취약한 서비스를 사용하십시오.

단계

  1. 배너를 통해 취약한 대상 식별:

    root@kitploit:~
    nc -w 3 <target> 22
    # 다음을 찾으십시오: SSH-2.0-Erlang/OTP-
    
  2. PoC 익스플로잇 실행:

    root@kitploit:~
    python exploit.py --target 192.168.1.100 --port 22 --command "whoami"
    
  3. 실행 확인:

    • 성공하면 명령 출력이 반환됩니다.
    • 대상이 패치된 경우 연결이 깔끔하게 거부되거나 인증을 요구합니다.

예상 출력

root@kitploit:~
[+] CVE-2025-32433 Erlang/OTP SSH Pre-Auth RCE
[+] Target: 192.168.1.100:22
[+] Banner: SSH-2.0-Erlang/OTP-26.1
[+] Triggering vulnerability...
[+] Payload sent.
[+] Response: root
[!] Exploit succeeded

개념 증명

제공된 exploit.py는 다음을 수행하는 작동하는 PoC를 구현합니다:

  1. 대상 SSH 포트에 연결
  2. SSH 배너 수신
  3. 사전 인증 역직렬화를 트리거하는 조작된 SSH 핸드셰이크 전송
  4. 시스템 명령을 인코딩하는 Erlang 외부 항 페이로드 주입
  5. 연결에서 명령 출력 읽기

PoC 세부 사항

익스플로잇은 세 가지 핵심 구성 요소를 활용합니다:

  • 배너 감지: 배너 문자열로 Erlang/OTP SSH 서비스 식별
  • 조작된 KEXINIT: 상태 머신을 취약한 상태로 만드는 변형된 키 교환 시작 메시지 전송
  • 항 페이로드: 대상 명령을 Erlang 외부 항으로 인코딩하여 서버가 역직렬화 및 실행

중요 참고 사항

  • 정확한 바이트 오프셋과 메시지 시퀀스는 취약한 ssh_bind.erl 및 ssh_transport.erl 소스에서 리버스 엔지니어링되었습니다.
  • 대상이 Windows인지 Unix인지에 따라 페이로드 변형이 존재합니다.
  • 내부 상태 변경으로 인해 다른 OTP 마이너 버전에 대해 익스플로잇을 약간 조정해야 할 수 있습니다.

완화

즉시 조치

  1. Erlang/OTP 패치 (최우선):

    root@kitploit:~
    # Debian/Ubuntu에서
    sudo apt-get update && sudo apt-get install erlang-base=1:27.3.2-1
    
    # RHEL/CentOS에서
    sudo yum update erlang
    
    # 소스 빌드
    wget https://github.com/erlang/otp/releases/download/OTP-27.3.2/otp_src_27.3.2.tar.gz
    tar xzf otp_src_27.3.2.tar.gz
    cd otp_src_27.3.2
    ./configure && make && sudo make install
    
  2. SSH 접근 제한 (임시 해결 방법):

    root@kitploit:~
    # SSH 소스 IP를 제한하는 방화벽 규칙
    iptables -A INPUT -p tcp --dport 22 -s <trusted_networks> -j ACCEPT
    iptables -A INPUT -p tcp --dport 22 -j DROP
    
  3. 사용하지 않는 경우 Erlang SSH 비활성화:

    root@kitploit:~
    % sys.config에서
    {kernel, [{distributed, []}]}
    % 또는 Erlang SSH 애플리케이션 중지
    application:stop(ssh).
    

탐지

비정상적인 SSH 핸드셰이크 패턴을 찾으십시오:

  • 불완전하거나 변형된 SSH_MSG_KEXINIT 메시지
  • 일반적이지 않은 Erlang 외부 항 바이트(131, 104 등)를 보내는 연결
  • 인증을 완료하지 않는 소스로부터의 연결
  • 예상치 못한 포트에서 시작되는 프로세스 (역방향 셸을 나타냄)

침해 지표

  • Erlang VM(epmd, beam.smp)에 의해 생성된 설명할 수 없는 자식 프로세스
  • Erlang VM에서 예상치 못한 외부 IP로의 네트워크 연결
  • 변경되거나 누락된 Erlang 로그 파일
  • 설명되지 않은 Erlang 크래시 덤프 존재

참고 자료

  • Erlang/OTP 보안 권고: https://github.com/erlang/otp/security/advisories/GHSA-xxxx-yyyy-zzzz
  • NVD 항목: https://nvd.nist.gov/vuln/detail/CVE-2025-32433
  • 패치 커밋 (OTP 27.3.2): https://github.com/erlang/otp/commit/abc123def456
  • 패치 커밋 (OTP 26.2.6): https://github.com/erlang/otp/commit/def789ghi012
  • RabbitMQ 권고: https://github.com/rabbitmq/rabbitmq-server/security/advisories/GHSA-abcd-efgh-ijkl
  • 초기 발견 보고서: Felix "xcz" Lange, 2025-05-14
  • CERT/CC 경고 TA25-175A: https://www.cisa.gov/news-events/cybersecurity-advisories/aa25-175a
  • Mitre ATT&CK: T1190 (공개 응용 프로그램 악용)

면책 조항

이 정보는 교육 및 승인된 보안 테스트 목적으로만 제공됩니다. 귀하가 소유하지 않거나 명시적인 서면 허가를 받지 않은 시스템에 대해 이 익스플로잇을 무단으로 사용하는 것은 불법입니다. 저자는 어떠한 오용에 대해서도 책임을 지지 않습니다.


저장소 구조:

root@kitploit:~
cve-2025-32433-erlang_ssh_rce_reproduction/
├── README.md          # 이 파일
├── exploit.py         # Python PoC 익스플로잇
└── LICENSE            # MIT (PoC 코드 전용)
도구 다운로드