dependabot으로 종속성 취약점 관리하기

Yaminyam·2022년 5월 10일
5

시작하기

Github 에서는 Security 탭에서 다양한 보안 기능들을 제공해준다
그 중 쉽고 편하게 사용할 수 있는 dependabot에 대해 소개한다

dependabot은 repository의 종속성들을 확인해 보안 이슈가 발생하는 것을 관리해주는 도구이다
프로젝트에 사용되는 dependencies 중 보안 이슈가 발생한 패키지에 관한 정보를 알려주고 자동으로 버전을 올려주는 작업까지 수행 할 수 있다

https://github.com/dependabot

repository의 Setting의 Code security and analysis 탭에서 쉽게 Enable 가능하다

사용하기

dependabot이 문제점을 발견하면 Security 탭의 Dependabot alerts에 issue를 추가해 주며 repository 메인 화면에서도 다음과 같이 알림창을 띄워주는 것을 확인 할 수 있다

생성된 issue를 확인하면 어떠한 종속성 패키지의 어떤버전에서 보안 이슈가 발생했으며 그 보안 이슈의 위험성 및 어떠한 종류인지 상세하게 설명해 준다
CWE에 등록된 보안 이슈들을 기준으로 명세되며 어떠한 버전으로 업그레이드 해야하는지 알려준다
버튼 하나로 보안 이슈가 발생하지 않는 패키지의 버전 업그레이드 PR을 생성해준다

예외처리

하위 의존성

버튼 하나만 누르면 모든 의존성 보안 이슈를 처리해주는것처럼 설명하였지만 생각보다 잘작동하지 않는 경우가 많이 발생했다

가장 흔한 케이스는 의존성의 의존성에서 문제가 발생했을 경우이다
예를 들어 아래 사진과 같이 uglify-js에서 보안 이슈가 발생해 버전을 업그레이드 하려고 하였으나 jade에서 uglify-js의 2.2.5버전을 사용하고 있으므로 업그레이드를 할 수 없다고 한다

dependabot은 보안 이슈가 발생한 패키지의 버전만을 업그레이드 하려고 하고 이를 의존성으로 가지고 있는 패키지에서는 업그레이드 했을때 이 보안성 이슈가 해결될지 안될지를 알 수 없으므로 jade를 업그레이드 해주지는 않는다

이와 같은 경우에는 보안 이슈가 발생한 uglify-js를 의존성으로 가지고 있는 jade의 버전을 수동으로 업그레이드 해서 해결해야한다

하지만 최신버전의 상위 패키지에서도 이 문제가 해결되지 않은 경우에는 직접 상위패키지의 repository에 방문하여 issue를 요청해야한다

꾸준히 관리되고 있는 패키지라면 금방 관리자가 이를 캐치하고 반영하여 새로운 버전을 배포해 주겠지만 관리가 되지 않는 패키지라면 해결하기 힘들 수 있다

아래 사진과 같이 inline-css 패키지에서 사용중인 cheerio 패키지에서 보안 이슈가 발생했지만 의존성 update를 해주지 않아 직접 업그레이드를 한 PR를 요청했는데도 아직까지 아무런 소식이 없다

해결이 안된 보안 이슈

최근에 처음 경험한 경우인데 다음과 같이 보안 이슈가 발생했으나 업그레이드 할 수 있는 패치 버전이 없다
그런데 이 문제와 같은 경우엔 특수한 경우인데 보안 이슈가 발생하였으나 그냥 수정이 안된것이 아닌 해당 보안 이슈자체가 보안 이슈가 아니라는 의견이 있기때문이다
아직까지 Patched version이 존재하지 않는 이슈는 처음봐서 이게 해당 논란이 있기때문에 이슈가 생성된 것인지 아니면 원래 Patched version이 존재하지 않아도 이슈가 생성되는지는 확실히 확인하지 못했다

마치며

많은 프로젝트에서 신경쓰지 않는 부분이라고 생각을 했으나 보안 이슈가 발생한 패키지의 repository의 issue를 살펴보면 바로 해당 보안 이슈가 관련된 issue들이 만들어져 있었다

생각보다 많은 곳들에서 관심을 가지고 관리하고 있는 부분이었고 특히 규모가 굉장히 큰 microsoft, angular-eslint와 같이 확실히 보안 이슈가 발생했을때 피해가 클 수 있는 프로젝트들에서 많이들 해결을 하고 있는것 같았다

이와 같은 문제를 볼 때 현재는 필요한 패키지를 아무거나 다운받아 사용하고 있지만 현업에서 적용하게 된다면 보안 이슈가 발생하더라도 바로 해결 할 수 있도록 의존성을 구축해야겠다는 생각이 들었다
의존성때문에 본인의 프로젝트가 중단되고 언제 복구 될 지 모른다는 것은 정말 끔찍한 일이 될 것이다

0개의 댓글