Dependabot에 버전 필드 추가, null은 안전하다는 뜻일까?

보안 대시보드에 패키지 버전을 표시하려는데 Dependabot 응답에는 null이 들어 있다. 새 버전 필드는 저장소의 어느 상태까지 보여 주는 걸까?

Dependabot에 버전 필드 추가, null은 안전하다는 뜻일까?
세 줄 요약
  • GitHub는 10월 20일 Dependabot REST 알림에 의존성 버전 정보를 추가했다.
  • lockfile에서 얻은 값은 확정 버전이지만, manifest만 있으면 버전 범위일 수 있다.
  • null·복수 버전·잘린 제약을 처리해야 하며, 이 필드만으로 배포 환경의 수정 완료를 판정할 수는 없다.

취약한 범위와 우리 저장소의 기록값이 나뉜다

Dependabot 알림을 외부 도구로 옮길 때, 취약점이 영향을 주는 버전 범위만으로는 저장소에서 어떤 버전이 발견됐는지 알기 어려웠다. 이번 GitHub 변경은 dependency.version_requirement에 Dependabot가 해당 알림에 대해 마지막으로 기록한 버전 또는 제약을 제공한다.

이제 그 값을 가져오기 위해 별도로 lockfile을 해석하거나 GraphQL의 vulnerableRequirements를 요청할 필요가 줄어든다. 다만 이름에 version이 들어간다고 항상 설치된 버전 하나를 뜻하지는 않는다.

REST 응답에는 취약 범위를 나타내는 security_vulnerability.vulnerable_version_range와 최초 수정 버전 정보인 first_patched_version도 있다. 저장소에서 기록한 값, 알려진 취약 범위, 수정 버전은 서로 다른 질문에 답한다.

lockfile이 있느냐에 따라 값의 의미가 달라진다

같은 필드라도 Dependabot가 의존성을 발견한 경로에 따라 고정 버전 또는 선언된 조건이 들어간다.

의존성을 얻은 경로version_requirement의 의미
lockfile의존성을 해석한 결과로 확정된 버전이다.
lockfile 없는 manifestmanifest에 선언된 버전 또는 버전 제약이다.
Dependency submission API빌드 도구가 제출한 확정 버전이다.

의존성 그래프는 저장소의 manifest·lockfile과 별도로 제출된 의존성 정보를 모은다. 따라서 대시보드 열 이름을 무조건 ‘현재 설치 버전’으로 붙이면 선언된 범위까지 설치 결과로 오해하기 쉽다. ‘기록된 버전·제약’처럼 값의 성격을 드러내는 이름이 적절하다.

null은 값이 없다는 뜻이며, 버전 하나가 전부는 아니다

GitHub는 값을 제공할 수 없을 때 null을 반환한다고 설명한다. 취약점이 없거나 수정됐다는 상태값이 아니다. 한 알림이 여러 취약 버전을 포함하면 필드에는 기록값 하나가 들어가므로, 다른 취약 버전까지 모두 보여 준다고 해석해서도 안 된다. 긴 버전 제약은 잘릴 수 있다.

운영 서버의 현재 상태와도 구분해야 한다. Dependabot 알림 문서는 기본 브랜치를 검사하며 새 취약점 정보나 의존성 그래프 변화에 따라 알림을 만든다고 설명한다. 저장소의 기록값을 읽는 기능을 실행 중인 서버의 패키지를 조회하는 기능으로 바꿔 읽을 수는 없다.

예를 들어 보안 대시보드가 null을 빈 문자열로 바꾼 뒤 ‘영향 없음’으로 표시하면, 알 수 없는 값을 안전하다는 결론으로 바꾸는 셈이다. 값이 없다는 상태를 그대로 보존하고, 알림의 state와 구분해 표시해야 한다.

REST와 웹훅 모두에서 받을 수 있다

새 필드는 알림 단건 조회와 저장소·조직·엔터프라이즈 목록, dependabot_alert 웹훅에 포함된다. github.com과 데이터 레지던시를 사용하는 GitHub Enterprise Cloud에서 제공되며, GitHub Enterprise Server에는 3.24에 포함될 예정이다.

연동 권한은 여전히 필요하다. 웹훅 문서에 따르면 GitHub App이 이 이벤트를 구독하려면 저장소의 Dependabot alerts에 최소 읽기 권한이 있어야 한다.

대시보드에 적용한다면 패키지명·manifest_path·기록값·알림 상태를 함께 표시하는 구성이 유용하다. 같은 패키지 이름이라도 어느 파일에서 나온 값인지 확인할 수 있고, 버전 문자열과 처리 상태를 혼동하지 않게 된다. 수정 확인은 해당 의존성의 변경과 실제 배포 확인으로 이어져야 한다.

자주 묻는 질문

version_requirement가 null이면 알림을 닫아도 되는가?

아니다. null은 제공할 값이 없다는 뜻이다. 알림의 취약점 정보와 영향을 받는 파일을 확인해야 한다.

필드에 나온 버전 하나만 고치면 모든 영향이 사라지는가?

한 알림이 여러 취약 버전을 포함할 수 있다. 기록값 하나가 전체를 대표하지 않을 수 있으므로 관련 의존성을 확인해야 한다.

새 필드는 알림을 외부 도구로 옮길 때 필요한 조회를 줄인다. 그 값이 어디서 왔는지 보존해야 연동 결과도 정확해진다.