
PuTTY CVE-2024-31497을 악용하는 개념 증명(PoC)입니다.
이 취약점은 ecc-ssh.c 파일의 편향된 ECDSA nonce 생성 방식을 악용합니다. nonce는 $sha512(ID\ ||\ sha512(privKey)\ ||\ sha1(data))\ mod\ q$ 로 생성되며 상위 9비트가 0으로 남습니다. 개인 키를 복구하려면 60개의 서명이 필요하지만, 58개만 있어도 성공 확률은 50%입니다.
취약점은 Bäumer와 Marcus Brinkmann이 발견했습니다.
이 익스플로잇을 사용하려면 sagemath와 requirements.txt의 python 의존성이 설치되어 있어야 합니다.
커밋 내용에 서명하기 위해 PuTTy 또는 TortoiseGit을 사용한 60개의 검증된 GitHub 커밋에서 ECDSA 서명을 추출합니다.
또 다른 가능한 공격은 피해자가 (PuTTY 또는 Pageant를 사용하여) 연결하는 rogue SSH 서버를 설정하는 것입니다. 여러 번 연결한 후에는 60개의 서명을 검색하여 개인 키를 복구할 수 있습니다.
서명 파일에는 메시지 해시, 공백, 그리고 r 및 s 값이 연결된 형태로 포함되어야 합니다.
pubkey 파일 입력은 raw, PEM, DER 또는 OpenSSH 형식일 수 있습니다.
이 poc는 On Bounded Distance Decoding with Predicate: Breaking the "Lattice Barrier" for the Hidden Number Problem 논문의 malb 구현 중 일부를 사용합니다.