본문 바로가기
Security

[Security] Jenkins 'Security Advisories' 로 Jenkins 플러그인 취약점 관리하기

by gungle 2024. 7. 30.

Jenkins는 자동화된 테스트, 통합, 빌드 등을 가능하게 하는 오픈 소스 자동화 및 빌드 플랫폼이다. 그러나 Jenkins는 소프트웨어 공급망 공격에 취약한 플러그인으로 인해 공격에 노출될 수 있다. 이 글에서는 Jenkins 보안 권고 페이지를 활용하여 취약한 플러그인을 지속적으로 탐지하고 해결하는 방법을 살펴본다.

 

Jenkins 개요

Jenkins는 오픈 소스 자동화 및 빌드 플랫폼으로, 테스트, 통합, 문제, 빌드 등을 자동화할 수 있다. Jenkins는 보통 자체 프로세스에서 독립적인 애플리케이션으로 실행되며, 내장된 Java 서블릿 컨테이너/애플리케이션 서버와 함께 실행된다.

 

Jenkins 플러그인의 역할과 중요성

Jenkins 플러그인은 Jenkins의 기능을 확장하기 위해 도입되었다. 현재 커뮤니티에서 사용되는 오픈 소스 플러그인은 1,900개 이상이다. 플러그인은 외부 서비스와의 통합을 위해, 또는 테스트와 빌드를 개선하기 위해 사용된다. 인기 있는 플러그인은 거의 300,000회 다운로드되며, 이는 각 플러그인이 수백만 개의 프로젝트에 영향을 미칠 수 있음을 의미한다.

https://plugins.jenkins.io/ui/search/

 

Search Results

Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their software

plugins.jenkins.io

 

취약한 Jenkins 플러그인의 위험성

Jenkins 플러그인은 강력한 권한을 가질 수 있으며, 이는 공격자가 소프트웨어 공급망을 침투하는 데 있어 쉽게 활용할 수 있는 지점을 제공한다. 플러그인의 권한, 네트워크 접근, 코드 접근의 조합은 공격자가 취약성을 악용하여 원격 코드 실행, 데이터 유출, 횡적 이동을 가능하게 한다.

 

CVE-2022-34777 - GitLab 플러그인 사례

2022년 6월 30일에 공개된 저장된 XSS 를 활용한 사례 CVE-2022-34777 를 보면, GitLab 플러그인은 코드가 커밋되거나 머지 요청이 열리거나 업데이트될 때 GitLab이 Jenkins에서 빌드를 트리거할 수 있도록 한다. 또한 빌드 상태를 GitLab에 다시 보낼 수 있다. 이 취약성은 문제 권한을 가진 공격자가 신중하게 조작된 웹훅을 트리거하여 Jenkins 파이프라인을 탐색하는 피해자가 악성 JavaScript 페이로드에 의해 공격받게 했다.

취약한 플러그인에 대한 경고 문구

CVE-2022-34777의 취약점이 실제로 악용되는 POC(Proof of Concept) 예시에서는, 머지 요청이 웹훅을 트리거하는 모습을 볼 수 있다. 초기에는 정상적인 푸시 이벤트가 파이프라인 실행을 트리거하는 과정을 보여주지만, 이후에는 원격 악성 JavaScript 코드가 Jenkins에서 실행되도록 하는 머지 요청을 생성하는 방법을 보여준다.

CVE-2022-34777 어택 벡터

 

Jenkins 보안 권고 페이지 활용

https://www.jenkins.io/security/advisories/

Jenkins 보안 권고 페이지는 Jenkins와 플러그인의 보안 취약성을 공개하고 해결 방법을 제공하는 중요한 자원이다. 이 페이지를 활용하여 취약성을 탐지하고 해결하는 방법은 다음과 같다:

  • 보안 권고 구독: 페이지에서 제공하는 RSS 피드를 구독하여 최신 취약성 정보를 지속적으로 모니터링한다.
  • 정기적인 확인: 정기적으로 페이지를 방문하여 새로운 보안 권고 사항을 확인하고, 해당하는 플러그인이나 Jenkins 코어의 취약성을 파악한다.
  • 취약성 해결 방법 적용: 각 보안 권고에 제공된 취약성 해결 방법을 따라 플러그인과 Jenkins 코어를 업데이트하거나 패치한다.

 

취약성 탐지 및 해결 방안

Jenkins 플러그인의 취약성을 탐지하고 해결하는 방법은 다음과 같다:

  • 자동화된 취약성 검사 도구 사용: Jenkins 플러그인의 취약성을 자동으로 검사하는 도구를 사용하여 취약성을 지속적으로 모니터링하고 탐지한다.
  • 플러그인 업데이트: 발견된 취약성을 해결하기 위해 Jenkins 플러그인 및 코어를 최신 버전으로 유지한다.
  • 보안 정책 설정: 조직 내에서 사용되는 플러그인에 대한 보안 정책을 수립하고, 보안 검토를 거친 플러그인만 사용하도록 제한한다.
  • 정기적인 보안 점검: 정기적으로 Jenkins 서버와 플러그인에 대한 보안 점검을 수행하여 잠재적인 보안 취약성을 사전에 발견하고 해결한다.

 

결론

Jenkins 플러그인의 취약성을 지속적으로 탐지하고 해결하는 것은 소프트웨어 공급망 공격을 방지하는 데 매우 중요하다. Jenkins 보안 권고 페이지를 활용하여 최신 취약성 정보를 지속적으로 모니터링하고, 자동화된 도구와 보안 정책을 통해 조직의 보안을 강화할 수 있다. 이를 통해 소프트웨어 개발 라이프사이클(SDLC)의 모든 단계에서 보안을 유지하고, 잠재적인 공격으로부터 보호할 수 있다.

 

참고

How to Continuously Detect Vulnerable Jenkins Plugins to Avoid a Software Supply Chain Attack