
CVE-2020-15778에 대한 기술 문서 및 개념 증명으로, OpenSSH scp (<=8.3p1)의 인증된 명령 삽입 취약점으로 파일 경로의 백틱 페이로드를 통해 원격 코드 실행을 허용합니다.
이메일 주소 : [email protected]
링크드인 : www.linkedin.com/in/chinmay-pandya
제품: Openssh
영향을 받는 구성 요소: SCP
취약한 버전: <=openssh-8.3p1
scp는 컴퓨터 간 파일 복사를 위한 프로그램입니다. SSH 프로토콜을 사용합니다. 대부분의 Linux 및 Unix 배포판에 기본적으로 포함되어 있습니다.
원격 서버로 파일을 복사할 때 파일 경로가 로컬 scp 명령의 끝에 추가됩니다. 예를 들어, 다음 명령을 실행하면
scp SourceFile user@host:directory/TargetFile
그러면 다음 로컬 명령이 실행됩니다
scp -t directory/TargetFile
로컬 scp 명령을 생성할 때 파일 이름을 검증하지 않습니다. 공격자는 백틱이 포함된 페이로드를 파일 이름으로 전달할 수 있으며, 로컬 scp 명령이 실행될 때 로컬 셸도 백틱이 포함된 페이로드를 실행하게 됩니다.
scp로 다음 명령을 실행합니다
scp /sourcefile remoteserver:'`touch /tmp/exploit.sh`/targetfile'
이 명령을 실행한 후 원격 서버에서 /tmp/ 디렉터리에 exploit.sh 파일이 생성된 것을 확인할 수 있습니다. 파일 이름에 작은따옴표를 넣는 것은 로컬 셸에서 페이로드가 실행되는 것을 방지하기 위해 중요합니다. 또는 작은따옴표와 같은 이스케이프 문자를 사용하면 로컬 셸에서 페이로드 실행을 방지할 수 있습니다.
이는 인증된 익스플로잇이며, 원격 서버에서 명령을 실행하려면 유효한 SSH/SCP 자격 증명이 필요합니다
scp 명령은 rcp라고 불리는 역사적 프로토콜로, 이러한 인수 전달 방식을 사용하며 확장 문제가 발생합니다. scp 모델에 "보안"을 추가하는 것은 매우 어려운 것으로 입증되었습니다. 비정상적인 인수 전송을 "탐지"하고 "방지"하려는 모든 시도는 기존 워크플로를 깨뜨릴 가능성이 큽니다. 네, 현재 상황이 좋지 않다는 것을 알고 있습니다. 하지만 일반적인 대체 수단이 생기기 전까지 사람들이 scp를 사용하는 간편한 패턴을 깨고 싶지 않습니다. 우려된다면 rsync나 다른 도구를 대신 사용해야 합니다.