- curl 8.4.0에서 발견된 중요한 보안 문제인 CVE-2023-38545에 대한 기사, 이는 오랜 시간 동안 curl에서 가장 심각한 보안 문제로 간주됨
- 문제는 힙 오버플로우 문제로, SOCKS5 프록시에 연결하는 함수의 결함으로 인해 발생함
- 이 문제는 2020년 초에 함수가 차단 호출에서 비차단 상태 기계로 변환될 때 도입되었으며, 이는 SOCKS5를 통한 대량의 병렬 전송 성능을 향상시키기 위해 수행되었음
- 결함은 상태 기계의 INIT 상태에 있으며, 여기서 로컬 변수가 설정되어 curl이 호스트를 해결할지 프록시에 이름을 전달할지 결정함. 호스트 이름이 너무 길면 코드가 로컬 해결 모드로 전환되며, 이는 호스트 이름이 대상 버퍼보다 길 경우 메모리 오버플로우를 초래할 수 있음
- 버퍼 크기가 65541 바이트보다 작게 설정되고 호스트 이름이 버퍼 크기보다 길 경우 오버플로우가 발생할 수 있음. 이는 악의적인 행위자가 공식에 초대형 호스트 이름을 입력해 결함을 유발하는 것을 필요로 함
- libcurl을 사용하는 클라이언트가 SOCKS5 프록시를 통해 접근하는 HTTPS 서버를 제어하는 공격자는 HTTP 30x 응답을 통해 애플리케이션에 조작된 리디렉션을 반환하여 힙 버퍼 오버플로우를 유발할 수 있음
- 이 문제는 curl 8.4.0에서 호스트 이름이 너무 길어 원격 해결에서 로컬 해결로 전환하는 대신 curl이 오류를 반환하도록 함으로써 수정되었음. 이 시나리오에 대한 전용 테스트 케이스도 추가되었음
- 저자는 이 결함이 C 대신 메모리 안전 언어에서 curl이 작성되었다면 발생하지 않았을 것이라고 인정하지만, curl을 다른 언어로 포팅하는 것은 현재 계획에 없다고 밝힘
- 저자는 메모리 안전 언어로 작성된 더 많은 종속성을 허용하고, 사용하며, 지원하는 것이 실행 가능한 접근법이며, 점차 curl의 일부를 교체할 수도 있다고 제안함
- 저자는 실수를 인정하고 사과하며, 이 결함은 더 나은 테스트 세트로 감지할 수 있었다고 밝힘. 또한 이 함수에서 문제를 발견하지 못한 정적 코드 분석기에 대해 언급함
- 저자는 200억 개 이상의 인스턴스에 설치된 코드에서 힙 오버플로우를 발송하는 것은 권장하지 않는 경험이라고 결론을 내림