Sıfır Tıklamalı Argent-X Cüzdan Sözleşmesi Güvenlik Açığı, Açıklandı
TL;DR
Argent-X cüzdan uygulamasının 5.0.x sürümü ile dağıtılan Argent sözleşmelerinde, herhangi birisinin bir Argent hesabı üzerinde tam kontrol sahibi olmasına olanak tanıyan kritik bir güvenlik açığı bulduk. Güvenlik açığı, Argent Sözleşmesi imza doğrulama mantığını atlayan belirli bir şekilde bir işlem gönderilerek istismar edilir. Bu, bir saldırganın zincir üzerinde yürütülecek ve kabul edilecek boş veya yanlış imzalı herhangi bir işlem göndermesine izin verir. Argent hesap sözleşmesine boş imzalı bir Transfer işlemi göndererek ve ETH’yi seçtiğimiz bir cüzdana aktararak güvenlik açığını ortaya çıkardık. Bu sorunu Argent’a ilettik ve Argent sorunu çözmek için hızla harekete geçti.
İki Versiyonun Hikayesi
Yaklaşık bir ay önce yayınlanan son StarkNet v0.10.0 sürümünde, protokol yeni bir işlem sürümü seviyesi (v1) getirmiştir. İşlem doğrulama mantığını işlem yürütme mantığından ayırarak Starknet Hesap Sözleşmelerinin işlemleri doğrulama şeklini değiştirir (doğrulamanın kendisi hala hesap sözleşmesinin bir parçası olarak yapılır – ancak bu şimdi StarkNet OS’a gidiyor). Bu, StarkNet OS’nin işlemi çalıştırmadan önce işlemin geçerliliğini doğrulamasına izin verdiği için faydalıdır, böylece geçerli bir imza üretemeyen bir saldırganın DDoS saldırılarını önler.
Eski sürümle (v0) çalışan işlemler için destek, kullanıcıların yeni işletim sistemi-hesap sözleşmesi doğrulama şemasına kademeli olarak geçmelerine izin vermek için hala sıkıntısızdı.
İşletim sistemi her iki işlem sürümünü de (v0 ve v1) desteklediğinden, hesap sözleşmesinin de her ikisini de desteklemesi gerekir.
İmza Doğrulama Süreci
Akıllı sözleşme tabanlı cüzdanların (diğer adıyla Hesap Soyutlama) gücü, diğer şeylerin yanı sıra, rastgele bir doğrulama mantığına izin vermesidir. Ama dedikleri gibi, büyük güç büyük sorumluluk getirir.
Rastgele doğrulama mantığına izin vermek, hesap sözleşmesinin hangi doğrulama mantığını çalıştıracağına karar verebileceği anlamına gelir – Yerel protokol doğrulamasını yürütebilir veya bağımsız olarak kodlanmış bir doğrulama çalıştırabilir.
(yine, v0 ve v1 işlemleri arasındaki fark, bu doğrulama mantığı işlevini kimin çağırdığıdır – sözleşme veya işletim sistemi).
Bununla birlikte, ağın mevcut durumunda, bir hesap her iki tür işlemi de alabilir, ancak yalnızca daha yeni işlem sürümünü (v1) desteklediğine karar verebilir.
Güvenlik Açığı
Ağa 4 Kasım’da dağıtılan ve bu hafta başında Argent-X v5.0.x’in bir parçası olarak kullanıma sunulan en son Argent sözleşmesi uygulamasında, sözleşmenin yalnızca v1 işlemlerini gerçekleştireceğine dair örtülü bir varsayım vardı. aşağıdaki kod parçasında görülebileceği gibi. Ancak iddia, v1 işlemi durumunda işletim sistemi tarafından çağrılan, ancak v0 işleminde sözleşmenin __execute__ işlevi tarafından çağrılması gereken doğrulama işlevine yerleştirildi.
Bu nedenle, yalnızca v1 işlemini desteklemek isteyen bir hesap sözleşmesi, işletim sistemi __validate__ işlevini çağırmadığından sürüm iddiasını __execute__ işlevine yerleştirmelidir.
Çıkarımlar
Yukarıdaki güvenlik açığı göz önüne alındığında, bir saldırgan boş (veya anlamsız) imzalı herhangi bir v0 işlemi gönderebilir ve bu işlem hiçbir sorun olmadan geçecek ve blokta geçerli bir işlem olarak yer alacaktır.
Bunun herhangi bir kullanıcı eylemi veya etkileşimi gerektirmeyen bir sıfır tıklama saldırısı olduğunu unutmamak önemlidir.. Bir saldırgan, ağda dağıtılan tüm yeni ve güncellenmiş Argent hesaplarını gözden geçirebilir ve her bir hesaptaki tüm varlıkları kendi seçtiği bir hesaba aktarabilirdi.
Sorunun keşfedilmesi
Braavos’ta testlere büyük önem veririz ve buna inanırız. Özellikle sözleşme testleri. Cüzdan desteğimizi v0.10.x için yayınlamaya yönelik hazırlıklarımızın bir parçası olarak kapsamlı bir test paketi oluşturduk ve bu süreç sırasında, işlem sürümünün nerede doğrulanacağına ilişkin bu problem ortaya çıktı.
Bu, standart Starknet Geliştirme araçlarıyla yeniden üretilmesi zor olan oldukça hassas bir sorun olduğundan, diğer hesap sözleşmesi geliştiricilerinin gözünden kaçabileceğini düşündük, bu nedenle test setimizi bitirir bitirmez, bunun gerçek bir sorun mu yoksa sadece yersiz bir endişe mi olduğunu kontrol etmek için odağımızı değiştirdik.
Ve gerçekten de, Argent hesap sözleşmesini kontrol etmeye başladığımızda, kısa sürede sorun kendini gösterdi. Güvenlik açığını çok hızlı bir şekilde yeniden doğrulamayı başardık.
Aşağıda, herhangi bir Cüzdan Uygulaması etkileşimi olmadan doğrudan Starknet altyapısına verilen zincir üzerinde kabul edilen bir işlem örneği yer almaktadır. İşlem imzası boş bir imzadır ve ETH’yi savunmasız bir Argent hesabından rastgele bir hesaba aktarmıştır.
https://starkscan.co/tx/0xe822d983f9c5d3ff320037812633435edcd71afa725e16d84af700973b0da
Sorumluluk Beyanı
16 Kasım Çarşamba gecesi, imzasız ilk işlem gerçekleştikten sonra, sorunun ciddiyetini ve kullanıcılara verebileceği zararı hemen anladık. Gereksiz bir hasara neden olmamak için bunu iki kez kontrol ettik ve tekrar doğruladk.
Braavos olarak, doğru olanın bu olduğuna inandığımız için “rakiplerimize” bile sorumlu bir şekilde açıklama yapmaya kararlıyız.
Ayrıca, ana kaygımız ekosistemin refahı ve kullanıcıların fonlarının güvenliğidir.
Olayların gelişim kronoljisi
- 4-Kasım-2022 tarihinde yeni bir Argent uygulama sözleşmesi zincir üzerinde dağıtıma konuldu
- 14-Kasım-2022 tarihinde, yeni ve yükseltilmiş hesaplar için yeni uygulama sözleşmesini kullanan yeni bir Argent-X uzantı uygulaması yayınlandı
- 16-Kasım-2022 tarihinde, saat 21:23’te Braavos ekibi, ele geçirilmiş bir Argent hesabından para aktaran boş imzalı bir işlem gerçekleştirdi.
- TSİ 22:01’de Braavos ekibi güvenlik açığını Slack üzerinden Argent ekibine bildirdi – sorunla ilgili tüm ayrıntıları, nasıl yeniden üretileceğini ve zincir üzerindeki kötü niyetli işlem örneğini ve bunu düzeltmek için yapılması gerekenleri iletti.
- TSİ 22:11’de Braavos ekibi Slack üzerinden Starkware ekibini de uyardı, böylece Argent’in bu kadar geç bir saatte mesajı gördüğünden emin olabilirlerdi.
- TSİ 22:35’te Starkware ekibi yanıt verdi ve Argent’e ulaşmaya çalıştı
- TSİ 22:43’te Argent ekibi mesajı gördüklerini ve konuyla ilgilendiklerini kabul etti
- Braavos ekibi TSİ 23:53’te Starkware’e geçici bir önlem almasını ve bir düzeltme yapılana kadar fon kaybını önlemek için bu tür işlemleri sınırlandırmasını önerdi*
- 17 Kasım 1:03 CET’te Argent güncellendi ve mağazalarda onay için yeni bir sürüm gönderdiler. Sürüm, kısa bir süre sonra kamuya açık hale getirildi
- 17 Kasım günü TSİ 14:00 sularında Starkware, StarkNet işletim sisteminde bir güncelleme yayınlayarak Braavos’un önerdiği geçici önlemi uygulamaya koydu ve bu tür etkilenen işlemleri engellemeye başladı
Aciliyet
(*) – Argent birkaç saat içinde bir düzeltme yayınlasa bile (gerçekten de olduğu gibi!), yamalı sürümün Chrome mağazasında onaylanmasının zaman alacağını ve kullanıcıların yeni sözleşmeye yükseltme yapmasının daha da zaman alacağını biliyorduk. Bu nedenle, protokol düzeyinde bir çözüm bulmaya çalışmak için Starkware ekibiyle birlikte çalışmaya devam ettik. Ardından, bu özel Argent sözleşmesi uygulamasına v0 işlemlerinin engellenmesini ve böylece bir saldırganın, ilgili tüm kullanıcıların Argent cüzdan + hesap sözleşmelerini sabit sürüme yükseltmeleri için geçecek birkaç gün içinde durumdan yararlanamayacağının garanti altına alınmasını önerdik.
Argent ekibinin sorunu ele alma ve raporlamadan sonraki 3 kısa saat içinde mağazalara bir düzeltme gönderme konusundaki hızlı ve özverili girişimini takdir ediyoruz. Bu sorunu bir dApp/cüzdan sorunu olarak görmeyen Starkware ekibine de teşekkür ediyoruz. Kullanıcıların tehlikeye girmemesini sağlamak için elinden gelen her şeyi yapmaya kararlılardı.
Tüm tarafların hızlı eylemi nedeniyle herhangi bir, fon kaybı yaşanmadı.
Sonuç
Esneklik olarak akıllı sözleşme tabanlı cüzdanların hepimizin geleceği olduğuna eminiz. Güvenlikten ödün vermeden çok daha iyi bir kullanıcı deneyimi için kapı açıyor.
Cüzdanların güvenlikten ödün vermemesini sağlarken, günlük kullanıcılara klasik tradFi/web2 çözümlerinden alışkın oldukları deneyimi sunacaktır.
StarkNet ekosistemi henüz alfa aşamasındadır ve bu nedenle ağın hızlanması ve ağın genel işlevselliğini ileriye taşıyacak değişiklikler ve yükseltmeler sunması beklenmektedir.
Ağ üzerinde çalışan tüm geliştiricilerin daha dikkatli olması ve TEST TEST TESTyapması gerekmektedir!