
sudo 버퍼 오버플로우 분석: sudo 버전 <1.8.26에 영향을 미치며, 공개적으로 이용 가능한 익스플로잇을 컴파일하기 위해 GCC를 사용하는 방법
CVE-2019-18634 (https://www.exploit-db.com/exploits/47995) 분석
Sudo 1.8.25p - 'pwfeedback' 버퍼 오버플로우 (PoC)
Sudo의 pwfeedback 옵션은 사용자가 비밀번호를 입력할 때 시각적 피드백을 제공하는 데 사용할 수 있습니다. 키를 누를 때마다 별표(*)가 출력됩니다. 이 옵션은 표준 Password: 프롬프트가 키 입력의 에코를 비활성화하는 방식에 대한 사용자 혼란에 대응하여 추가되었습니다. pwfeedback은 업스트림 버전의 sudo에서 기본적으로 활성화되어 있지 않지만, Linux Mint 및 Elementary OS와 같은 일부 시스템에서는 기본 sudoers 파일에서 이 옵션을 활성화합니다.
분석
Sudo 버퍼 오버플로우 tryhackme writeup
CVE-2019-18634 분석
먼저 SSH를 통해 tryhackme 인스턴스에 로그인합니다.
이 취약점은 pwfeedback 함수가 힙 버퍼 오버플로우에 취약하기 때문에 발생합니다. 이 취약점을 악용하기 위해 먼저 sudo –version 명령을 실행하여 시스템에 취약한 버전의 sudo(sudo <1.8.26)가 있는지 확인합니다.
CVE-2019-18634 분석
먼저 SSH를 통해 tryhackme 인스턴스에 로그인합니다.
이 취약점은 pwfeedback 함수가 힙 버퍼 오버플로우에 취약하기 때문에 발생합니다. 이 취약점을 악용하기 위해 먼저 sudo –version 명령을 실행하여 시스템에 취약한 버전의 sudo(sudo <1.8.26)가 있는지 확인합니다.

시스템에 취약한 버전의 sudo가 있음을 확인한 후, 이제 pwfeedback 함수가 존재하는지 확인합니다. 이는 두 가지 방법으로 확인할 수 있습니다. 첫 번째는 sudo를 호출하고 비밀번호 프롬프트에 아무거나 입력하는 방법으로, 비밀번호 문자를 입력할 때 "*"가 표시되는지 확인하는 것입니다. 두 번째로 더 기술적인 방법은 sudo -l 명령을 사용하는 것이지만, 이 경우에도 사용자에게 sudo에 대한 정보를 볼 수 있는 적절한 권한이 있거나 sudoers 파일을 연결(concatenate)할 수 있는 권한이 있어야 합니다.

이제 exploit-db에 사용된 테스트 케이스를 사용하여 버퍼 오버플로우가 가능한지 확인합니다. https://www.exploit-db.com/exploits/47995
perl -e 'print(("A" x 100 . "\x{00}") x 50)' | sudo -S id ^^위의 코드 줄은 다음과 같이 동작합니다:
100개의 A 문자를 추가하고 이를 sudo 명령으로 파이프하여 pwfeedback 힙 버퍼에 전달합니다.

그러면 sudo는 sudo 프로세스를 계속 진행하는 방법을 알 수 없기 때문에 세그멘테이션 오류(segmentation fault)를 출력합니다.
이는 정적 힙 버퍼가 넘치면 다음 명령어의 흐름을 유지하는 CPU 레지스터와 명령어 포인터(instruction pointer)가 넘치기 시작하기 때문에 발생합니다.
익스플로잇을 실행하면 버퍼 오버플로우가 발생하여 시스템에 대한 루트 액세스 권한을 얻을 수 있습니다. https://www.exploit-db.com/exploits/47995
