( 1 ) 취약점 정보
libSSH 는 C 로 작성된 라이브러리로 SSH 프로토콜을 구현하며 클라이언트 및 서버 응용 프로그램을 구현하는데 사용함.
해당 취약점은 서버가 인증을 시작할 것으로 예상하는 SSH2_MSG_USERAUTH_REQUEST 메시지 대신 서버에 SSH2_MSG_USERAUTH_SUCCESS 메시지를 표시하면 공격자가 자격 증명없이 성공적으로 인증할 수 있는 취약점임.
좀 더 풀어서 쓰자면 libSSH 서버측 코드 내에서 클라이언트가 인증 프로세스를 건너 뛰고 라이브러리에 의해 유지 관리되는 내부 상태 시스템을 인증하도록 설정할 수 있다는 것임.
해당 취약점은 NCC Group 의 Peter Winter Smith 에 의해 발견됨.
취약한 버전
libssh version >= 0.6
libssh version < 0.7.6
libssh version < 0.8.4
( 2 ) 취약점 분석
인증을 우회할 수 있는지 알아보려면 취약한 버전의 SSH 프토코콜 메시지를 처리하는 코드를 검사해야 함.
참고로 아래 스샷은 libssh 0.7.5 버전에서 확인함.
< libssh\src\packet.c 파일 >
위 패킷 유형에 따라 핸들러를 실행하는 코드로 각 유형에 따라 메시지를 무차별로 발송할 경우 SSH2_MSG_USERAUTH_SUCCESS 메시지는 클라이언트에서만 처리하기 위한 것인데 서버에서도 실행할 수 있음.
정상적인 SSH2_MSG_USERAUTH_SUCCESS 메시지는 서버에서 클라이언트측으로 전송하는 것으로 확인되며 해당 취약점은 코드상 문제로 서버에서도 실행될 경우 문제가 발생되는 것으로 확인됨.
SSH 프로토콜 통신 관련 링크 :
https://upload.wikimedia.org/wikipedia/commons/f/fc/SSH-sequence-password.svg
< libssh\src\auth.c 파일 >
SSH2_MSG_USERAUTH_SUCCESS 핸들러를 조사해 보면 다음과 같음.
SSH2_MSG_USERAUTH_SUCCESS 메시지가 수신되면 위의 핸들러 함수는 세션 상태를 SSH_SESSION_STATE_AUTHENTICATED 로 설정함.
클라이언트에서는 인증이 성공했다는 것을 상태 시스템에 지정하지만 서버에서 실행되면 세션 상태가 인증됨으로 변경됨.
< libssh\src\server.c 파일 >
서버에서 SSH_SESSION_STATE_AUTHENTICATED 상태에 대한 결과가 성공적으로 완료되면 클라이언트에 성공 메시지로 응답함.
사용자를 인증된 것으로 설정하기 위해 다음 함수가 추가적으로 실행됨.
< libssh\src\messages.c 파일 >
서버 세션 상태가 SSH_SESSION_STATE_AUTHENTICATED 로 설정되면 새 SSH 채널을 만들 때 적용되는 다음 보안 검사가 무시됨.
( 3 ) PoC
해당 PoC 코드는 SSH2_MSG_USERAUTH_REQUEST 대신 SSH2_MSG_USERAUTH_SUCCESS 메시지를 보내도록 "#ncc" 주석의 코드가 도입됨.
( 4 ) 대응 방안
최신 버전으로 업데이트
libssh version 0.7.6
libssh version 0.8.4
( 5 ) Reference
https://www.nccgroup.trust/uk/our-research/technical-advisory-authentication-bypass-in-libssh/
https://www.libssh.org/2018/10/16/libssh-0-8-4-and-0-7-6-security-and-bugfix-release/
https://www.libssh.org/features/
https://www.bleepingcomputer.com/news/security/hacker-im-logged-in-new-libssh-vulnerability-ok-i-believe-you/
http://www.twoeggz.com/news/11662804.html
https://meterpreter.org/cve-2018-10933-libssh-vulnerability/?fbclid=IwAR37sLDKLyIkhpjuG2usdvh8mfz3QOv587DWceKeQpFygu1YIDEmCYi9vFA&cn-reloaded=1
https://www.anquanke.com/post/id/162225
https://github.com/rapid7/metasploit-framework/blob/22503209d9b8aa0a0e21ed60d9a0af7f1f2182f4/modules/auxiliary/scanner/ssh/libssh_auth_bypass.rb
https://gist.github.com/digital-shokunin/4f679eba5fd5a34039eee05881a6b3c2
============================================================
본 게시물은 KOROMOON 님께서 작성하였으며 CCL (Creative Commons License) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.
댓글 없음:
댓글 쓰기