Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 Gelişmiş Güvenliği'ne veya tek başına deneyimi kullanıyorsanız Azure DevOps için GitHub Code Security'yi etkinleştirmeniz gerekir.
Azure DevOps için GitHub Advanced Security, Azure Repos ile çalışır. GitHub Depoları ile GitHub Gelişmiş Güvenlik'i kullanmak için bkz. gitHub Gelişmiş Güvenlik .
Önkoşullar
Kategori | Gereksinimler |
---|---|
İzinler | - Depoya yönelik tüm uyarıların özetini görüntülemek için: Katkıda Bulunan depo izinleri. - Gelişmiş Güvenlik'te uyarıları kapatmak için: Proje yöneticisi izinleri. - Gelişmiş Güvenlik izinlerini yönetmek için: Proje Koleksiyonu Yöneticileri grubunun bir üyesi olun veya Gelişmiş Güvenlik'e ait ayar izinleri , olarak Ayarla izininesahip olun. |
Gelişmiş Güvenlik izinleri hakkında daha fazla bilgi için bkz. Gelişmiş Güvenlik izinlerini yönetme.
Bağımlılık tarama hakkında
Kodunuzun bağımlı olduğu, doğrudan veya dolaylı herhangi bir açık kaynak bileşeninde güvenlik açığı bulunduğunda, bağımlılık taraması 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 bilgi edinin
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ı 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. Yapı günlüğü, daha fazla araştırma için uyarıya ait bağlantıyı 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 bileşen ekosistemlerinin ve sürümlerinin listesi için bkz . Desteklenen paket ekosistemleri.
Bağımlılık tarama uyarıları hakkında bilgi edinin
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ı merkezi, çekme isteği dallarında tamamlanan taramalar için 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ında en son derlemede güvenlik açığı bulunan bileşen artık algılanmadığında, uyarının durumu Closed
olarak otomatik güncellenir. Çö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ıldığında derlemelerden elde edilen sonuçlar gizlidir 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.
Bölüm | 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ü, bağımlılık tarama görevinin kullanımda olan güvenlik açığı bileşenini bulmasına neden olan yolların ayrıntılarını içerir. 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 dahil edildiğini daha iyi anlamak için derleme günlüklerini gözden geçirin. |
Açıklama | GitHub Tavsiye açıklamasından sağlanan açıklama. |
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 kez tanıtıldığı tarihi ayrıntılı olarak belirtir. Güvenlik açığı içeren paket bazı işlem hatlarında düzeltildiyse ancak hepsi düzeltilmediyse, kısmen düzeltilmiş satırları görürsünüz.
Bir uyarı çözümlendikten sonra, uyarı otomatik olarak Closed
durumuna geçer 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:
Ciddiyet
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ı | Ciddiyet |
---|---|
1.0 < Puan < 4.0 | Düşük |
4.0 < Puan < 7.0 | Orta |
7.0 < Puan < 9.0 | Yüksek |
Puan >= 9,0 | Hayati önemde |
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
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çığı bulunan bileşenin kullanımını güvenli bir sürüme yükselttiklerinde, her bir kök bağımlılığı bireysel geçersiz kılmalardan ziyade topluca 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. Birisi axios
doğrudan bağımlılık içindir, diğeri ise acorn
geçişli bağımlılık (dolaylı bağımlılık veya bağımlılığın bağımlılığı olarak da bilinir) içindir.
{
"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üncellenen package.json
şuna benzer:
{
"name": "my-package",
"version": "1.0.0",
"dependencies": {
"axios": "0.19.2",
"eslint": "5.16.0",
}
}
Şimdi, gösterilen eslint
'deki package.json
sürümü, düzenli ifade hizmet reddi "Re-DoS" güvenlik açığına sahip bir acorn
sürümüne bağlıdır ve 5.7.4, 6.4.1, 7.1.1
veya daha yüksek bir sürüme güncelleme yapılması önerilmektedir. Bağımlılık tarama aracından bir uyarı alırsanız, bu uyarı size güvenlik açığı olan bağımlılığı gerektiren kök bağımlılığı belirtmelidir.
İplik
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
>espree
>acorn
. Bağımlılık zincirini bildiğinizde, kullanılan acorn sürümünü değiştirmek için Yarn'ın seçmeli bağımlılık çözümlemeleri özelliğini kullanabilirsiniz.
Sürüm geçersiz kılmayı tanımlamak için package.json
içindeki çö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 bozulur, bu nedenle Yarn v2'de kaldırdık.
eslint/**/acorn
modelinin kullanılması, eslint paketi altında ve onun bağımlı olduğu tüm paketlerde Acorn 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 acorn
espree
içindeki kullanımını eslint
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 dosyanızda overrides alanını kullanabilirsiniz.
Geçişli bağımlılıklarda belirli değişiklikler yapmanız gerekiyorsa override tanımlayın. Örneğin, bilinen bir güvenlik sorunuyla bağımlılığın sürümünü geçersiz kılmanız, var olan bir bağımlılığı çatalla değiştirmeniz veya paketin aynı sürümünün her yerde kullanıldığından emin olmanız 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 "acorn
paketinde, espree
paketindeki eslint
kullanımını yalnızca geçersiz kıl" demenin bir yolunu gösterir. Özellikle güvenlik zaafiyeti içeren bağımlılık zincirini hedef alır 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ı ayarladıktan sonra package-lock.json
ve node_modules
öğelerini silip npm install
'yi yeniden çalıştırmanız gerekir.
Hem bağımlılık hem de geçersiz kılmanın kendisi aynı belirtimi paylaşmadıkları sürece doğrudan bağımlı olduğunuz bir paket için geçersiz kılma ayarlaması yapamazsınız. Örneğin, axios: "0.18.0"
'ın güvenlik açığı olduğunu varsayalım ve axios: "0.19.2"
sürümüne yükseltmek istediğimizi düşünelim. 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 işlemi belirlemeden bağımlılığın sürümünü güncelleyin.
{
"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 kazanan" 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, o da B:2.0.0
öğesine bağlıdır, ancak projenizin de B:1.0.0
üzerinde doğrudan bir bağımlılığı vardır. Bu nedenle, bağımlılık grafiğinizde B bağımlılığının iki farklı sürümü vardır, ancak B bağımlılığının 1.0.0 sürümü projenize "en yakın" olduğu için kazanır.
Bazı durumlarda, sürümler uyumluysa bu senaryo işe yarayabilir. Ancak, B'nin yalnızca sürümde A:1.0.0
kullanılabilen bazı özelliklerine bağlıysa 2.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>
Varsayalım ki com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider
sürümüne bağlı olduğunuz com.fasterxml.jackson.core:jackson-databind
, güvenilmeyen verilerin seri duruma geri dönüştürme güvenlik açığı olan bir sürümüne bağlı.
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 com.fasterxml.jackson.core:jackson-databind
sürümünü geçersiz kılın.
Kod parçacığında gösterildiği gibi, Maven kullanırken "en yakın olan tercih edilir", bu yüzden çözüm olarak, güvenlik açığını gidermek için com.fasterxml.jackson.core:jackson-databind
'a doğrudan bir bağımlılık eklenmelidir.
<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 eklemenizi öneririz. 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>
Microsoft.AspNetCore.Http.Connections
'in uzaktan kod yürütme (RCE) güvenlik açığı içeren bir sürümüne bağlıdır.
İlk olarak, Microsoft.AspNetCore.App
için daha yeni bir Microsoft.AspNetCore.Http.Connections
sürümüne bağlı olan güncellenmiş bir sürümün olup olmadığını kontrol etmelisiniz. Bu durumda Microsoft.AspNetCore.App
öğesini yükseltebilir ve burada durabilirsiniz. Aksi takdirde, Microsoft.AspNetCore.Http.Connections
'in bağlı olduğu sürümü geçersiz kılmanız gerekir.
NuGet'in yarn why veya mvn dependency:tree yerleşik bir eşdeğeri yoktur, bu nedenle bağımlılık ağacını görmenin en kolay yolu genellikle [1.0.4,1.1.0)
.
Microsoft.AspNetCore.Http.Connections
sürümündeki RCE güvenlik açığı 1.0.15
sürümünde düzeltildi, bu nedenle sürüm aralığını [1.0.15, 1.1.0)
olarak ayarlamanı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 gelecek 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 eklemenizi öneririz. Ana bağımlılık yeni sürümü kullanmaya başladığı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ılı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
Uyarıyı kapatmak için aşağıdaki adımları uygulayın:
Kapatmak istediğiniz uyarıya gidin ve uyarıyı seçin.
Uyarıyı kapat açılır menüsünü seçin.
Henüz seçilmemişse, kapatma nedeni olarak ya Risk kabul edildi ya da Yanlış pozitif seçeneklerinden birini seçin.
Açıklama metin kutusuna isteğe bağlı bir açıklama ekleyin.
Uyarıyı göndermek ve kapatmak için Kapat'ı seçin.
Uyarı durumu Açık 'den Kapalı 'ye değişir ve reddetme nedeninizi görüntüler.
Bu eylem uyarıyı tüm dallarda kaldırır. Aynı güvenlik açığını içeren diğer dallar da kapatılır. Daha önce kapatılan tüm uyarılar el ile yeniden açılabilir.
Pull request'lerde 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 yorum bölümünde bir ek açıklama olarak ve Gelişmiş Güvenlik depo sekmesinde uyarı olarak bildirilir. Çekme isteği dalı için yeni bir dal seçici maddesi mevcuttur.
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 önce uyarı ayrıntı görünümüne gidip uyarıyı kapatmanız, ardından yorumu çözmeniz gerekir. Aksi halde, açıklama durumunun değiştirilmesi (1) ek açıklamayı giderir, 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 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.
İlgili makaleler
- Desteklenen paket ekosistemleri hakkında bilgi edinin
- Bağımlılık tarama sorunlarını giderme
- Gizli taramayı ayarlama
- Gelişmiş Güvenlik hakkında bilgi edinin