1. 개요

- Github의 논리적 결함으로 인해 공격자가 수천 개의 리포지터리를 제어할 수 있게되는 취약점이 발견
- 공격자는 해당 결함으로 리포지터리를 악용해 공급망 공격으로 이어질 가능성이 존재

 

2. RepoJacking [1]

- Github에서는 사용자 계정마다 고유한 URL을 부여

> 사용자 이름 및 저장소 이름 변경이 자주 발생 (사명변경, 인수합병, 관리자 변경 등)

 

- 이름 변경 등으로 프로젝트의 종속성이 깨지는 것을 방지하기 위해 리다이렉션 생성
> 이름 A에서 이름 B로 변경시 새로운 URL이 생성되고, 원 URL과 연결되어 있던 모든 리포지터리들이 자동으로 새 URL과 연결
① 사용자는 계정 A 생성
② 계정 A에대한 고유한 URL 생성 (ex, hxxp://github.com/A~)
③ 사용자는 계정을 B로 변경
④ 계정 B에대한 고유한 URL 생성 (ex, hxxp://github.com/B~)

⑤ 계정 A의 리포지터리가 자동으로 계정 B로 리다이렉션

 

RepoJacking이란 공격자가 위 과정에 개입하여 이름 A를 등록해 공격자의 리포지터리에서 접근하도록 하는 공격
리포지터리를 생성하는 과정과 사용자의 이름을 변경하는 과정에서 경합 조건이 발동된다는 것이 취약점의 핵심적인 내용
① 사용자는 "A/Repo" 네임스페이스를 소유
② 사용자는 "A"의 이름을 "B"로 변경
③ "A/Repo"는 폐기처리
④ 공격자 "C"는 동시에 "Repo" 리포지터리를 생성하며, "A"로 이름을 변경하는 명령 수행
⑤ 사용자는 공격자 소유의 "A/Repo"에 접근하여 공격자가 업로드한 파일, 명령을 사용

 

※ Race Condition 공격과 유사한 공격으로 판단됨 [2][3]

- Race Condition: 두 개의 스레드가 하나의 자원을 놓고 서로 사용하려고 경쟁하는 상황
> 두 개 이상의 프로세스가 공통 자원을 병행적으로(concurrently) 읽거나 쓰는 동작을 할 때,
> 공용 데이터에 대한 접근이 어떤 순서에 따라 이루어졌는지에 따라
> 그 실행 결과가 같지 않고 달라지는 상황

- Race Condition Attack: 실행 프로세스가 임시파일을 생성할 시, 실행 중에 끼어들어 임시 파일을 목적 파일로 연결(심볼릭 링크)하여 권한 상승(setuid를 이용) 등 악용

 

3. 대응방안

① 해당 취약점을 발견한 Checkmarx는 Github에 해당 문제를 전달
> Github은 "인기 있는 저장소 네임스페이스 종료"를 도입 [4]
> Checkmarx는 모니터링을통해 우회 방법들이 발견될때마다 내용 공유를 통해 지속 대응중으로 확인됨

> Checkmarx는 RepoJacking 공격에 취약한 리포지터리를 확인하는 도구를 개발해 제공 [5]

 

② 무차별 대입 공격 및 프로젝트 탈취를 방지하기 위해 저장소에 2FA 적용
③ 엄격한 형상관리
④ 프로젝트 모니터링과 검토를 통해 취약점 조기 식별 및 조치 등

 

4. 참고

[1] https://checkmarx.com/?s=Repojacking
[2] https://iredays.tistory.com/125
[3] https://isc9511.tistory.com/120
[4] https://github.blog/2018-04-18-new-tools-for-open-source-maintainers/#popular-repository-namespace-retirement
[5] https://github.com/Checkmarx/chainjacking
[6] https://blog.aquasec.com/github-dataset-research-reveals-millions-potentially-vulnerable-to-repojacking
[7] https://thehackernews.com/2023/09/critical-github-vulnerability-exposes.html
[8] https://www.boannews.com/media/view.asp?idx=111102&page=1&kind=1
[9] https://www.boannews.com/media/view.asp?idx=121918&page=3&kind=1 

+ Recent posts