Move dilinde referans güvenlik mekanizmasında yeni bir tam sayı taşma açığı bulundu
Son zamanlarda, Move dilini derinlemesine araştırırken, yeni bir tamsayı taşma açığı keşfettik. Bu açık, güvenlik doğrulama sürecinde meydana geliyor ve Move dilinin bazı temel mekanizmalarını içeriyor. Bu açığı analiz ederek, Move dilinin tasarımı ve uygulanışı hakkında daha derin bir anlayış kazanabiliriz.
Move dilinin doğrulama süreci
Move dili, byte kodunu çalıştırmadan önce kod birimlerini doğrular, bu süreç 4 adıma ayrılmıştır. Bu keşfedilen güvenlik açığı reference_safety adımında ortaya çıkmıştır.
reference_safety modülü, referans güvenliğini doğrulamak için temel işlevleri tanımlar. Bu, asılı referansların varlığını, değişken referans erişiminin güvenli olup olmadığını, küresel depolama referans erişiminin güvenli olup olmadığını gibi sorunları kontrol eder.
Doğrulama sürecinin giriş fonksiyonu, her bir fonksiyonu analiz etmek için analyze_function'ı çağırır. Analyze_function, fonksiyondaki her bir temel bloğu doğrular. Temel blok, giriş ve çıkış dışında dalga komutları olmayan kod dizisidir.
Move dilinde referans güvenliği
Move dili, iki tür referans türünü destekler: değiştirilemez referans (&) ve değiştirilebilir referans (&mut). Değiştirilemez referanslar veri okumak için, değiştirilebilir referanslar ise verileri değiştirmek için kullanılır. Bu tasarım, kodun güvenliğini ve okunabilirliğini artırmaya yardımcı olur.
Referans güvenlik doğrulama modülü, işlevdeki her temel bloğun bayt kodu talimatlarını tarar ve tüm referans işlemlerinin geçerli olup olmadığını belirler. Doğrulama süreci esasen şunları içerir:
Temel blok kodunu çalıştır
Birleştirilmiş yürütme öncesi ve sonrası durum
Blok durumunu güncelle
Son koşulları sonraki bloklara yaymak
Bu süreç, V8 turbofan içindeki Sea of Nodes fikrine benzer.
Açık Analizi
Hata, birleştirmenin yürütülmeden önceki ve sonraki durumlarının işlenmesi sırasında ortaya çıkıyor. Fonksiyon parametrelerinin uzunluğu ile yerel değişkenlerin uzunluğu 256'dan büyük olduğunda, yerel değişken indeksini belirtmek için u8 türü kullanıldığından, tam sayı taşması meydana geliyor.
Move dilinin yerel değişken sayısını kontrol eden bir süreci olsa da, bu kontrol parametre uzunluğunu kapsamamaktadır. Geliştiriciler, parametreler ve yerel değişkenlerin toplamının kontrol edilmesi gerektiğini fark etmiş gibi görünüyor, ancak gerçek kodda yalnızca yerel değişkenlerin sayısı kontrol edilmiştir.
Bu tam sayı taşması, hizmet reddi saldırısına (DoS) yol açabilir (. Saldırgan, taşmayı kullanarak blok durumunu değiştirmek için döngüsel bir kod bloğu oluşturabilir. Temel blok tekrar çalıştırıldığında, eğer talimatların erişmeye çalıştığı indeks yeni durumda mevcut değilse, program çökmesine neden olur.
![Numen Cyber'ın özel keşfi move dilinde bir başka yüksek riskli açık])https://img-cdn.gateio.im/webp-social/moments-6952376046c901dfae2b19d5144746b5.webp(
![Numen Cyber'ın özel keşfi: move dilinde bir başka yüksek riskli güvenlik açığı])https://img-cdn.gateio.im/webp-social/moments-92892f2a9dffea9f805f3a1952e82703.webp(
![Numen Cyber'in özel bulgusu move dilinde bir yüksek riskli güvenlik açığı daha])https://img-cdn.gateio.im/webp-social/moments-1347ef8b31983109babdf8ef29270c67.webp(
![Numen Cyber, move dilinde başka bir yüksek riskli güvenlik açığı keşfetti])https://img-cdn.gateio.im/webp-social/moments-ac937ab4f426d30a476feb32520a95b4.webp(
![Numen Cyber özel keşfi move dilinde bir başka yüksek riskli açık])https://img-cdn.gateio.im/webp-social/moments-a18dcf64108d1a75b728ffe8391100f1.webp(
![Numen Cyber, move dilinde bir yüksek riskli açık daha keşfetti])https://img-cdn.gateio.im/webp-social/moments-7c8fe4e4cf376ad49d729a6f80df6f08.webp(
![Numen Cyber, move dilinde bir başka yüksek riskli güvenlik açığını keşfetti])https://img-cdn.gateio.im/webp-social/moments-c598d61833550ec5494f9a5a4ee2a760.webp(
![Numen Cyber'ın özel bulgusu move dilinde bir yüksek riskli güvenlik açığı daha])https://img-cdn.gateio.im/webp-social/moments-12c60c225a5629f6d927982a7585fc5b.webp(
![Numen Cyber'ın özel keşfi move dilinde bir diğer yüksek tehlike açığı])https://img-cdn.gateio.im/webp-social/moments-94b0c97bb9e287ed715cddb5165f129d.webp(
Açık Kullanımı
Bu açığı göstermek için )PoC( adıyla bir konsept kanıtı oluşturduk:
Koşulsuz dalış talimatı içeren bir temel blok oluşturun ve bunu birden fazla kez çalıştırın.
Parametreler ve yerel değişkenlerin toplam sayısını 264 olarak ayarlamak, yeni yerel değişken eşlemesi uzunluğunun 8'e taşmasını sağlıyor.
Temel blok tekrar çalıştırıldığında, var olmayan bir yerel değişken indeksine erişim denemesi panic'e neden olur.
![Numen Cyber özel keşfi move dilinde bir başka yüksek riskli güvenlik açığı])https://img-cdn.gateio.im/webp-social/moments-095e2b585c45a86b0a689214ca673619.webp(
![Numen Cyber özel keşfi move dilinde bir başka yüksek riskli açık])https://img-cdn.gateio.im/webp-social/moments-5ebaa03263f7a87edd78d146c5beadd2.webp(
![Numen Cyber, move dilinde başka bir yüksek riskli güvenlik açığı keşfetti])https://img-cdn.gateio.im/webp-social/moments-fe905356cbee596e8aba08ec14f5d508.webp(
![Numen Cyber özel keşfi move dilinde bir başka yüksek riskli açık])https://img-cdn.gateio.im/webp-social/moments-ae25cc7d31726e2e1477e6d112b7aa75.webp(
Sonuç
Bu açık, kesinlikle güvenli bir kodun olmadığını bir kez daha kanıtladı. Move dilinin yürütülmeden önce statik doğrulama yaptığına rağmen, yine de tam sayı taşma açığı tarafından aşılabilir.
Move dilinin gelecekteki gelişimi için öneriyoruz:
Çalışma sırasında beklenmeyen durumların meydana gelmesini önlemek için daha fazla kontrol kodu ekleyin.
Sadece doğrulama aşamasındaki güvenlik kontrollerine güvenmeyin, aynı zamanda çalıştırma aşamasında güvenlik güçlendirmesi yapmalısınız.
Move dilinin güvenlik araştırmalarında öncü olarak, Move'un güvenlik sorunlarını derinlemesine incelemeye devam edeceğiz ve gelişimine katkıda bulunacağız.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
16 Likes
Reward
16
3
Share
Comment
0/400
SnapshotLaborer
· 20h ago
Beş dakika ders çalıştıktan sonra hata bildirmeye gitmişsin.
View OriginalReply0
RadioShackKnight
· 21h ago
çamur duvara yapışmaz
View OriginalReply0
LayerZeroHero
· 21h ago
Bir şey söylemek gerekirse, move da bu kadar işte.
Move dilinin referans güvenlik doğrulamasında yeni bir tam sayı taşma açığı bulundu.
Move dilinde referans güvenlik mekanizmasında yeni bir tam sayı taşma açığı bulundu
Son zamanlarda, Move dilini derinlemesine araştırırken, yeni bir tamsayı taşma açığı keşfettik. Bu açık, güvenlik doğrulama sürecinde meydana geliyor ve Move dilinin bazı temel mekanizmalarını içeriyor. Bu açığı analiz ederek, Move dilinin tasarımı ve uygulanışı hakkında daha derin bir anlayış kazanabiliriz.
Move dilinin doğrulama süreci
Move dili, byte kodunu çalıştırmadan önce kod birimlerini doğrular, bu süreç 4 adıma ayrılmıştır. Bu keşfedilen güvenlik açığı reference_safety adımında ortaya çıkmıştır.
reference_safety modülü, referans güvenliğini doğrulamak için temel işlevleri tanımlar. Bu, asılı referansların varlığını, değişken referans erişiminin güvenli olup olmadığını, küresel depolama referans erişiminin güvenli olup olmadığını gibi sorunları kontrol eder.
Doğrulama sürecinin giriş fonksiyonu, her bir fonksiyonu analiz etmek için analyze_function'ı çağırır. Analyze_function, fonksiyondaki her bir temel bloğu doğrular. Temel blok, giriş ve çıkış dışında dalga komutları olmayan kod dizisidir.
Move dilinde referans güvenliği
Move dili, iki tür referans türünü destekler: değiştirilemez referans (&) ve değiştirilebilir referans (&mut). Değiştirilemez referanslar veri okumak için, değiştirilebilir referanslar ise verileri değiştirmek için kullanılır. Bu tasarım, kodun güvenliğini ve okunabilirliğini artırmaya yardımcı olur.
Referans güvenlik doğrulama modülü, işlevdeki her temel bloğun bayt kodu talimatlarını tarar ve tüm referans işlemlerinin geçerli olup olmadığını belirler. Doğrulama süreci esasen şunları içerir:
Bu süreç, V8 turbofan içindeki Sea of Nodes fikrine benzer.
Açık Analizi
Hata, birleştirmenin yürütülmeden önceki ve sonraki durumlarının işlenmesi sırasında ortaya çıkıyor. Fonksiyon parametrelerinin uzunluğu ile yerel değişkenlerin uzunluğu 256'dan büyük olduğunda, yerel değişken indeksini belirtmek için u8 türü kullanıldığından, tam sayı taşması meydana geliyor.
Move dilinin yerel değişken sayısını kontrol eden bir süreci olsa da, bu kontrol parametre uzunluğunu kapsamamaktadır. Geliştiriciler, parametreler ve yerel değişkenlerin toplamının kontrol edilmesi gerektiğini fark etmiş gibi görünüyor, ancak gerçek kodda yalnızca yerel değişkenlerin sayısı kontrol edilmiştir.
Bu tam sayı taşması, hizmet reddi saldırısına (DoS) yol açabilir (. Saldırgan, taşmayı kullanarak blok durumunu değiştirmek için döngüsel bir kod bloğu oluşturabilir. Temel blok tekrar çalıştırıldığında, eğer talimatların erişmeye çalıştığı indeks yeni durumda mevcut değilse, program çökmesine neden olur.
![Numen Cyber'ın özel keşfi move dilinde bir başka yüksek riskli açık])https://img-cdn.gateio.im/webp-social/moments-6952376046c901dfae2b19d5144746b5.webp(
![Numen Cyber'ın özel keşfi: move dilinde bir başka yüksek riskli güvenlik açığı])https://img-cdn.gateio.im/webp-social/moments-92892f2a9dffea9f805f3a1952e82703.webp(
![Numen Cyber'in özel bulgusu move dilinde bir yüksek riskli güvenlik açığı daha])https://img-cdn.gateio.im/webp-social/moments-1347ef8b31983109babdf8ef29270c67.webp(
![Numen Cyber, move dilinde başka bir yüksek riskli güvenlik açığı keşfetti])https://img-cdn.gateio.im/webp-social/moments-ac937ab4f426d30a476feb32520a95b4.webp(
![Numen Cyber özel keşfi move dilinde bir başka yüksek riskli açık])https://img-cdn.gateio.im/webp-social/moments-a18dcf64108d1a75b728ffe8391100f1.webp(
![Numen Cyber, move dilinde bir yüksek riskli açık daha keşfetti])https://img-cdn.gateio.im/webp-social/moments-7c8fe4e4cf376ad49d729a6f80df6f08.webp(
![Numen Cyber, move dilinde bir başka yüksek riskli güvenlik açığını keşfetti])https://img-cdn.gateio.im/webp-social/moments-c598d61833550ec5494f9a5a4ee2a760.webp(
![Numen Cyber'ın özel bulgusu move dilinde bir yüksek riskli güvenlik açığı daha])https://img-cdn.gateio.im/webp-social/moments-12c60c225a5629f6d927982a7585fc5b.webp(
![Numen Cyber'ın özel keşfi move dilinde bir diğer yüksek tehlike açığı])https://img-cdn.gateio.im/webp-social/moments-94b0c97bb9e287ed715cddb5165f129d.webp(
Açık Kullanımı
Bu açığı göstermek için )PoC( adıyla bir konsept kanıtı oluşturduk:
![Numen Cyber özel keşfi move dilinde bir başka yüksek riskli güvenlik açığı])https://img-cdn.gateio.im/webp-social/moments-095e2b585c45a86b0a689214ca673619.webp(
![Numen Cyber özel keşfi move dilinde bir başka yüksek riskli açık])https://img-cdn.gateio.im/webp-social/moments-5ebaa03263f7a87edd78d146c5beadd2.webp(
![Numen Cyber, move dilinde başka bir yüksek riskli güvenlik açığı keşfetti])https://img-cdn.gateio.im/webp-social/moments-fe905356cbee596e8aba08ec14f5d508.webp(
![Numen Cyber özel keşfi move dilinde bir başka yüksek riskli açık])https://img-cdn.gateio.im/webp-social/moments-ae25cc7d31726e2e1477e6d112b7aa75.webp(
Sonuç
Bu açık, kesinlikle güvenli bir kodun olmadığını bir kez daha kanıtladı. Move dilinin yürütülmeden önce statik doğrulama yaptığına rağmen, yine de tam sayı taşma açığı tarafından aşılabilir.
Move dilinin gelecekteki gelişimi için öneriyoruz:
Move dilinin güvenlik araştırmalarında öncü olarak, Move'un güvenlik sorunlarını derinlemesine incelemeye devam edeceğiz ve gelişimine katkıda bulunacağız.