다음을 통해 공유


종속성 검사 설정

Azure DevOps용 GitHub Advanced Security의 종속성 검사는 소스 코드에 사용되는 오픈 소스 구성 요소를 검색하고 관련된 취약성이 있는지 감지합니다. 오픈 소스 구성 요소에서 발견된 취약성은 경고로 플래그가 지정됩니다. Azure DevOps용 GitHub 고급 보안이 필요하거나 독립 실행형 환경을 사용하는 경우 Azure DevOps용 GitHub Code Security를 사용하도록 설정해야 합니다.

Azure DevOps용 GitHub Advanced Security는 Azure Repos에서 작동합니다. GitHub 리포지토리에서 GitHub Advanced Security를 사용하려면 GitHub Advanced Security를 참조하세요.

필수 조건

카테고리 요구 사항
권한 - 리포지토리에 대한 모든 경고 요약을 보려면 기여자 권한이 필요합니다.
- 고급 보안에서 경고를 해제하려면 : 프로젝트 관리자 권한입니다.
- 고급 보안에서 사용 권한을 관리하려면: 프로젝트 컬렉션 관리자 그룹 또는 고급 보안의 구성원: 허용으로 설정된 설정 권한을 관리합니다.

고급 보안 권한에 대한 자세한 내용은 고급 보안 권한 관리를 참조하세요.

종속성 검사에 대하여

종속성 검사는 코드가 의존하는 취약한 것으로 확인된 모든 오픈 소스 구성 요소(직접 또는 전이적)에 대한 경고를 생성합니다. 직접 취약성은 코드에서 직접 사용하는 라이브러리입니다. 전이적 종속성은 직접 종속성이 사용하는 라이브러리 또는 기타 소프트웨어입니다.

종속성 검사 탐지에 대해 알아보기

구성 요소의 새 스냅샷은 리포지토리에 대한 종속성 그래프 변경될 때마다 그리고 종속성 검사 태스크가 포함된 파이프라인이 실행된 후에 저장됩니다.

사용 중 감지된 모든 취약한 구성 요소에 대해 구성 요소 및 취약성이 빌드 로그에 나열되고 고급 보안 탭에 경고로 표시됩니다. GitHub에서 검토하고 GitHub 권고 데이터베이스추가된 권고만 종속성 검사 경고를 만듭니다. 빌드 로그에는 추가 조사를 위해 개별 경고에 대한 링크가 포함되어 있습니다. 경고 세부 정보에 대한 자세한 내용은 종속성 검사 경고 수정을 참조하세요.

빌드 로그에는 검색된 각 취약성에 대한 기본 정보도 포함되어 있습니다. 이러한 세부 정보에는 심각도, 영향을 받는 구성 요소, 취약성 제목 및 관련 CVE가 포함됩니다.

종속성 검사 빌드 출력의 스크린샷

지원되는 구성 요소 에코시스템 및 버전 목록은 지원되는 패키지 에코시스템을 참조 하세요.

종속성 검사 경고에 대해 알아보기

Azure DevOps의 리포지토리에 있는 고급 보안 탭은 기본적으로 종속성 검사 경고를 표시하는 보안 경고를 볼 수 있는 허브입니다. 분기, 파이프라인, 패키지 및 심각도별로 필터링할 수 있습니다. 수정 지침을 포함하여 자세한 내용은 경고로 선택할 수 있습니다. 현재 경고 허브는 PR 브랜치에서 검사 완료에 대한 경고를 표시하지 않습니다.

리포지토리에서 취약한 패키지가 검색되면 종속성 검사 경고를 수정하려면 일반적으로 더 높은 패키지 버전으로 업그레이드하거나 잘못된 패키지를 제거해야 합니다. 이 조언은 직접 및 전이적(또는 간접) 종속성 모두에 적합합니다. 고급 보안 탭의 기본 보기는 리포지토리에 대한 기본 분기 대한 활성 경고입니다.

파이프라인 또는 분기의 이름이 바뀐 경우 결과에 영향을 주지 않습니다. 새 이름이 표시되기까지 최대 24시간이 걸릴 수 있습니다.

리포지토리에 대한 종속성 검사 경고 보기 스크린샷

종속성 검사 작업이 설치된 파이프라인에 대한 최신 빌드에서 취약한 구성 요소가 더 이상 검색되지 않을 때 경고 상태가 자동으로 업데이트 Closed 됩니다. 해결된 경고를 보려면 주 도구 모음에서 State 필터를 활용하고 .를 선택합니다 Closed.

닫힌 종속성 검사 경고 보기 스크린샷

리포지토리에 대한 고급 보안을 해제하면 고급 보안 탭 및 빌드 작업의 결과에 액세스할 수 없게 됩니다. 빌드 작업이 실패하지는 않지만 고급 보안을 사용하지 않도록 설정된 상태에서 빌드의 결과가 작업과 함께 실행되며 숨겨지고 유지되지 않습니다.

경고 세부 정보

특정 경고 및 수정 지침을 클릭하여 경고에 대한 세부 정보를 자세히 살펴볼 수도 있습니다.

종속성 검사 경고에 대한 세부 정보를 보여 주는 스크린샷

섹션 설명
추천 권장 사항 텍스트는 취약성 데이터 공급자인 GitHub 자문 데이터베이스에서 직접 제공됩니다. 일반적으로 이 지침에서는 식별된 구성 요소를 무적 버전으로 업그레이드하는 것이 좋습니다.
위치 위치 섹션에서는 종속성 검사 태스크가 사용 중인 취약한 구성 요소를 검색하는 경로를 자세히 설명합니다. 기본 빌드 검사에서 원본의 커밋된 파일로 파일을 확인할 수 있는 경우 위치 카드는 클릭 가능한 링크로 나타납니다. 파일이 빌드의 일부로 생성된 경우(예: 빌드 아티팩트) 링크를 클릭할 수 없습니다. 빌드 로그를 검토하여 구성 요소가 빌드에 도입된 방법을 더 잘 이해합니다.
설명 설명은 GitHub 권고 설명에 의해 제공됩니다.

탐지

검색 탭 아래에 나열된 파이프라인은 취약한 구성 요소가 발견된 파이프라인입니다. 각 행은 영향을 받는 파이프라인의 최신 빌드와 패키지가 처음 도입된 날짜를 자세히 설명합니다. 취약한 패키지가 일부 파이프라인에서 수정되었지만 전부는 아닌 경우 부분적으로 고정된 행이 표시됩니다.

해결책 없는 경고에 대한 종속성 스캔 탐지 화면 스크린샷

경고가 해결되면 경고가 자동으로 상태로 이동하고 Closed 검색 탭 아래의 최신 실행 파이프라인에 녹색 확인 표시가 표시됩니다. 즉, 업데이트된 구성 요소가 포함된 코드가 해당 파이프라인에서 실행되었음을 의미합니다.

경고용 종속성 검색 탐지 보기 스크린샷

심각도

GitHub 권고 데이터베이스는 CVSS 점수를 제공하며, 이 점수는 다음 지침을 통해 경고에 대해 낮음, 중간, 높음 또는 위험 심각도로 변환됩니다.

CVSS 점수 심각도
1.0 < 점수 < 4.0 낮음
4.0 < 점수 < 7.0 중간
7.0 < 점수 < 9.0 높음
점수 >= 9.0 위험

세부 정보 찾기

일반적으로 세부 정보 찾기에서 취약한 패키지와 루트 종속성이라는 두 섹션이 있습니다. 취약한 패키지는 잠재적으로 취약한 구성 요소입니다. 루트 종속성 섹션에는 취약성으로 이어지는 종속성 체인을 담당하는 최상위 구성 요소가 포함되어 있습니다.

취약한 패키지가 직접 종속성으로만 참조되는 경우 "취약한 패키지" 섹션만 표시됩니다.

취약한 패키지가 직접 및 전이적 종속성으로 참조되는 경우 패키지는 "취약한 패키지" 및 "루트 종속성" 섹션 모두에 표시됩니다.

취약한 패키지가 전이적 종속성으로만 참조되는 경우 패키지는 "취약한 패키지" 섹션에 표시되고 취약한 패키지를 참조하는 루트 종속성은 "루트 종속성" 섹션에 표시됩니다.

종속성 검사 경고 관리

리포지토리에 대한 경고 보기

기본적으로 경고 페이지에는 리포지토리의 기본 분기 대한 종속성 검사 결과가 표시됩니다.

경고의 상태는 경고가 다른 분기 및 파이프라인에 있더라도 기본 분기 및 최신 실행 파이프라인의 상태를 반영합니다.

종속성 검사 경고 수정

직접 종속성은 리포지토리에 있는 구성 요소입니다. 전이적 또는 간접 종속성은 직접 종속성에서 사용되는 구성 요소입니다. 직접 또는 전이적 종속성에서 취약성이 발견되었는지 여부에 관계없이 프로젝트는 여전히 취약합니다.

취약한 전이적 종속성 수정은 일반적으로 식별된 각 직접 종속성에 사용되는 취약한 구성 요소의 버전을 명시적으로 재정의하는 형태를 취합니다. 루트 종속성이 취약한 구성 요소의 사용을 안전한 버전으로 업그레이드하면 여러 개별 재정의가 아닌 각 루트 종속성을 업그레이드할 수 있습니다.

Yarn/Npm에 대한 종속성 업데이트

가설적으로 이 패키지에 두 가지 취약성이 있다고 가정해 보겠습니다. 하나는 직접 종속성을 위한 axios것이고, 하나는 전이적 종속성(간접 종속성 또는 종속성의 종속성이라고도 함)을 위한 acorn것입니다.

{
 "name": "my-package",
 "version": "1.0.0",
 "dependencies": {
   "axios": "0.18.0",
   "eslint": "5.16.0",
 }
}

현재 버전 axios 에는 v0.18.1 이상으로 업데이트할 것을 권장하는 DoS(서비스 거부) 취약성 이 있습니다. 직접 종속성이므로 사용하는 버전을 axios 제어할 수 있습니다. 끌어오는 버전을 axios 업데이트하기만 하면 됩니다. 업데이트 package.json 된 내용은 다음과 유사합니다.

{
  "name": "my-package",
  "version": "1.0.0",
  "dependencies": {
    "axios": "0.19.2",
    "eslint": "5.16.0",
  }
}

이제 eslint에 표시된 package.json의 버전은 정규 표현식 서비스 거부('Re-DoS') 취약성이 있는 acorn의 버전에 따라 달라지며, 이를 해결하기 위해 5.7.4, 6.4.1, 7.1.1 버전 이상으로 업데이트할 것을 권장합니다. 종속성 검사 도구에서 경고를 받게 되면, 그 경고에는 취약한 종속성을 포함하고 있는 루트 종속성이 무엇인지 알려야 합니다.

Yarn을 사용하는 경우 전체 종속성 체인을 찾는 이유를 yarn을 사용할 수 있습니다.

> $ yarn why acorn
 yarn why v1.22.4
 [1/4] Why do we have the module "acorn"...?
 [2/4] Initialising dependency graph...
 [3/4] Finding dependency...
 [4/4] Calculating file sizes...
 => Found "acorn@6.4.0"
 info Reasons this module exists
   - "eslint#espree" depends on it
   - Hoisted from "eslint#espree#acorn"
 info Disk size without dependencies: "1.09MB"
 info Disk size with unique dependencies: "1.09MB"
 info Disk size with transitive dependencies: "1.09MB"
 info Number of shared dependencies: 0
 Done in 0.30s.

전체 종속성 체인은 .입니다eslint>espree>acorn. 종속성 체인을 알게 되면 Yarn의 또 다른 기능인 선택적 종속성 해결을 사용하여 acorn의 사용 버전을 재정의할 수 있습니다.

해결 방법 필드를 package.json 사용하여 버전 재정의를 정의합니다. 패키지를 재정의하는 세 가지 방법이 최악에서 최고로의 순서로 제시됩니다.

{
  "name": "yarn-resolutions",
  "version": "1.0.0",
  "license": "MIT",
  "dependencies": {
    "axios": "0.19.2",
    "eslint": "5.16.0"
  },
  "resolutions": {
    // DO NOT USE!
    "**/acorn": "6.4.1",
    // BETTER
    "eslint/**/acorn": "6.4.1",
    // BEST
    "eslint/espree/acorn": "6.4.1"
  }
}

**/acorn 패턴을 사용하면 모든 종속성에서 도토리 패키지의 모든 사용이 재정의됩니다. 위험하며 런타임에 중단되므로 Yarn v2에서 제거했습니다.

eslint/**/acorn 패턴을 사용하면 eslint 패키지와 그에 의존하는 패키지에서 acorn 패키지의 모든 사용이 재정의됩니다. 모든 종속성에 대해 패키지를 재정의하는 것보다 안전하지만 패키지에 대한 종속성 그래프 크면 여전히 몇 가지 위험이 있습니다. 이 패턴은 취약한 패키지를 사용하는 하위 패키지가 많고 개별 서브패키지에 대한 재정의를 정의하는 것이 실용적이지 않은 경우에 권장됩니다.

eslint/espree/acorn 패턴을 사용하면 acorn 패키지 내에서 espree 패키지의 eslint 사용만 재정의됩니다. 특히 취약한 종속성 체인을 대상으로 하며 패키지 버전을 재정의하는 권장 방법입니다.

npm

npm 8.3 이상을 사용하는 경우 package.json의 overrides 필드를 사용할 수 있습니다.

전이적 종속성을 구체적으로 변경해야 할 필요가 있을 경우, 오버라이드를 추가하세요. 예를 들어, 알려진 보안 문제가 있는 종속성의 버전을 재정의하거나 기존 종속성을 포크로 대체하거나, 동일한 버전의 패키지가 모든 곳에서 사용되도록 해야 할 수 있습니다.

{
  "name": "npm-overrides",
  "version": "1.0.0",
  "license": "MIT",
  "dependencies": {
    "axios": "0.19.2",
    "eslint": "5.16.0"
  },
   "overrides":{
       "eslint": {
        "espree": {
          "acorn": "6.4.1"
        }
    }
   }
}

표시된 재정의 예제는 "acorn 패키지 안의 espree 패키지에서 eslint 사용량만 재정의"라고 말하는 npm의 방식을 보여줍니다. 이는 특히 취약한 종속성 체인을 대상으로 하며, 패키지 버전을 재정의하는 권장 방법입니다. 재정의는 npm의 네이티브 기능입니다. 종속성 트리의 패키지를 다른 버전 또는 다른 패키지로 완전히 바꾸는 방법을 제공합니다.

재정의를 설정한 후 package-lock.jsonnode_modules을 삭제하고 npm install을 다시 실행해야 합니다.

직접적으로 의존하는 패키지에 대해 둘 다 정확히 동일한 사양을 공유하지 않으면 재정의를 설정하지 않을 수도 있습니다. 예를 들어 axios: "0.18.0"이(가) 취약하다고 할 때, 우리는 axios: "0.19.2"으로 업그레이드하려고 합니다. 재정의를 사용하는 대신 종속성 버전을 직접 변경합니다.

{
  "name": "npm-overrides",
  "version": "1.0.0",
  "license": "MIT",
  "dependencies": {
    "axios": "0.18.0"
  },
  "overrides": {
    // BAD, will throw an EOVERRIDE error
    // "axios": "0.19.2",
  }
}

재정의를 지정하지 않고 종속성의 버전을 업데이트합니다.

{
  "name": "npm-overrides",
  "version": "1.0.0",
  "license": "MIT",
  "dependencies": {
    "axios": "0.19.2"
  }
}

Maven에 대한 종속성 업데이트

종속성 확인 메커니즘은 Yarn에서 사용되는 메커니즘만큼 정교하지 않습니다. 따라서 프로젝트에서 단일 버전의 종속성만 가질 수 있습니다. 이 문제를 해결하기 위해 Maven은 "가장 가까운 승리" 알고리즘을 사용합니다. 즉, 종속성 트리에서 프로젝트에 가장 가까운 종속성 버전을 사용합니다.

예를 들어 다음과 같은 종속성 그래프 있습니다.

your-project --- A:1.0.0 --- B:2.0.0
      \
       \__ B:1.0.0

your-projectA:1.0.0에 의존하고, 이는 다시 B:2.0.0에 의존하지만, 귀하의 프로젝트에는 B:1.0.0에 대한 직접적인 종속성도 있습니다. 따라서 종속성 그래프에는 두 가지 종속성 B 버전이 있지만, 종속성 B 버전 1.0.0은 프로젝트에 "가장 가깝기 때문에" 우선합니다.

경우에 따라 버전이 호환되는 경우 이 시나리오가 작동할 수 있습니다. 그러나 A:1.0.0 버전 2.0.0 에서만 사용할 수 있는 B의 일부 기능에 따라 이 동작이 작동하지 않습니다. 최악의 경우 이 프로젝트는 여전히 컴파일되지만 런타임에 실패할 수 있습니다.

실제 예제를 살펴보겠습니다.

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.microsoft.customer360</groupId>
  <artifactId>maven-dependencies</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>maven-dependencies</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>com.fasterxml.jackson.jaxrs</groupId>
      <artifactId>jackson-jaxrs-json-provider</artifactId>
      <version>2.10.3</version>
    </dependency>
</project>

com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider의 버전이, com.fasterxml.jackson.core:jackson-databind의 버전에 의존하는데, 해당 버전에는 신뢰할 수 없는 데이터 역직렬화 취약성이 있습니다.

Maven 종속성 플러그 인사용하여 이 종속성을 확인할 수 있습니다. 이 경우 mvn dependency:tree -Dincludes=com.fasterxml.jackson.core:jackson-databind를 실행하면 다음과 같은 출력이 나타납니다.

> $ mvn dependency:tree -Dincludes=com.fasterxml.jackson.core:jackson-databind
 [INFO] Scanning for projects...
 [INFO]
 [INFO] ------------< com.microsoft.customer360:maven-dependencies >------------
 [INFO] Building maven-dependencies 1.0-SNAPSHOT
 [INFO] --------------------------------[ jar ]---------------------------------
 [INFO]
 [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ maven-dependencies ---
 [INFO] com.microsoft.customer360:maven-dependencies:jar:1.0-SNAPSHOT
 [INFO] \- com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:jar:2.10.3:compile
 [INFO]    \- com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:jar:2.10.3:compile
 [INFO]       \- com.fasterxml.jackson.core:jackson-databind:jar:2.10.3:compile
 [INFO] ------------------------------------------------------------------------
 [INFO] BUILD SUCCESS
 [INFO] ------------------------------------------------------------------------
 [INFO] Total time:  0.928 s
 [INFO] Finished at: 2020-04-27T14:30:55+02:00
 [INFO] ------------------------------------------------------------------------

먼저 취약한 버전에 의존하지 않는 새 버전 com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-providercom.fasterxml.jackson.core:jackson-databind이 있는지 확인합니다. 그렇다면 com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider을 업그레이드하고 그곳에서 멈출 수 있습니다. 그렇지 않은 경우 .의 버전을 재정의합니다 com.fasterxml.jackson.core:jackson-databind.

코드 조각에 표시된 것처럼 Maven을 사용할 때 "가장 가까운 항목이 우선한다"는 원칙에 따라, 해결책은 com.fasterxml.jackson.core:jackson-databind에 직접 종속성을 추가하여 취약성을 수정하는 것입니다.

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.microsoft.customer360</groupId>
  <artifactId>maven-dependencies</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>maven-dependencies</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>com.fasterxml.jackson.jaxrs</groupId>
      <artifactId>jackson-jaxrs-json-provider</artifactId>
      <version>2.10.3</version>
    </dependency>
    <!-- Dependency resolutions -->
    <!-- jackson-jaxrs-json-provider -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.10.4</version>
    </dependency>
  </dependencies>
</project>

mvn dependency:tree -Dincludes=com.fasterxml.jackson.core:jackson-databind을 다시 실행하여 해결책이 작동하는지 확인할 수 있습니다.

$ mvn dependency:tree -Dincludes=com.fasterxml.jackson.core:jackson-databind
[INFO] Scanning for projects...
[INFO]
[INFO] ------------< com.microsoft.customer360:maven-dependencies >------------
[INFO] Building maven-dependencies 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ maven-dependencies ---
[INFO] com.microsoft.customer360:maven-dependencies:jar:1.0-SNAPSHOT
[INFO] \- com.fasterxml.jackson.core:jackson-databind:jar:2.9.10.4:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.827 s
[INFO] Finished at: 2020-04-27T14:32:42+02:00
[INFO] ------------------------------------------------------------------------

나중에 오는 모든 사용자가 종속성이 있는 이유를 알 수 있도록 종속성 확인 근처에 주석을 추가하는 것이 좋습니다. 루트 종속성이 새 버전을 사용하면 제거할 수 있습니다. 그렇지 않으면 종속성을 누적합니다.

실제 프로젝트에서 종속성을 가능한 한 높은 체인에 추가합니다. 예를 들어 모든 프로젝트 POM 파일에 개별적으로 추가하는 대신 부모 POM 파일에 해결 방법을 추가할 수 있습니다.

NuGet에 대한 종속성 업데이트

NuGet에서 사용되는 종속성 확인 알고리즘은 Maven과 유사합니다. 즉, 단일 버전의 종속성만 사용할 수 있습니다. 그러나 NuGet은 종속성 버전을 고정하지 않습니다.

예를 들어 종속성이 <PackageReference Include="A" Version="1.2.3" />있는 경우 이 패키지가 동일한 것으로 = 1.2.3예상할 수 있지만 실제로는 의미합니다 >= 1.2.3. 정확한 버전을 고정하려면 Version="[1.2.3]" 을 사용해야 합니다. 자세한 내용은 NuGet 버전 범위 설명서를 참조하세요.

NuGet은 기본 범위 동작 외에도 적용 가능한 가장 낮은 버전을 복원하여 범위를 충족합니다. 이 동작은 대부분의 경우 범위를 정의해야 한다는 것을 의미합니다.

종속성이 Microsoft.AspNetCore.App있는 이 샘플 프로젝트를 살펴보겠습니다.

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <RootNamespace>NuGet.Dependencies</RootNamespace>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.14" />
  </ItemGroup>
</Project>

RCE(원격 코드 실행) 취약성Microsoft.AspNetCore.Http.Connections취약한 버전 에 따라 달라집니다.

먼저 Microsoft.AspNetCore.App의 업데이트된 버전이 최신 버전의 Microsoft.AspNetCore.Http.Connections에 의존하는지 확인해야 합니다. 그렇다면 Microsoft.AspNetCore.App을(를) 업그레이드하고 여기에서 멈출 수 있습니다. 그렇지 않으면 Microsoft.AspNetCore.Http.Connections에 의존하는 버전을 재정의해야 합니다.

NuGet에는 yarn의 why나 mvn의 dependency:tree와 같은 기능이 내장되어 있지 않으므로, 종속성 트리를 보는 가장 쉬운 방법은 종종 nuget.org를 방문하는 것입니다. NuGet 페이지를 Microsoft.AspNetCore.App 방문하면 그것이 Microsoft.AspNetCore.Http.Connectionsversion >= 1.0.4 && < 1.1.0에 종속성이 있다는 것을 볼 수 있습니다. 또는 NuGet 버전 범위에서 대표적인 구문은 [1.0.4,1.1.0).

RCE 취약성이 Microsoft.AspNetCore.Http.Connections에서 수정되었으므로, 버전 범위를 1.0.15로 변경해야 합니다[1.0.15, 1.1.0).

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <RootNamespace>NuGet.Dependencies</RootNamespace>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" Version="2.2.8" />
  </ItemGroup>

  <ItemGroup Label="Dependency Resolutions">
    <!-- Microsoft.AspNetCore.App -->
    <PackageReference Include="Microsoft.AspNetCore.Http.Connections" Version="[1.0.15,1.1.0)" />
  </ItemGroup>
</Project>

나중에 오는 모든 사용자가 종속성이 있는 이유를 알 수 있도록 종속성 확인 근처에 주석을 추가하는 것이 좋습니다. 루트 종속성이 새 버전을 사용하면 제거할 수 있습니다. 그렇지 않으면 종속성을 누적합니다.

사용할 수 있는 수정 사항이 없으면 어떻게 해야 하나요?

알려진 수정 사항을 사용할 수 없는 경우 업그레이드된 구성 요소를 사용할 수 있을 때까지 다음 옵션을 다른 수정 방법으로 사용할 수 있습니다.

  • 구성 요소 사용을 중지하고 코드에서 제거합니다. 종속성 검사 작업이 설치된 다음 빌드 시 이 제거가 검색됩니다.
  • 구성 요소 자체에 대한 수정 사항을 적용합니다. 조직에 오픈 소스 기여에 대한 특정 지침이 있는 경우 해당 지침을 따르세요.
  • 경고를 해제합니다. 그러나 알려진 수정 사항이 없는 경고는 여전히 조직에 보안 위협을 가할 수 있습니다. 알려진 수정 사항이 없으므로 경고를 해제하지 않는 것이 좋습니다.

종속성 검사 경고 해제

경고를 해제하려면 다음 단계를 수행합니다.

  1. 닫을 경고로 이동하여 선택합니다.

  2. 경고 닫기 드롭다운을 선택하세요.

  3. 아직 선택하지 않은 경우 닫는 이유로 허용된 위험 또는 가양성을 선택합니다.

  4. 메모 텍스트 상자에 선택적 주석추가합니다.

  5. 닫기를 선택하여 제출하고 경고를 닫습니다.

  6. 경고 상태가 열기 에서 닫힘 으로 변경되고 해고 이유가 표시됩니다.

    종속성 검사 경고를 해제하는 방법을 보여 주는 스크린샷

이 작업은 모든 지점에서 경고를 해제합니다. 동일한 취약성을 포함하는 다른 분기도 제거됩니다. 이전에 해제된 모든 경고를 수동으로 다시 열 수 있습니다.

끌어오기 요청에 대한 종속성 검사 경고 관리

끌어오기 요청의 새 코드 변경에 대한 경고가 생성되면 경고는 끌어오기 요청의 개요 탭 주석 섹션에 주석으로 보고되고 고급 보안 리포지토리 탭의 경고로 보고됩니다. 끌어오기 요청 분기에 새 분기 선택기 항목을 사용할 수 있습니다.

영향을 받는 패키지 매니페스트를 보고, 검색에 대한 요약을 확인하고, 개요 섹션에서 주석을 확인할 수 있습니다.

활성 종속성 끌어오기 요청 주석의 스크린샷

끌어오기 요청 경고를 해제하려면 경고 세부 정보 보기로 이동하여 경고를 모두 닫고 주석을 해결해야 합니다. 그렇지 않으면 주석 상태(1)를 변경하기만 하면 주석이 해결되지만 기본 경고를 닫거나 수정하지는 않습니다.

닫힌 종속성 풀 리퀘스트 주석의 스크린샷

끌어오기 요청 분기에 대한 전체 결과 집합을 보려면 Repos끌어오기 요청 분기를 선택합니다. 주석에서 자세한 정보 표시(2)를 선택하면 고급 보안 탭의 경고 세부 정보 보기로 이동합니다.

주석은 영향을 받는 코드 줄이 끌어오기 요청의 대상 분기와 비교하여 끌어오기 요청 차이에 완전히 고유한 경우에만 생성됩니다.