심층 분석: 심각도가 높은 libcurl/curl 취약점 찾기 및 수정하기

게시일: 2023년 10월 20일
by Laura Verheyde
사례 연구

심층 분석: 심각도가 높은 libcurl/curl 취약점 찾기 및 수정하기

게시일: 2023년 10월 20일
by Laura Verheyde
리소스 보기
리소스 보기

얼마 전, curl 프로젝트의수석 개발자인 다니엘 스텐버그가 10월 11일 배포된 curl의 새 버전이 두 가지 중대한 보안 취약점을 해결하기 위해 배포되었다는 안타까운 소식을 전하며 보안 및 개발 커뮤니티를 주목하게 만들었습니다.

스텐버그의 블로그에 게시된 사후 조사에 따르면, 영향을 받는 curl 라이브러리 버전은 2002년부터 사용 중인 SOCKS5 프록시 프로토콜의 레거시 문제와 관련된 힙 기반 버퍼 오버플로 취약성에 노출되어 있다고 합니다.

1998년부터 명령줄 도구로 사용되어 온 curl은 인터넷의 기본 기둥으로 널리 알려져 있습니다. 이처럼 오랜 역사와 광범위한 사용으로 인해 취약점이 발견될 경우 일반적인 사이버 안전에 지속적인 영향을 미칠 수 있는 의존성입니다.

이 사건은 거의 2년이 지난 지금도 여전히 악용되고 있는 또 다른 취약한 종속성인 Log4j의 파괴적인 Log4Shell 공격과 유사합니다.
↪f_200D↩
>>> 컬 미션으로 지금 바로 지식을 테스트해 보세요!

취약점입니다: 버퍼 오버플로

이 익스플로잇은 CVE-2023-38545에 자세히 설명되어 있으며, curl 버전 7.69.0부터 8.3.0까지 영향을 미칩니다. 주요 버그는 힙 기반 버퍼 오버플로 취약점이며, 초기 보고서에 따르면 익스플로잇에 성공하면 더 치명적인 원격 코드 실행(RCE) 공격으로 이어질 수 있다고 합니다. 이는 위협 행위자가 사용할 수 있는 워크플로이긴 하지만, 일반적인 사용 사례라기보다는 드문 사용 사례입니다.

일부 위험을 완화할 수 있는 한 가지 다행스러운 점은 악의적인 통신이 SOCKS5 프록시를 거쳐야 한다는 점인데, 이는 비교적 흔하지 않은 배포 방식입니다.

컬 익스플로잇과 비교하여 버퍼 오버플로에 대한 설명서를 살펴보겠습니다:

curl이 SOCKS5 프록시를 사용하라는 지시를 받으면 호스트명을 전달하고 프록시가 이를 확인하도록 합니다. 그러나 호스트 이름이 255바이트 제한을 초과하는 경우 curl은 호스트 이름을 로컬에서 확인합니다(아래 코드 스니펫에서 볼 수 있듯이: source).

클라이언트와 프록시 간에 핸드셰이크가 느린 경우, (짧은) 확인된 주소 대신 긴 호스트 이름이 메모리 버퍼에 복사될 수 있습니다. 할당된 메모리 부분은 255바이트 값만 허용하므로 이 제한을 초과하는 값을 수신하면 데이터가 메모리 버퍼의 경계를 넘치게 됩니다.

>>> 이 플레이 미션에서 직접 체험해 보세요. 플레이 가능한 미션!

버퍼 오버플로는 강력한 공격 벡터이며, 많은 레거시 프로그래밍 언어에서 널리 퍼져 있는 공격 벡터입니다. 이 특정 사례의 경우, 익스플로잇을 통해 일부 상황에서는 RCE라는 더 심각하고 피해를 주는 공격으로 이어지기도 했지만, 이 경로는 아직 흔하지 않고 발생 가능성도 낮습니다.

버퍼 오버플로 위험을 어떻게 완화할 수 있나요?

이 단계에서 가장 우선적으로 해결해야 할 사항은 모든 취약한 인스턴스에 패치를 적용하는 것이며, 컬 사용이 매우 널리 퍼져 있기 때문에 시스템 구성 요소에 사용 중인 종속성이 포함되어 있다는 사실이 반드시 명확하거나 광고되지 않을 수 있다는 점을 유의해야 합니다. 이 경우 감사 및 후속 패치가 필요합니다. 

일반적으로 버퍼 오버플로 결함은 Rust와 같은 메모리 안전 언어를 사용하여 완화할 수 있지만, curl과 같이 규모가 큰 프로젝트의 경우 다른 언어로 포팅하거나 임의로 재작성하는 것은 실용적이지 않습니다. Stenberg는 메모리 안전 언어로 작성된 더 많은 종속성을 사용하고 지원할 수 있는 가능성 또는 curl의 일부를 점진적으로 대체하는 대안에 대해 논의하면서 "... 현재 개발은 빙하에 가까운 속도로 진행되고 있으며 관련된 어려움을 고통스럽게 명확하게 보여줍니다. curl은 당분간 C로 계속 작성될 것입니다."라고 언급합니다. 이는 결코 작은 작업이 아니며 보안에 미치는 영향은 엄청납니다.

보안 실수는 언제나 발생할 수 있으며, 가능한 모든 공격 벡터를 찾아내기 위해 스캐너와 테스트에 의존하는 것은 불가능합니다. 따라서 이러한 버그와의 싸움에서 가장 큰 무기는 지속적인 보안 인식과 기술 개발에 대한 노력입니다.

보안 코드를 작성하고 위험을 완화하는 방법에 대해 자세히 알아보고 싶으신가요?

저희의 힙 오버플로 챌린지를 무료로.

더 많은 무료 코딩 가이드라인에 관심이 있다면 다음을 확인하세요. 보안 코드 코치 를 통해 보안 코딩 모범 사례를 파악할 수 있습니다.

리소스 보기
리소스 보기

저자

로라 베르헤이드

Laura Verheyde는 Secure Code Warrior 의 소프트웨어 개발자로서 취약점을 연구하고 Missions 및 코딩 연구소의 콘텐츠를 제작하는 데 주력하고 있습니다.

더 알고 싶으신가요?

블로그에서 최신 보안 코딩 인사이트에 대해 자세히 알아보세요.

Atlassian의 광범위한 리소스 라이브러리는 안전한 코딩 숙련도를 확보하기 위한 인적 접근 방식을 강화하는 것을 목표로 합니다.

블로그 보기
더 알고 싶으신가요?

개발자 중심 보안에 대한 최신 연구 보기

광범위한 리소스 라이브러리에는 개발자 중심의 보안 코딩을 시작하는 데 도움이 되는 백서부터 웨비나까지 유용한 리소스가 가득합니다. 지금 살펴보세요.

리소스 허브

심층 분석: 심각도가 높은 libcurl/curl 취약점 찾기 및 수정하기

게시일: 2024년 1월 22일
로라 베르헤이데

얼마 전, curl 프로젝트의수석 개발자인 다니엘 스텐버그가 10월 11일 배포된 curl의 새 버전이 두 가지 중대한 보안 취약점을 해결하기 위해 배포되었다는 안타까운 소식을 전하며 보안 및 개발 커뮤니티를 주목하게 만들었습니다.

스텐버그의 블로그에 게시된 사후 조사에 따르면, 영향을 받는 curl 라이브러리 버전은 2002년부터 사용 중인 SOCKS5 프록시 프로토콜의 레거시 문제와 관련된 힙 기반 버퍼 오버플로 취약성에 노출되어 있다고 합니다.

1998년부터 명령줄 도구로 사용되어 온 curl은 인터넷의 기본 기둥으로 널리 알려져 있습니다. 이처럼 오랜 역사와 광범위한 사용으로 인해 취약점이 발견될 경우 일반적인 사이버 안전에 지속적인 영향을 미칠 수 있는 의존성입니다.

이 사건은 거의 2년이 지난 지금도 여전히 악용되고 있는 또 다른 취약한 종속성인 Log4j의 파괴적인 Log4Shell 공격과 유사합니다.
↪f_200D↩
>>> 컬 미션으로 지금 바로 지식을 테스트해 보세요!

취약점입니다: 버퍼 오버플로

이 익스플로잇은 CVE-2023-38545에 자세히 설명되어 있으며, curl 버전 7.69.0부터 8.3.0까지 영향을 미칩니다. 주요 버그는 힙 기반 버퍼 오버플로 취약점이며, 초기 보고서에 따르면 익스플로잇에 성공하면 더 치명적인 원격 코드 실행(RCE) 공격으로 이어질 수 있다고 합니다. 이는 위협 행위자가 사용할 수 있는 워크플로이긴 하지만, 일반적인 사용 사례라기보다는 드문 사용 사례입니다.

일부 위험을 완화할 수 있는 한 가지 다행스러운 점은 악의적인 통신이 SOCKS5 프록시를 거쳐야 한다는 점인데, 이는 비교적 흔하지 않은 배포 방식입니다.

컬 익스플로잇과 비교하여 버퍼 오버플로에 대한 설명서를 살펴보겠습니다:

curl이 SOCKS5 프록시를 사용하라는 지시를 받으면 호스트명을 전달하고 프록시가 이를 확인하도록 합니다. 그러나 호스트 이름이 255바이트 제한을 초과하는 경우 curl은 호스트 이름을 로컬에서 확인합니다(아래 코드 스니펫에서 볼 수 있듯이: source).

클라이언트와 프록시 간에 핸드셰이크가 느린 경우, (짧은) 확인된 주소 대신 긴 호스트 이름이 메모리 버퍼에 복사될 수 있습니다. 할당된 메모리 부분은 255바이트 값만 허용하므로 이 제한을 초과하는 값을 수신하면 데이터가 메모리 버퍼의 경계를 넘치게 됩니다.

>>> 이 플레이 미션에서 직접 체험해 보세요. 플레이 가능한 미션!

버퍼 오버플로는 강력한 공격 벡터이며, 많은 레거시 프로그래밍 언어에서 널리 퍼져 있는 공격 벡터입니다. 이 특정 사례의 경우, 익스플로잇을 통해 일부 상황에서는 RCE라는 더 심각하고 피해를 주는 공격으로 이어지기도 했지만, 이 경로는 아직 흔하지 않고 발생 가능성도 낮습니다.

버퍼 오버플로 위험을 어떻게 완화할 수 있나요?

이 단계에서 가장 우선적으로 해결해야 할 사항은 모든 취약한 인스턴스에 패치를 적용하는 것이며, 컬 사용이 매우 널리 퍼져 있기 때문에 시스템 구성 요소에 사용 중인 종속성이 포함되어 있다는 사실이 반드시 명확하거나 광고되지 않을 수 있다는 점을 유의해야 합니다. 이 경우 감사 및 후속 패치가 필요합니다. 

일반적으로 버퍼 오버플로 결함은 Rust와 같은 메모리 안전 언어를 사용하여 완화할 수 있지만, curl과 같이 규모가 큰 프로젝트의 경우 다른 언어로 포팅하거나 임의로 재작성하는 것은 실용적이지 않습니다. Stenberg는 메모리 안전 언어로 작성된 더 많은 종속성을 사용하고 지원할 수 있는 가능성 또는 curl의 일부를 점진적으로 대체하는 대안에 대해 논의하면서 "... 현재 개발은 빙하에 가까운 속도로 진행되고 있으며 관련된 어려움을 고통스럽게 명확하게 보여줍니다. curl은 당분간 C로 계속 작성될 것입니다."라고 언급합니다. 이는 결코 작은 작업이 아니며 보안에 미치는 영향은 엄청납니다.

보안 실수는 언제나 발생할 수 있으며, 가능한 모든 공격 벡터를 찾아내기 위해 스캐너와 테스트에 의존하는 것은 불가능합니다. 따라서 이러한 버그와의 싸움에서 가장 큰 무기는 지속적인 보안 인식과 기술 개발에 대한 노력입니다.

보안 코드를 작성하고 위험을 완화하는 방법에 대해 자세히 알아보고 싶으신가요?

저희의 힙 오버플로 챌린지를 무료로.

더 많은 무료 코딩 가이드라인에 관심이 있다면 다음을 확인하세요. 보안 코드 코치 를 통해 보안 코딩 모범 사례를 파악할 수 있습니다.

우리는 당신에게 우리의 제품 및 / 또는 관련 보안 코딩 주제에 대한 정보를 보낼 수있는 귀하의 허가를 바랍니다. 우리는 항상 최대한의주의를 기울여 귀하의 개인 정보를 취급 할 것이며 마케팅 목적으로 다른 회사에 판매하지 않을 것입니다.

양식을 제출하려면 '분석' 쿠키를 활성화하세요. 완료되면 언제든지 다시 비활성화할 수 있습니다.