
Xlight SFTP 서버 <= 3.9.4.2에서의 사전 인증 힙 오버플로우
Xlight 32비트 및 64비트 버전 <= 3.9.4.2
인증되지 않은 공격자가 Xlight SFTP에 접근하여 코드 실행을 달성하거나 서비스 거부 또는 서비스를 유발할 수 있습니다.
SFTP 프로토콜에서 전송되는 문자열은 4바이트 길이 접두사가 붙습니다. Xlight가 네트워크 패킷에서 이러한 문자열을 읽는 데 사용하는 함수는 길이를 검증하고 필요한 메모리 양을 할당할 때 정수 오버플로우가 발생합니다. 문자열에 대한 4바이트 길이를 조작함으로써 공격자가 제어하는 버퍼에서 힙으로 범위를 벗어난 대규모 memmove(~4GB)를 트리거할 수 있습니다.
취약한 함수는 SSH 핸드셰이크 전반에 걸쳐 문자열을 수신하는 데 사용되며, 지원되는 알고리즘, 암호 제품군, 클라이언트의 사용자 이름 및 비밀번호를 수신할 때 인증 전 단계를 포함합니다. 조작된 길이로 이러한 문자열 중 하나를 대상으로 삼아 익스플로잇을 트리거할 수 있습니다.
이것은 트리거하기 쉽지만 익스플로잇의 용이성은 Xlight 바이너리의 비트 수에 따라 달라집니다.
32비트에서는 복사 작업이 힙의 끝을 넘어 실행되어 프로세스의 모든 것을 덮어쓰고 충돌을 일으킵니다. 힙의 인접한 구조를 손상시키고 이 서버의 멀티스레드 특성을 이용하여, 와일드 복사가 프로세스를 충돌시키기 전에 손상된 데이터에 접근하는 것이 가능할 수 있습니다.
64비트에서는 메모리 할당 호출의 크기 인수가 size_t이므로(즉, 64비트로 컴파일할 때 64비트 너비) 두 개의 32비트 정수의 덧셈으로 이 값을 오버플로우할 수 없으며, 대신 약 4GB의 큰 버퍼를 할당하게 됩니다. 이 버그는 대신 OOB 읽기를 초래하여 프로세스를 충돌시킵니다.