Solidity Derleyici Açıkları Analizi ve Müdahale Stratejileri
Derleyici, modern bilgisayar sistemlerinin temel bileşenlerinden biridir ve yüksek seviye programlama dillerini alt seviye çalıştırılabilir talimatlara dönüştürmekten sorumludur. Geliştiriciler genellikle uygulama kodu güvenliğine odaklansalar da, derleyicinin kendisinin güvenliği de aynı derecede önemlidir. Derleyici zafiyetleri bazı durumlarda ciddi güvenlik risklerine yol açabilir; örneğin, tarayıcı JavaScript motoru zafiyetleri uzaktan kod yürütmeye neden olabilir.
Solidity derleyicisi de istisna değildir, birden fazla versiyonda güvenlik açıkları bulunmaktadır. EVM açıklarından farklı olarak, Solidity derleyici açıkları yalnızca sözleşme geliştiricilerini etkiler, doğrudan Ethereum ağı güvenliğini tehdit etmez. Ancak, geliştiricinin beklediğinden farklı EVM kodu üretilmesine neden olabilir ve bu da akıllı sözleşme açıklarını tetikleyerek kullanıcı varlıklarının güvenliğini tehdit edebilir.
Aşağıda birkaç gerçek Solidity derleyici açığı örneği bulunmaktadır:
SOL-2016-9 Yüksek Düzen Baytı Temiz Depolama
Etkileyen sürüm:>=0.1.6 <0.4.4
Bu açık, storage değişkeninin yanlışlıkla değiştirilmesine neden olabilir. Örneğin:
katılık
contract C {
uint32 a = 0x1234;
uint32 b = 0;
function run() returns (uint) {
a += 1;
return b;
}
}
run() fonksiyonu 0 döndürmeli, ancak gerçekte 1 döndürüyor. Bunun nedeni, derleyicinin tamsayı taşmasını işlerken yüksek bitleri doğru bir şekilde temizlememesi ve taşma bitinin bitişik değişkene yazılmasıdır.
SOL-2022-4 InlineAssemblyMemorySideEffects
Etkileyen sürüm:>=0.8.13 <0.8.15
Bu açık, derleme optimizasyon sürecinden kaynaklanmaktadır. Örneğin:
katılık
sözleşme C {
function f() public pure returns (uint) {
montaj {
mstore(0, 0x42)
}
uint x;
montaj {
x := mload(0)
}
return x;
}
}
f() fonksiyonu 0x42 döndürmelidir, ancak hata içeren sürüm 0 döndürüyor. Bunun nedeni, derleyicinin ilk assembly bloğundaki bellek yazma işlemini yanlışlıkla kaldırmasıdır.
Bu güvenlik açığı, calldata dizisinin ABI kodlamasını içerir. Örneğin:
katılık
contract C {
function f(bytes[1] calldata a) public pure returns (bytes memory) {
return abi.encode(a);
}
}
f() fonksiyonu, giriş dizisini döndürmelidir, ancak hatalı sürüm boş bir dize döndürecektir. Bu, derleyicinin kodlama sürecinde bitişik verileri yanlış bir şekilde temizlemesinden kaynaklanmaktadır.
Solidity derleyici güvenlik açıklarını azaltmak için geliştiricilerin:
Daha yeni bir derleyici sürümü kullanın
Birim testlerini geliştirin, kod kapsamını artırın
İç içe derlemeleri, çok boyutlu dizi ABI kodlaması gibi karmaşık dil özelliklerinin kullanılmasından kaçının.
Güvenlik denetim uzmanları şunları yapmalıdır:
Denetim sürecinde derleyiciye ilişkin potansiyel riskleri dikkate almak
Geliştirme ekibinin derleyici sürümünü zamanında güncellemesini öneririz.
CI/CD sürecine derleyici versiyonu otomatik kontrolü ekleyin
Faydalı referans kaynakları:
Solidity resmi güvenlik uyarısı blogu
Solidity GitHub deposundaki hata listesi
Etherscan sözleşme sayfasındaki derleyici açık uyarısı
Sonuç olarak, derleyici açıkları nadir olsa da etkileri ciddi olabilir. Geliştiricilerin ve güvenlik uzmanlarının dikkatli olması ve riski azaltmak için uygun önlemleri alması gerekmektedir.
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.
8 Likes
Reward
8
5
Share
Comment
0/400
blockBoy
· 1h ago
Yine bir sözleşme açığı, gerçekten sinir bozucu~
View OriginalReply0
GasGuzzler
· 19h ago
Yine derleyici bir şeyler yapıyor.
View OriginalReply0
GweiTooHigh
· 19h ago
Ne yapıyorlar, yine bir açık bulmuşlar.
View OriginalReply0
RektRecovery
· 19h ago
*of* bir tahmin edilebilir güvenlik açığı daha... Geliştiriciler ne zaman ateşle oynamayı bırakacaklar?
Solidity Derleyici Açıkları: Güvenlik Riskleri ve Müdahale Stratejileri
Solidity Derleyici Açıkları Analizi ve Müdahale Stratejileri
Derleyici, modern bilgisayar sistemlerinin temel bileşenlerinden biridir ve yüksek seviye programlama dillerini alt seviye çalıştırılabilir talimatlara dönüştürmekten sorumludur. Geliştiriciler genellikle uygulama kodu güvenliğine odaklansalar da, derleyicinin kendisinin güvenliği de aynı derecede önemlidir. Derleyici zafiyetleri bazı durumlarda ciddi güvenlik risklerine yol açabilir; örneğin, tarayıcı JavaScript motoru zafiyetleri uzaktan kod yürütmeye neden olabilir.
Solidity derleyicisi de istisna değildir, birden fazla versiyonda güvenlik açıkları bulunmaktadır. EVM açıklarından farklı olarak, Solidity derleyici açıkları yalnızca sözleşme geliştiricilerini etkiler, doğrudan Ethereum ağı güvenliğini tehdit etmez. Ancak, geliştiricinin beklediğinden farklı EVM kodu üretilmesine neden olabilir ve bu da akıllı sözleşme açıklarını tetikleyerek kullanıcı varlıklarının güvenliğini tehdit edebilir.
Aşağıda birkaç gerçek Solidity derleyici açığı örneği bulunmaktadır:
Etkileyen sürüm:>=0.1.6 <0.4.4
Bu açık, storage değişkeninin yanlışlıkla değiştirilmesine neden olabilir. Örneğin:
katılık contract C { uint32 a = 0x1234; uint32 b = 0; function run() returns (uint) { a += 1; return b; } }
run() fonksiyonu 0 döndürmeli, ancak gerçekte 1 döndürüyor. Bunun nedeni, derleyicinin tamsayı taşmasını işlerken yüksek bitleri doğru bir şekilde temizlememesi ve taşma bitinin bitişik değişkene yazılmasıdır.
Etkileyen sürüm:>=0.8.13 <0.8.15
Bu açık, derleme optimizasyon sürecinden kaynaklanmaktadır. Örneğin:
katılık sözleşme C { function f() public pure returns (uint) { montaj { mstore(0, 0x42) } uint x; montaj { x := mload(0) } return x; } }
f() fonksiyonu 0x42 döndürmelidir, ancak hata içeren sürüm 0 döndürüyor. Bunun nedeni, derleyicinin ilk assembly bloğundaki bellek yazma işlemini yanlışlıkla kaldırmasıdır.
Etkileyen versiyon:>= 0.5.8 < 0.8.16
Bu güvenlik açığı, calldata dizisinin ABI kodlamasını içerir. Örneğin:
katılık contract C { function f(bytes[1] calldata a) public pure returns (bytes memory) { return abi.encode(a); } }
f() fonksiyonu, giriş dizisini döndürmelidir, ancak hatalı sürüm boş bir dize döndürecektir. Bu, derleyicinin kodlama sürecinde bitişik verileri yanlış bir şekilde temizlemesinden kaynaklanmaktadır.
Solidity derleyici güvenlik açıklarını azaltmak için geliştiricilerin:
Güvenlik denetim uzmanları şunları yapmalıdır:
Faydalı referans kaynakları:
Sonuç olarak, derleyici açıkları nadir olsa da etkileri ciddi olabilir. Geliştiricilerin ve güvenlik uzmanlarının dikkatli olması ve riski azaltmak için uygun önlemleri alması gerekmektedir.