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.
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.
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
.
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.
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.
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:
Ö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. axios
Bunlardan 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ıreslint
acorn
>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-project
A: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.0
vardı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-databind
olup 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-databind
geç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.3
olması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.App
olan 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.Connections
olup 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.0
olduğ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:
- Kapatmak istediğiniz uyarıya gidin ve uyarıyı seçin
- Uyarıyı kapat açılan listesini seçin
- Henüz seçili değilse, kapatma nedeni olarak Risk kabul edildi veya Hatalı pozitif seçeneğini belirleyin
- Açıklama metin kutusuna isteğe bağlı açıklama ekleme
- Uyarıyı göndermek ve kapatmak için Kapat'ı seçin
- Uyarı durumu Açık olan Kapalı olarak değişir ve kapatma nedeninizi görüntüler
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.
Ç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.
Ç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.