Translated message

A translation of this page exists in English.

Git에서 정수 절단 및 정수 오버플로우 취약점 (CVE-2016-2315, CVE-2016-2324)

Red Hat 제품 보안팀은 Git에서 정수 절단 결함 (CVE-2016-2315) 및 정수 오버플로우 결함 (CVE-2016-2324)이라는 취약점을 발견하였으며 이는 힙기반 버퍼 오퍼플로우를 발생시키고 결과적으로 원격 코드를 실행할 수 있습니다.

개요

Git은 서버와 클라이언트 간의 리포지터리 정보를 교환하기 위해 특정 형식을 사용합니다. 이는 packfile 형식이라 합니다.

공격자는 특수하게 조작된 packfile을 생성하여 취약한 서버 또는 클라이언트에 전송함으로써 처리 시 정수 절단 또는 정수 오버플로우를 발생시킬 수 있고 궁극적으로 시스템 메모리를 손상시킬 수 있습니다.

배경 정보

Git는 비집중형 아키텍처를 사용하는 분산 버전 관리 시스템입니다. 클라이언트 서버 모델을 사용하는 중앙 집중식 버전 관리 시스템과는 다르게 Git는 Git 리포지터리의 각각의 작업용 복사본이 전체 변경 내역을 포함한 동일한 복사본이 되게 합니다. 이로 인해 사용자는 공식 리포지터리에 변경을 푸시할 수 있는 권한이 없어도 프로젝트에 기여할 수 있을 뿐 아니라 네트워크 연결이 없는 상태에서도 작업할 수 있게 합니다.

영향받는 버전

Red Hat에서 릴리즈하고 지원하는 Red Hat Enterprise Linux 및 Red Hat Software Collections 용 Git 지원 버전은 영향을 받습니다. 이는 해결 방법 아래 부분에 영향을 받는 제품 목록에 명시되어 있습니다. 또한 업스트림에 있는 버전 2.4.11, 2.5.5, 2.6.6, 2.7.4 이전의 모든 버전도 이러한 취약점의 영향을 받습니다.

공격 내용 및 영향

취약점의 근본 원인은 Git가 경로 정보를 처리하는데 사용하는revision.c 소스 파일에 있는 path_name() 함수내의 정수 절단 및 정수 오버플로우 문제로 인한 것입니다. 이 취약점은 해당 함수가 공격자가 전송한 특수하게 조작된 Git packfile을 처리하기 전에 악의적인 코드를 완전히 제거하지 못해서 메모리 손상을 발생시키고 임의의 코드를 실행할 수 도 있게 만듭니다.

packfile 형식은 리포지터리 정보를 효율적으로 교환하기 위해 Git이 내부적으로 사용하는 형식입니다. Git은 packfiles를 생성하고 Git 엔드 포인트에서 송/수신하기 위해 여러 도구를 사용하는데 공격자는 긴 경로 이름 (231 바이트, 약 2 기가바이트)이나 경로 요소 트리가 포함되어 있는 특수하게 조작된 packfile을 생성하여path_name() 함수에서 처리될 때 취약점을 발생시킬 수 있습니다.

이러한 packfile은 이미 생성되어 공개되어 있으며 이는 클라이언트와 서버 모두를 공격하는데 사용될 수 있습니다.

취약한 서버를 공격하려면 공격자는 Git 클라이언트처럼 작동하여 푸시 동작의 일부분으로 취약한 서버에 특수하게 조작된 packfile을 전송합니다. 취약한 서버는 악성 Git 클라이언트에서 악성 packfile을 수신하여 경로 정보 처리 시path_name() 함수에 취약성을 발생시킬 수 있습니다. 일반적으로 이러한 작업에는 인증이 필요합니다. 공격자의 공격이 성공적으로 이루어지려면 이러한 인증 절차를 무사히 통과해야 합니다.

클라이언트를 공격하려면 공격자는 Git 서버에 악성 Git 리포지터리를 설치하여 아무런 의심을 하지 않는 사용자가 리포지터리를 복제하도록 속일 수 있습니다. 그 후 클라이언트는 서버에서 악성 packfile을 다운로드하게 되어 결과적으로 파일 처리 시 취약성을 발생시킬 수 있습니다.

대량의 경로 데이터 요청으로 인해 원래의 압축되지 않은 packfile은 약 2 기가바이트 가량 되어야 하지만 이는 공격자가 네트워크를 통해 수 기가바이트의 데이터를 전송해야 한다는 것을 의미하지 않습니다. packfile 내부적으로 사용하는 압축과 전송 방식 (예: SSH)에 따른 추가 압축으로 인해 총 200 메가바이트 가량의 전송된 데이터만으로도 취약성을 발생시킬 수 있습니다.

해결 방법

모든 Git 사용자는 이러한 문제를 해결하기 위해 백포트된 패치가 들어있는 업데이트된 패키지로 업그레이드하는 것이 좋습니다. 업데이트를 실행하기 전 시스템에 관련된 이전에 릴리즈된 모든 에라타가 적용되어 있는지 확인하십시오.

제품 패키지 권고
Red Hat Enterprise Linux 6 git RHSA-2016-0496
Red Hat Enterprise Linux 7 git RHSA-2016-0496
Red Hat Software Collections git19-git RHSA-2016-0497

자주하는 질문

Git 서버를 실행하고 있습니다. 이러한 경우 어떠한 취약점에 노출됩니까?

공격자가 악성 데이터를 호스팅하는 Git 리포지터리에 푸시할 수 있는 경우 취약점을 갖습니다. 이러한 과정에서 인증이 필요한 경우 공격자는 성공적으로 인증을 통과해야 합니다.

Git 클라이언트를 실행하고 있습니다. 이러한 경우 어떠한 취약점에 노출됩니까?

공격자는 취약점을 악용하기 위해 신뢰할 수 없는 또는 손상된 Git 리포지터리에서 복제하도록 속일 수 있습니다.