Harcama Limiti Yokluğu: Tam Bakiye Riski
x402, yazılımların ve yapay zeka ajanlarının API çağrıları için her işlemde insan onayı gerekmeksizin HTTP protokolü üzerinden ödeme yapmasına olanak tanıyan açık bir standarttır. Sistemin işleyişinde bir sunucu ödeme talep ettiğinde HTTP 402 durum koduyla yanıt verir; istemci ise sunucunun sunduğu seçeneklerden birini seçerek ödemeyi imzalar ve isteği yeniden gönderir.Açığın özü şuydu: Varsayılan istemci, listedeki ilk seçeneği otomatik olarak kabul ediyor ve 18 Ağustos öncesinde bu seçenek için herhangi bir harcama limiti koymuyordu. Kötü niyetli bir API, sıradan bir veri isteğini cüzdandaki desteklenen tokenin tamamını talep eden bir ödeme isteğine dönüştürebilirdi. Üstelik daha önce yapılmış küçük bir ödeme cüzdan adresini açığa çıkarabileceğinden saldırgan önce bakiyeyi öğrenip ardından tam tutarı talep edebilirdi. Otomatik imzalama açık ve uygulama tarafında herhangi bir ödeme politikası tanımlanmamışsa istemci bu tutarı imzalayabiliyordu. İmzalı transferleri destekleyen tokenlar söz konusu olduğunda saldırgan imzalanmış ödemeyi sisteme göndererek fonları tahsil edebilirdi.
18 Ağustos güncellemeleri TypeScript, Python ve Go istemcilerine harcama kontrolü ekledi. Yeni varsayılan ayarlara göre her ödeme 1 dolarla sınırlandırıldı ve yalnızca SDK'nın tanıdığı USDC gibi ABD doları bazlı stablecoinlere izin verildi.
Solana'da Sıfır Transferle Geçerli Ödeme Yanılsaması
x402'de bir satıcının sunucusu, her ödemeyi doğrulayıp blok zincirine gönderen bir kolaylaştırıcıya (facilitator) dayanır. Solana özelinde kolaylaştırıcı aynı zamanda işlem ücretini de öder. TypeScript kolaylaştırıcı kodundaki açık, token transferi yerine yalnızca başka bir hesabın ileride token harcamasına izin veren bir token onayını (token approval) geçerli ödeme olarak kabul ediyordu. İki işlem türü arasındaki tek fark ilk bayttı ve bu fark kontrol edilmiyordu.V12'nin yerel ortamda yaptığı testlerde kolaylaştırıcı böyle bir onayı geçerli ödeme saydı. Gerçek bir işlem blok zincirine gönderilmedi; ancak test, açığın varlığını doğruladı. Buna göre hiç token hareketi olmaksızın bir satıcı ödeme yapılmış gibi hizmet sunabilirdi. Saldırganın bir token hesabına ihtiyacı vardı ama bakiye şartı yoktu; üstelik işlem ücretini kolaylaştırıcı karşılıyordu. Python ve Go SDK'larında bu kontrol zaten mevcuttu; 18 Ağustos güncellemesiyle TypeScript koduna da eklendi. The Hacker News'in yaptığı incelemeye göre @x402/svm paketinin 2.0.0'dan 2.22.0'a kadar olan tüm sürümleri bu kontrolden yoksunken 2.23.0 ve sonrasındaki sürümlerde kontrol mevcut.
Oturum Açma Mesajlarının Farklı Sitelere Yönlendirilmesi
x402'nin Sign-In-With-X (SIWx) adlı uzantısı, bir ajanın cüzdanıyla kısa bir mesaj imzalayarak oturum açmasına imkân tanır; bu yöntem örneğin daha önce yapılmış bir ödemeyi kanıtlamak amacıyla kullanılabilir. Ethereum'da bu mesaj web sitesini, cüzdan adresini ve tek kullanımlık bir kodu içerir.Açıklanan güvenlik açığında otomatik istemci, mesajda adı geçen web sitesinin gerçekten iletişim kurduğu site olup olmadığını doğrulamıyordu. Kötü niyetli bir sunucu başka bir siteden taze bir oturum açma mesajı alarak bunu ajana imzalatabilir, ardından elde ettiği imzayı o siteye sunup ajanın cüzdanı adına oturum açabilirdi. Saldırgan bu sayede hedef sitedeki oturum açmaya bağlı tüm erişim haklarını ele geçirmiş olurdu.
18 Ağustos güncellemeleriyle TypeScript, Python ve Go istemcileri, mesajdaki site ile 402 yanıtını gönderen site eşleşmediğinde imzalamayı reddedecek biçimde güncellendi. SIWx spesifikasyonu da bu zorunluluğu açıkça belirtecek şekilde değiştirildi.
Güvenlik Uyarısı Yayımlanmadı, Paket Denetimleri Sessiz Kaldı
V12, açıkları kod incelemesi ve yerel testlerle keşfetti. Ne V12 ne de x402 Vakfı, bu açıkları kullanan herhangi bir saldırı vakasını kamuoyuyla paylaştı. Vakfın değişiklik günlükleri düzeltmeleri listelese de bunları güvenlik düzeltmesi olarak tanımlamıyor; ayrıca üç kritik açık için herhangi bir güvenlik duyurusu yayımlanmadı.The Hacker News'in 23 Ekim itibarıyla yaptığı kontrolde, düzeltmelerden önceki son TypeScript sürümleri için npm audit herhangi bir uyarı döndürmedi; Python sürümleri için de PyPI'da kayıtlı bir güvenlik açığı bulunmuyordu. Bu durum, yalnızca bu denetimlere güvenen geliştiricilerin güncelleme yapmaları gerektiğine dair hiçbir uyarı almadığı anlamına geliyor.
x402'yi geliştiren Coinbase, projeyi bu yıl Linux Vakfı bünyesinde kurulan x402 Vakfı'na devretti. Vakfın üyeleri arasında Visa ve Mastercard yer alıyor; Coinbase ise vakfın teknik yönlendirme komitesinde en üst düzey koltuğu tutuyor.
Güncelleme Önerileri ve Alınması Gereken Önlemler
23 Ekim itibarıyla güncel sürümler şöyle: @x402/core, @x402/svm, @x402/extensions, @x402/fetch ve @x402/axios için 2.28.0; Go modülü için v2.28.0; Python paketi için 2.25.0. TypeScript istemcilerinde harcama düzeltmesi için @x402/fetch veya @x402/axios'un 2.23.0 veya üzerine güncellenmesi yeterli. SIWx kullanan uygulamaların ayrıca @x402/extensions 2.23.0 veya üstüne geçmesi gerekiyor. Solana ödemelerini doğrulayan kolaylaştırıcılar için @x402/svm 2.23.0 veya üstü zorunlu.Güncelleme sonrasında mevcut istemciler, uygulama tarafında farklı bir yapılandırma belirtilmedikçe işlem başına 1 dolar ve yalnızca tanınan stablecoinlerle sınırlı kalacak. spendControls: false parametresi bu kontrollerin tamamını devre dışı bırakıyor. Henüz güncelleme yapamayan ekipler, TypeScript ve Go'da registerPolicy, Python'da ise register_policy ile belirli bir tutarın üzerindeki seçenekleri düşüren bir ödeme politikası tanımlayabilir. Python ayrıca hazır bir max_amount politikası sunuyor. V12, istemcilerin SIWx oturum açma mesajlarındaki site bilgisini imzalamadan önce doğrulamasını, her ödeme ve toplam harcama için bütçe belirlemesini ve yalnızca güvenilir token, ağ ve alıcılarla işlem yapmasını tavsiye ediyor. Ayrıca Eylül ayında @x402/core 2.27.0'da ayrı bir ödeme atlatma açığı daha kapatıldığından en güncel sürüme geçmek ek koruma da sağlıyor.

Yazılım ve Uygulamalar
Yazılım ve Uygulamalar
Yazılım ve Uygulamalar
Yorumlar (0)
Yorum yapmak için giriş yapmalısınız.