KOROMOON

착한 사마리아인이 되고 싶습니다.

10/18/2018

[CVE-2018-10933] libSSH 인증 우회 취약점


( 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) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.

댓글 없음:

댓글 쓰기