güvenlik açıkları

Dolaylı güvenlik açıklarını düzeltmek, kimsenin gerçekten dokunmak istemediği karmaşık, sıkıcı ve açıkçası sıkıcı görevlerden biridir. dışında kimse tuğladan arındırılmış, anlaşılan. Elbette, manuel olarak yapmanın birçok yolu vardır, ancak minimum değişiklik riski ile otomatik olarak yapılabilir mi? Debricked ekibi öğrenmeye karar verdi.

Kırılgan ağaçlarla dolu bir orman

Peki, nereden başlıyorsunuz?

İlk olarak, dolaylı bağımlılıklar için parkta yürümek olmayan güvenlik açığını düzeltmenin bir yolu olmalıdır. İkincisi, güvenli bir şekilde veya hiçbir şey kırılmadan yapılmalıdır.

Görüyorsunuz, dolaylı bağımlılıklar, bağımlılık ağacının derinliklerinde tanıtılıyor ve tam olarak istediğiniz sürüme ulaşmak çok zor. Debricked’in Ar-Ge Başkanı’nın bir keresinde belirttiği gibi, “Doğrudan bağımlılıklarınızla oynayarak ve doğru dolaylı paketlerin çözülmesi için Torvalds’a dua ederek düğmeleri çeviriyorsunuz. Torvalds lehinize olduğunda, güncellemelerin uygulamanızı bozmadığından emin olmak için Bob Amca’ya bir miktar bulut depolama alanını feda etmeniz gerekir.

Başka bir deyişle, bunu yapmanın gerçekten daha kolay, daha az stresli bir yolu olmalı.

Bu makalede, geçişli güvenlik açıklarını manuel olarak çözmenin nasıl yapılabileceği konusunda size yol göstereceğiz ve sonlara doğru bunu otomatik olarak yapmanızı sağlayan Debricked çözümünü göstereceğiz. Çözümle gerçekten ilgileniyorsanız, kaydırmaya başlamanızı öneririm.

Bağımlılık ağacınızda hassas cerrahi

Araştırma aşamasında, grafik-veritabanı projesiveya Debricked’ın bugün açık kaynak güvenlik açıklarınızı ışık hızında nasıl düzelttiği konusunda ekip, bazı makaleler NPM’deki dolaylı güvenlik açıklarının nasıl düzeltileceğini açıklayan.

Makalede belirtildiği gibi, ‘minimist’ paketi güvenlik açıklarından etkilenir, yani CVE-2021-44906 ve CVE-2020-7598.

Bunların her ikisi de “Prototip Kirliliği” güvenlik açıklarıdır, yani argümanlar uygun şekilde temizlenmez. Neyse ki, ‘minimist’in sahipleri bu güvenlik açıklarını 1.2.6 sürümünde düzeltti.

Ne yazık ki, “mocha” 7.1.0 sürümü, bu güvenlik açıklarının savunmasız aralığında olan “minimist” 0.0.8’i çözmektedir. Yazarın önerdiği gibi Bu makalebu güvenlik açıkları birkaç farklı şekilde düzeltilebilir.

Fakat! Peki ya değişiklikleri kırmak?

İlk öneri, tüm “dolaylı bağımlılıkların” bir güncellemesini tetiklemektir, yani aslında “mocha”nın sürümünü değiştirmeyeceğiz. Bu güncellemeyi gerçekleştirmek için “npm update”yi çalıştırın, “npm.lock” dosyanızı silin ve “npm install”ı çalıştırın. Bu, dolaylı bağımlılıklarınızın mümkün olan en son sürümüyle (kısıtlamalara göre) bağımlılık ağacını yeniden oluşturur. Bu yöntemle, kök bağımlılıklarınızın hiçbirini, yalnızca dolaylı olanları güncellemediğiniz için, değişiklikleri bozma riski çok düşüktür.

Son değişiklikler, paket işlevselliği veya arabirimi ileriye uyumlu olmadığında meydana gelir; bu, pakette yapılacak bir güncellemenin uygulamanızın bozulmasına neden olabileceği anlamına gelir. Genel kırılma değişiklikleri, sınıf/işlev kaldırma, bir işleve ilişkin argümanların değiştirilmesi veya lisans değişikliğidir (buna dikkat edin!).

Ancak hayat her zaman bu kadar kolay değildir ve ağacın bu basit güncellemesi güvenlik açığını çözmeyecektir. Sorun şu ki `mkdirp` aslında ‘minimist’ sürümlerini 0.0.8’e kilitledi. Bu, ‘mkdirp’e katkıda bulunanların, ‘minimist’in daha yeni sürümleriyle uyumlu olmadıkları sonucuna vardıkları ve ‘minimist’ güncellemesini zorlamak, ‘mkdirp’ ve ‘minimist’ arasında kırılma değişiklikleri getirebileceği anlamına gelir.

Düşünün… grafikler!

Milyon dolarlık soru şu: Bağımlılık ağacını bozmadan güvenli bir “minimist” versiyonuna dönüşen “mocha”nın hangi versiyonu kullanılmalıdır? Bu aslında, içinde açıklanan bir grafik problemidir. Bu makale.

Bu sorunu hangi grafik algoritması çözebilir? NPM’nin bağımlılıkları nasıl çözdüğü, bağımlılık ağacını “bölmelerine” izin verildiğinden biraz karmaşık olabilir. Bu, her zaman uyumlu bir ağaca sahip olduğumuzdan emin olmak için bir bağımlılığın birden çok sürümüne sahip olabilecekleri anlamına gelir. Güvenlik açığını çözmek için, “minimist”e kadar inebilen tüm kökleri güncelleyerek tüm “minimist” örneklerinin güvenli olduğundan emin olmamız gerekir.

Bu sorunu çözmek için kullanılan algoritmaya “All Max Paths Safe” denir. Bağımlılık grafiğinde aşağı inerek ve maksimum sürümleri koruyarak, her bir kavşakta bu paketin diğer tüm sürümlerini budayarak, bağımlılık ağacımızın yaklaşık bir temsilini oluşturabiliriz. Yaklaşım güvenliyse, gerçek ağacımız da güvenli olacak demektir!

Bu algoritmayı “mocha”nın tüm olası sürümleri için uygulayarak, bu güvenlik açığını gidermek için en küçük yükseltmeyi buluyoruz. Bu algoritma için istediğimiz hızı elde etmek için ekibin özel bir algoritma oluşturması gerekiyordu. Neo4j prosedürü~ 150 milisaniyede 30+ arama derinliğine sahip 100’den fazla kök sürümü aramayı işleyebilir. Hızlı, ha?

Bu durumda çok uzaklarda aramamıza gerek yok… `mocha`nın 7.1.1’i güvenli olduğu için! Bu yalnızca bir yama güncellemesidir ve bu, değişiklikleri bozma riskinin çok düşük olduğunu gösterir. Daha az karmaşık durumlar için (bu örnek gibi), ‘npm denetimi’, harika ‘npm denetim düzeltmesi’ komutuyla size yardımcı olabilir.

Geçici olmayın, pub-alt-insan çalışma biçimine girin!

Şimdi, buraya kadar geldiyseniz (tebrikler, çok etkileyici) ve “bu kulağa gerçekten karmaşık ve çok fazla iş gibi geliyor” diye düşündüyseniz, endişelenmeyin – tek kişi siz değilsiniz. Neyse ki, tüm bunlar Debricked aracında bu küçük düğmeyi tıkladığınızda tamamen otomatik olarak gerçekleşir:

Şu an itibariyle, bu Javascript için kullanılabilir. Yakında destek Java, Golang, C#, Python ve PHP’ye genişletilecek.

Eğer henüz bir tuğladan arındırılmış kullanıcı, ne bekliyorsun? Tek geliştiriciler, daha küçük ekipler ve açık kaynak projeleri için ücretsizdir (ve daha büyük bir kuruluşsanız korkmayın. Cömert bir ücretsiz deneme var). Buradan ücretsiz üye ol.



siber-2