Bağımlılık taraması

Azure DevOps için GitHub Gelişmiş Güvenlik'te bağımlılık taraması, kaynak kodunuzda kullanılan açık kaynak bileşenlerini algılar ve ilişkili güvenlik açıkları olup olmadığını algılar. açık kaynak bileşenlerinden bulunan tüm güvenlik açıkları uyarı olarak işaretlenir.

Azure DevOps için GitHub Advanced Security, Azure Repos ile çalışır. GitHub depolarıyla GitHub Gelişmiş Güvenlik'i kullanmak istiyorsanız bkz . GitHub Gelişmiş Güvenlik.

Bağımlılık tarama hakkında

Bağımlılık taraması, doğrudan veya geçişli herhangi bir açık kaynak bileşeni için kodunuzun bağımlı olduğu güvenlik açığı bulunan bir uyarı oluşturur. Doğrudan güvenlik açıkları, kodunuzun doğrudan kullandığı kitaplıklardır. Geçişli bağımlılıklar, doğrudan bağımlılıkların kullandığı kitaplıklar veya diğer yazılımlardır.

Bağımlılık tarama algılama hakkında

Depo için bağımlılık grafiği her değiştiğinde ve bağımlılık tarama görevini içeren bir işlem hattı yeni kod derledikten (başka bir deyişle yeni bir işleme) yürütüldükten sonra bileşenlerinizin yeni bir anlık görüntüsü depolanır.

Kullanımda algılanan her güvenlik açığı bileşeni için, bileşen ve güvenlik açığı derleme günlüğünde listelenir ve Gelişmiş Güvenlik sekmesinde uyarı olarak görüntülenir. Yalnızca GitHub tarafından incelenen ve GitHub Danışmanlık Veritabanı'na eklenen öneriler bağımlılık tarama uyarısı oluşturur. Derleme günlüğü, daha fazla araştırma için tek tek uyarının bağlantısını içerir. Uyarı ayrıntıları hakkında daha fazla bilgi için Bkz. Bağımlılık tarama uyarılarını düzeltme.

Derleme günlüğü, algılanan her güvenlik açığıyla ilgili temel bilgileri de içerir. Bu ayrıntılar önem derecesini, etkilenen bileşeni, güvenlik açığının başlığını ve ilişkili CVE'yi içerir.

Bağımlılık tarama derleme çıktısının ekran görüntüsü

Desteklenen paket ekosistemleri

Bağımlılık tarama, desteklenen tüm paket ekosistemleri için doğrudan ve geçişli bağımlılıkları destekler.

Paket yöneticisi Diller Desteklenen biçimler
Yük Rust Cargo.toml, Cargo.lock
CocoaPods Swift Podfile.lock
Go modülleri Go go.mod, go.sum
Gradle Java *.lockfile
Maven Java pom.xml
npm JavaScript package-lock.json, package.json, npm-shrinkwrap.json, lerna.json
NuGet C# *.packages.config, *.project.assets, *.csproj
Pip Python setup.py, requirements.txt
pnpm JavaScript package.json
RubyGems Ruby Gemfile.lock
Iplik JavaScript package.json

Bağımlılık tarama uyarıları hakkında

Azure DevOps'taki Depolar'daki Gelişmiş Güvenlik sekmesi, güvenlik uyarılarınızı görüntülemek için varsayılan olarak bağımlılık tarama uyarılarını gösteren merkezdir. Dal, işlem hattı, paket ve önem derecelerine göre filtreleyebilirsiniz. Düzeltme kılavuzu da dahil olmak üzere daha fazla ayrıntı için bir uyarı seçebilirsiniz. Şu anda uyarı hub'ı çekme isteği dallarında tamamlanan tarama uyarıları görüntülemez.

Deponuzda güvenlik açığı bulunan bir paket algılandığında bağımlılık tarama uyarılarının düzeltilmesi genellikle daha yüksek bir paket sürümüne yükseltmeyi veya sorunlu bir paketi kaldırmayı içerir. Bu öneri hem doğrudan hem de geçişli (veya dolaylı) bağımlılıklar için geçerlidir. Gelişmiş Güvenlik sekmenizdeki varsayılan görünüm, deponuzun varsayılan dalı için etkin uyarılardır.

İşlem hatları veya dallar yeniden adlandırılırsa sonuçların bir etkisi olmaz. Yeni adın görüntülenmesi 24 saat kadar sürebilir.

Depo için bağımlılık tarama uyarı görünümünün ekran görüntüsü

Bağımlılık tarama görevinin yüklü olduğu işlem hatları için en son derlemede güvenlik açığı bulunan bileşen artık algılandığında uyarının durumu otomatik olarak olarak güncelleştirilir Closed . Çözümlenen uyarılarınızı görüntülemek için ana araç çubuğundaki filtreyi State kullanarak öğesini seçin Closed.

Kapalı bağımlılık tarama uyarılarını görüntüleme ekran görüntüsü

Deponuz için Gelişmiş Güvenlik'i kapatırsanız Gelişmiş Güvenlik sekmesinde ve derleme görevinde sonuçlara erişimi kaybedersiniz. Derleme görevi başarısız olmaz, ancak Gelişmiş Güvenlik devre dışı bırakılırken görevle çalıştırılan derlemelerden elde edilen sonuçlar gizlenir ve korunmaz.

Uyarı ayrıntıları

Ayrıca, belirli bir uyarıya tıklayarak ve düzeltme kılavuzuna tıklayarak bir uyarıyla ilgili ayrıntıları inceleyebilirsiniz.

Bağımlılık tarama uyarısının ayrıntılarını gösteren ekran görüntüsü

Section Açıklama
Öneri Öneri metni doğrudan güvenlik açığı veri sağlayıcımız olan GitHub Danışmanlık Veritabanı'ndan gelir. Genellikle kılavuz, tanımlanan bileşenin desteklenemez bir sürüme yükseltilmesi önerisinde bulunur.
Konum Konumlar bölümünde, bağımlılık tarama görevinin kullanımda olan güvenlik açığı olan bileşeni keşfettiği yollar ayrıntılı olarak açıklanmıştır. Dosya temel alınan derleme taramasından kaynaktaki kaydedilmiş bir dosyaya çözümlenebiliyorsa Konumlar kartı tıklanabilir bağlantı olarak görünür. Bir dosya bir derlemenin parçası olarak oluşturulduysa (örneğin, derleme yapıtı), bağlantıya tıklanamaz. Bileşenin derlemeye nasıl getirildiğini daha iyi anlamak için derleme günlüklerini gözden geçirin.
Açıklama Açıklama GitHub Danışmanlık açıklaması tarafından sağlanır.

Algılamalar

Algılamalar sekmesinde listelenen işlem hatları, güvenlik açığı bulunan bileşenin bulunduğu işlem hatlarıdır. Her satır, etkilenen işlem hattının en son derlemesini ve paketin ilk tanıtıldığı tarihi ayrıntılarıyla açıklar. Güvenlik açığı bulunan paket bazı işlem hatlarında düzeltildiyse ancak tümü düzeltilmediyse kısmen sabit satırlar görürsünüz.

Düzeltme olmadan bir uyarı için bağımlılık tarama algılamaları görünümünün ekran görüntüsü

Bir uyarı çözümlendikten sonra uyarı otomatik olarak duruma geçer Closed ve Algılamalar sekmesinin altındaki en son çalıştırma işlem hattı yeşil bir onay işareti görüntüler; bu da güncelleştirilmiş bileşeni içeren kodun bu işlem hattında çalıştırıldığı anlamına gelir:

Bir uyarı için bağımlılık tarama algılamaları görünümünün ekran görüntüsü

Önem

GitHub Danışmanlık Veritabanı bir CVSS puanı sağlar ve bu puan aşağıdaki yönergelerle uyarı için düşük, orta, yüksek veya kritik önem derecesine dönüştürülür:

CVSS Puanı Önem
1.0 < Puan < 4.0 Düşük
4.0 < Puan < 7.0 Orta
7.0 < Puan < 9.0 Yüksek
Puan >= 9,0 Kritik

Ayrıntıları bulma

Ayrıntıları bulma bölümünde yaygın olarak iki bölüm bulunur: güvenlik açığı olan paket ve kök bağımlılığı. Güvenlik açığı bulunan paket, güvenlik açığı olabilecek bileşendir. Kök bağımlılık bölümü, bir güvenlik açığına yol açan bağımlılık zincirinden sorumlu en üst düzey bileşenleri içerir.

Güvenlik açığı olan pakete yalnızca doğrudan bağımlılık olarak başvurulursa, yalnızca "güvenlik açığı olan paket" bölümünü görürsünüz.

Güvenlik açığı olan pakete hem doğrudan hem de geçişli bağımlılık olarak başvurulursa, paket hem "savunmasız paket" hem de "kök bağımlılık" bölümünde gösterilir.

Güvenlik açığı bulunan pakete yalnızca geçişli bağımlılık olarak başvurulsa, paket "güvenlik açığı olan paket" bölümünde gösterilir ve güvenlik açığı bulunan pakete başvuran kök bağımlılıklar "kök bağımlılık" bölümünde gösterilir.

Bağımlılık tarama uyarılarını yönetme

Depo için uyarıları görüntüleme

Depo için katkıda bulunan izinleri olan herkes, Depo Gelişmiş Güvenliği'nde >bir depo için tüm uyarıların özetini görüntüleyebilir.

Varsayılan olarak, uyarılar sayfasında deponun varsayılan dalı için bağımlılık tarama sonuçları gösterilir.

Uyarı diğer dallarda ve işlem hatlarında mevcut olsa bile, uyarının durumu varsayılan dalın ve en son çalıştırma işlem hattının durumunu yansıtır.

Bağımlılık tarama uyarılarını düzeltme

Doğrudan bağımlılık, deponuzda bulunan bir bileşendir. Geçişli veya dolaylı bağımlılık, doğrudan bağımlılık tarafından kullanılan bir bileşendir. Projeniz, güvenlik açığının doğrudan veya geçişli bir bağımlılıkta bulunup bulunmadığına bakılmaksızın hala savunmasızdır.

Güvenlik açığı bulunan geçişli bağımlılığı düzeltmek genellikle tanımlanan her doğrudan bağımlılık için kullanılan savunmasız bileşenin sürümünü açıkça geçersiz kılma biçimine sahip olur. Kök bağımlılıklar, güvenlik açığı olan bileşenin kullanımını güvenli bir sürüme yükselttikten sonra, her kök bağımlılığını birden çok geçersiz kılma yerine yükseltebilirsiniz.

Yarn/Npm için bağımlılıkları güncelleştirme

Varsayımsal olarak, bu paketin iki güvenlik açığı olduğunu varsayalım. axiosBunlardan biri doğrudan bağımlılık, diğeri ise geçişli bağımlılık (dolaylı bağımlılık veya bağımlılık bağımlılığı olarak da bilinir) içindiracorn.

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

geçerli sürümü, axios v0.18.1 veya üzeri sürüme güncelleştirme önerisi içeren bir hizmet reddi (DoS) güvenlik açığına sahiptir. Bu doğrudan bir bağımlılık olduğundan, kullandığınız sürümü axios üzerinde denetiminiz vardır; tek yapmanız gereken, çektiğiniz sürümü axios güncelleştirmektir. Güncelleştirme package.json şuna benzer:

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

Şimdi, eslint gösterilen sürümünde package.json sürümü, normal ifade hizmet reddi (ReDoS) güvenlik açığı olan ve sürüme veya daha yüksek bir sürüme güncelleştirme önerisi içeren bir sürümüne acorn 5.7.4, 6.4.1, 7.1.1 bağlıdır. Bağımlılık tarama aracından bir uyarı alırsanız, güvenlik açığı olan bağımlılığı gerektiren kök bağımlılığı size anlatmalıdır.

Iplik

Yarn kullanıyorsanız yarn why kullanarak bağımlılık zincirinin tamamını bulabilirsiniz.

> $ 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.

Bağımlılık zincirinin tamamıdıreslintacorn>espree>. Bağımlılık zincirini bildiğinizde, kullanılan meşe palamudu sürümünü geçersiz kılmak için Yarn'ın başka bir özelliğini, seçmeli bağımlılık çözümlemelerini kullanabilirsiniz.

Sürüm geçersiz kılmayı tanımlamak için içindeki package.json çözümlemeler alanını kullanın. Bir paketi geçersiz kılmak için en kötüden en iyiye sırasıyla üç farklı yöntem gösterilir:

{
  "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"
  }
}

Desenin**/acorn kullanılması, tüm bağımlılıklar genelinde meşe palamudu paketinin tüm kullanımlarını geçersiz kılar. Tehlikelidir ve çalışma zamanında kırarsınız. Sonuç olarak Yarn v2'de kaldırılmıştır.

Desenin eslint/**/acorn kullanılması, eslint paketi altında ve bağımlı olduğu tüm paketlerde meşe palamudu paketinin tüm kullanımlarını geçersiz kılar. Paketi tüm bağımlılıklar için geçersiz kılmaktan daha güvenlidir, ancak bir paketin bağımlılık grafiği büyükse bazı riskleri vardır. Bu düzen, güvenlik açığı bulunan bir paket kullanan çok sayıda alt paket olduğunda ve tek tek alt paketler için geçersiz kılmaların tanımlanması pratik olmadığında önerilir.

Desenin eslint/espree/acorn kullanılması yalnızca paketin espree eslint içindeki kullanımını acorn geçersiz kılar. Özellikle güvenlik açığı olan bağımlılık zincirini hedefler ve paket sürümlerini geçersiz kılmanın önerilen yoludur.

npm

npm 8.3 veya üzerini kullanıyorsanız, package.json

Geçişli bağımlılıklarda belirli değişiklikler yapmanız gerekiyorsa geçersiz kılma ekleyin. Örneğin, bir bağımlılığın sürümünü bilinen bir güvenlik sorunuyla değiştirmek, var olan bir bağımlılığı çatalla değiştirmek veya paketin aynı sürümünün her yerde kullanıldığından emin olmak için geçersiz kılma eklemeniz gerekebilir.

{
  "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"
        }
    }
   }
}

Gösterilen geçersiz kılma örneği, npm'nin "yalnızca paketteki paketin espree eslint kullanımını acorn geçersiz kıl" demenin yolunu gösterir. Özellikle güvenlik açığı olan bağımlılık zincirini hedefler ve paket sürümlerini geçersiz kılmanın önerilen yoludur. Geçersiz kılmalar npm'nin yerel bir özelliğidir. Bağımlılık ağacınızdaki bir paketi başka bir sürümle veya tamamen başka bir paketle değiştirmenin bir yolunu sağlar.

Geçersiz kılmalarınızı ayarladıktan sonra ve node_modules öğesini package-lock.json silip yeniden çalıştırmanız npm install gerekir.

Hem bağımlılık hem de geçersiz kılmanın kendisi tam olarak aynı belirtimi paylaşmadığı sürece doğrudan bağımlı olduğunuz bir paket için geçersiz kılma ayarlayamazsınız. Örneğin, güvenlik açığı olduğunu ve sürümüne yükseltme yapmak istediğimizi axios: "0.19.2"düşünelimaxios: "0.18.0". Geçersiz kılma kullanmak yerine bağımlılık sürümünü doğrudan değiştirin.

{
  "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",
  }
}

Geçersiz kılma ayarlamadan bağımlılığın sürümünü güncelleştirin:

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

Maven için bağımlılıkları güncelleştirme

Bağımlılık çözümleme mekanizması Yarn'da kullanılan mekanizma kadar karmaşık değildir. Sonuç olarak, bir projede bağımlılığın yalnızca tek bir sürümüne sahip olabilirsiniz. Maven, bu sorunu çözmek için "en yakın wins" algoritmasını kullanır. Başka bir ifadeyle, bağımlılık ağacında projenize en yakın bağımlılığın sürümünü kullanır.

Örneğin, aşağıdaki bağımlılık grafiğine sahipsiniz:

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

your-projectA:1.0.0öğesine bağlıdır ve bu da buna bağlıdırB:2.0.0, ancak projenizin de doğrudan bağımlılığı B:1.0.0vardır. Bu nedenle, bağımlılık grafiğinizde B bağımlılığının iki farklı sürümü var, ancak B bağımlılığının 1.0.0 sürümü projenize 'en yakın' olduğundan kazanır.

Bazı durumlarda, sürümler uyumluysa bu senaryo işe yarayabilir. Ancak, B'nin yalnızca sürümde 2.0.0 kullanılabilen bazı özelliklerine bağlıysa A:1.0.0 bu davranış çalışmaz. En kötü durumda, bu proje yine de derlenebilir ancak çalışma zamanında başarısız olabilir.

Şimdi gerçek bir dünya örneğine göz atalım.

<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>

Bağlı olduğunuz sürümün com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider güvenilmeyen veri güvenlik açığı seri durumdan çıkarılmış bir sürümüne com.fasterxml.jackson.core:jackson-databind bağlı olduğunu varsayalım.

Maven bağımlılık eklentisini kullanarak bu bağımlılığı doğrulayabilirsiniz. Bu durumda komutunu çalıştırıp mvn dependency:tree -Dincludes=com.fasterxml.jackson.core:jackson-databind aşağıdaki çıkışı alırsınız:

> $ 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] ------------------------------------------------------------------------

İlk olarak, güvenlik açığı olan bir sürümüne com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider bağımlı olmayan yeni bir sürümü com.fasterxml.jackson.core:jackson-databindolup olmadığını denetleyin. Öyleyse, yükseltebilir com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider ve orada durabilirsiniz. Aksi takdirde sürümünü com.fasterxml.jackson.core:jackson-databindgeçersiz kılın.

Kod parçacığında gösterildiği gibi, Maven kullanırken "en yakın kazançlar" kullanılırken çözüm, güvenlik açığını gideren doğrudan bir bağımlılık com.fasterxml.jackson.core:jackson-databind eklemektir.

<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>

Yeniden çalıştırarak mvn dependency:tree -Dincludes=com.fasterxml.jackson.core:jackson-databind çözümlemenin çalıştığını doğrulayabilirsiniz.

$ 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] ------------------------------------------------------------------------

Daha sonra gelen herkesin bağımlılığın neden orada olduğunu bilmesi için bağımlılık çözümünün yakınına bir açıklama eklemeniz önerilir. Kök bağımlılık yeni sürümü kullandığında kaldırılabilir; aksi takdirde bağımlılıkları biriktirirsiniz.

Gerçek bir projede bağımlılığı zincire mümkün olduğunca yüksek bir şekilde ekleyin. Örneğin, çözümlemeyi her proje POM dosyasına ayrı ayrı eklemek yerine üst POM dosyasına ekleyebilirsiniz.

NuGet için bağımlılıkları güncelleştirme

NuGet'te kullanılan bağımlılık çözümleme algoritması Maven'a benzer, bu nedenle bir bağımlılığın yalnızca tek bir sürümü kullanılabilir. Ancak NuGet, bağımlılık sürümlerini sabitlemez.

Örneğin, bir bağımlılığınız <PackageReference Include="A" Version="1.2.3" />varsa, bu paketin ile eşdeğer = 1.2.3olmasını bekleyebilirsiniz, ancak aslında anlamına gelir >= 1.2.3. Tam bir sürümü sabitlemek için kullanmanız Version="[1.2.3]"gerekir. Daha fazla bilgi için NuGet sürüm aralıkları belgelerine bakın.

NuGet, varsayılan aralık davranışına ek olarak bir aralığı karşılamak için en düşük geçerli sürümü geri yükler. Bu davranış, çoğu durumda bir aralık tanımlamanız gerekebileceği anlamına gelir.

şimdi üzerinde bağımlılığı Microsoft.AspNetCore.Appolan bu örnek projeye göz atalım:

<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>

Uzaktan kod yürütme (RCE) güvenlik açığına açık olan bir sürümüne Microsoft.AspNetCore.Http.Connections bağlıdır.

İlk olarak, daha yeni bir sürümüne bağlı olan güncelleştirilmiş bir sürümü Microsoft.AspNetCore.App Microsoft.AspNetCore.Http.Connectionsolup olmadığını denetlemeniz gerekir. Bu durumda, burada yükseltebilir Microsoft.AspNetCore.App ve durdurabilirsiniz. Aksi takdirde, sürümüne bağlı olarak geçersiz kılmanız Microsoft.AspNetCore.Http.Connections gerekir.

NuGet'in neden veya mvn dependency:tree yerleşik yarn ile eşdeğeri yoktur, bu nedenle bağımlılık ağacını görmenin en kolay yolu genellikle nuget.org ziyaret etmektir. içinMicrosoft.AspNetCore.App NuGet sayfasını ziyaret ederseniz, buna bağlı Microsoft.AspNetCore.Http.Connections version >= 1.0.4 && < 1.1.0olduğunu görürsünüz. Alternatif olarak, NuGet sürüm aralığında temsili söz dizimi şeklindedir [1.0.4,1.1.0).

sürümündeki Microsoft.AspNetCore.Http.Connections RCE güvenlik açığı düzeltildi 1.0.15, bu nedenle olması[1.0.15, 1.1.0) için sürüm aralığını geçersiz kılmanız gerekir.

<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>

Daha sonra gelen herkesin bağımlılığın neden orada olduğunu bilmesi için bağımlılık çözümünün yakınına bir açıklama eklemeniz önerilir. Kök bağımlılık yeni sürümü kullandığında kaldırılabilir. Aksi takdirde bağımlılıkları biriktirirsiniz.

Düzeltme yoksa ne olur?

Bilinen bir düzeltme olmadığında, yükseltilen bir bileşen kullanılabilir olana kadar aşağıdaki seçenekler diğer düzeltme yöntemleri olarak kullanılabilir:

  • Bileşeni kullanmayı durdurun ve kodunuzdan kaldırın. Bağımlılık tarama görevi yüklü bir sonraki derlemenizde bu kaldırma algılanır
  • Bileşenin kendisine bir düzeltme katkıda bulunun. Kuruluşunuzun açık kaynak katkılarıyla ilgili belirli yönergeleri varsa bu yönergeleri izleyin.
  • Uyarı kapatıyor. Ancak, bilinen bir düzeltmesi olmayan uyarılar kuruluşunuz için bir güvenlik tehdidi oluşturabilir. Bilinen bir düzeltme olmadığı için uyarıyı kapatmamanızı öneririz.

Bağımlılık tarama uyarılarını kapatma

Gelişmiş Güvenlik'te uyarıları kapatmak için uygun izinlere sahip olmanız gerekir. Varsayılan olarak, Gelişmiş Güvenlik uyarılarını kapatma özelliği yalnızca proje yöneticilerine sağlanır.

Uyarıyı kapatmak için:

  1. Kapatmak istediğiniz uyarıya gidin ve uyarıyı seçin
  2. Uyarıyı kapat açılan listesini seçin
  3. Henüz seçili değilse, kapatma nedeni olarak Risk kabul edildi veya Hatalı pozitif seçeneğini belirleyin
  4. Açıklama metin kutusuna isteğe bağlı açıklama ekleme
  5. Uyarıyı göndermek ve kapatmak için Kapat'ı seçin
  6. Uyarı durumu Açık olan Kapalı olarak değişir ve kapatma nedeninizi görüntüler

Bağımlılık tarama uyarısını kapatmayı gösteren ekran görüntüsü

Bu eylem yalnızca seçtiğiniz dalın uyarısını kapatıyor. Aynı güvenlik açığını içerebilecek diğer dallar, başka bir işlem yapılana kadar etkin kalır. Daha önce kapatılmış olan tüm uyarılar el ile yeniden açılabilir.

Çekme isteklerinde bağımlılık tarama uyarılarını yönetme

Çekme isteğinde yeni kod değişiklikleri için uyarılar oluşturulursa, uyarı, çekme isteğinin Genel Bakış sekmesinin açıklama bölümünde ek açıklama olarak ve Gelişmiş Güvenlik deposu sekmesinde bir uyarı olarak bildirilir. Çekme isteği dalı için yeni bir dal seçici girdisi var.

Etkilenen paket bildirimini görebilir, bulmanın özetini görebilir ve Genel Bakış bölümünde ek açıklamayı çözümleyebilirsiniz.

Etkin bağımlılık çekme isteği ek açıklamasının ekran görüntüsü.

Çekme isteği uyarılarını kapatmak için uyarı ayrıntı görünümüne gidip hem uyarıyı kapatmanız hem de ek açıklamayı çözümlemeniz gerekir. Aksi takdirde, açıklama durumunun değiştirilmesi (1) ek açıklamayı çözer, ancak temel alınan uyarıyı kapatmaz veya düzeltmez.

Kapalı bağımlılık çekme isteği ek açıklamasının ekran görüntüsü.

Çekme isteği dalınızın tüm sonuç kümesini görmek için Repos>Advanced Security'ye gidin ve çekme isteği dalınızı seçin. Ek açıklama üzerinde Daha fazla ayrıntı göster (2) seçeneğinin seçilmesi sizi Gelişmiş Güvenlik sekmesindeki uyarı ayrıntı görünümüne yönlendirir.

İpucu

Ek açıklamalar yalnızca etkilenen kod satırları çekme isteğinin hedef dalı ile karşılaştırıldığında çekme isteği farkı için tamamen benzersiz olduğunda oluşturulur.