[build.gradle] springdoc과 springweb간의 의존성 문제

Eunbi Lee·2024년 4월 25일

MDP

목록 보기
5/6
post-thumbnail

🖍️ 세 줄 요약

  1. 특정 springdoc 버전이 내부적으로 spring-web 버전에 대한 의존성을 가지고 있다.
  2. 즉, springdoc의 해당 버전을 사용하면 취약한 spring-web 버전을 간접적으로 사용하게 되어 보안 리스크가 발생한다.
  3. 따라서, 보안적으로 취약하지 않은 spring-web버전을 관리하는 spring-boot의 버전을 업데이트한다.

즉, spring boot를 3.2.4 이상으로 업데이트하면 해결된다!

그런데, springdocspring-web을 간접적으로 참고하고 있다는 내용은 어떤 뜻일까?

이번 시간에는 위 오류에 대한 배경 및 해결 과정에 대해 작성해보도록 하겠다.

배경

현재 내가 진행 중인 프로젝트 MDP(My Dream Partner)는 프론트엔드와 협업을 진행 중이다.

따라서, 문서화의 필요성을 느꼈고 해결책으로 Swagger UI를 도입하기로 결정했다.

그리고, swagger ui를 사용하기 위해 build.gradle에 다음과 같이 springdocs의 버전을 주입했더니..?

implementation group: 'org.springdoc', name: 'springdoc-openapi-starter-webmvc-ui', version: '2.1.0'

Provides transitive vulnerable dependency maven:org.springframework:spring-web:6.1.4 CVE-2024-22259 8.1 Vulnerability with High severity found Results powered by Checkmarx(c)

라는 오류를 마주하게 되었다.

원인

springdoc-openui-starter-webmvc-ui 라이브러리가 spring-web의 6.1.4 버전을 사용하고 있으며, 이 버전이 고위험도(CVE-2024-22259)의 보안 취약점을 포함하고 있기 때문이었다.

CVE-2024-22259는 공개된 보안 취약점의 고유 식별자로, 특정 버전의 spring-web 라이브러리에서 발견된 취약점을 나타내는 것이었다.

이때, 경고문에 포함된 High severity는 해당 취약점이 심각한 위험을 초래할 수 있음을 나타내고 있었다.

해결

가정 1

springdoc의 최신 버전을 찾아서, 새로 의존성 주입을 해보았다.

공식 docs가 아닌 해당 사이트를 참고했다.

  • 구 버전부터 최신버전까지 모든 버전에 대한 정보와 함께, 어떤 버전이 보안 취약점을 가지고 있는지까지 안내해주어 유용한 사이트라고 생각되었다 🤸‍♀️

하지만, 여전히 경고문은 사라지지 않고 남아있었다.

가정 2

spring-web의 특정 버전을 확인하고 싶어서, Intellj의 왼쪽 사이드바에 있는 External libraries를 찾아보고 있던 와중..

springdocs에 대한 의존성을 확인할 수 있었으며, 버전이 2.2.21으로 명시된 것을 확인하였다.

따라서, 해당 버전에 맞게 의존성을 주입해보았더니..

그리고, 감쪽같이 External Libraries에 명시되었던 swagger 관련 외부 라이브러리 의존성은 사라져있었다.

하지만, 실행 시 아래와 같이 해당 버전은 존재하지 않는다.는 오류를 마주할 수 있었다.

가정 3

그렇다면, spring-web이 문제가 아니었나?라는 궁금증을 가지고, 서치하던 중 관련 내용을 담고 있는 블로그를 보게 되었다.

종속성 충돌 및 버전 업그레이드

  1. build.gradle에 추가한 여러 의존성 중 하나는 spring-web에 의존하는 springdocs이다.
  2. spring-web의 특정 버전에 보안 취약점이 발견되었다면, 의존하는 springdocs 버전에서 동일하게 보안 취약성이 발생한다.
  3. 이때 spring-boot는 문제가 있는 spring-web 버전을 참고하고 있다.

즉, spring-web의 상위호환인 spring-boot가 문제가 있는 버전을 관리하는 한, 문제는 해결되지 않았던 것이다.

결과

따라서, 이러한 문제가 있는 spring-web을 관리하는 spring-boot의 버전을 업데이트함으로써 해결할 수 있었다.

마치며

이후에도 비슷한 오류를 직면했는데, 엄연히 다른 내용이므로 포스팅을 분리하여 작성하기로 마음먹었다.

그럼 다음 포스팅도 작성하러 얼른 가봐야겠다!

profile
안녕하세요, 개발자 비비입니다.

0개의 댓글