| Missing Block Delimitation Açıklığı (CWE-483) | |||||
| Bu makalede Missing Block Delimitation (CWE-483), yani blok sınırlandırma eksikliği güvenlik kusuru anlatılacaktır.
Güvenlik Açıklığı vs. Güvenlik Kusuru
Bu makale için seçilen başlıkta "açıklık" kelimesi yer almaktadır. Fakat bu ifade belki "dolaylı açıklık" şeklinde güncellenebilir. İstismar edilebilir güvenlik problemlerine güvenlik açıklığı denirken istismar edilemez güvenlik problemlerine güvenlik kusuru adı verilir. Bu makalede ele alınan esasında bir güvenlik kusurudur. Her güvenlik kusurunda güvenlik açıklığına yükselebilecek ihtimaller vardır. Diğer bir ifadeyle; her bir güvenlik kusurunda ilgili şartların sağlandığı durum senaryosu gelecekte meydana geldiğinde başarılı sızma girişimine gidebilecek yollar vardır. Bu sebeple güvenlik kusurları MITRE'nin CWE uluslararası güvenlik açıklıkları veritabanında güvenlik açıklıkları ile birarada beraber yer almaktadır. Statik kod analizi testlerinde uygulamaların geleceğini güvence altına almak için bugünden güvenlik kusurlarının titizlikle çözülmesi tavsiye edilir. Açıklık Önem Derecesi: Düşük Açıklığın Etkisi: Uygulama güvenliğinin sürdürülebilirliğini azaltma Açıklığın Açıklaması: Programlama dillerinin bazısında blokları sınırlandırmak adına parantezler (veya diğer sınırlandırıcılar) isteğe bağlı şekilde kullanılır. Eğer bir blokta sınırlandırıcıya yer verilmiyorsa blokta olduğu düşünülen bir ifade blok içerisinde ele alınmaması durumu yaşanabilir ve bu durum mantıksal bir hataya sebebiyet verebilir. Bazı durumlarda bu mantıksal hata güvenlik etkilerine sahip olabilir. if ifadelerinde, for döngülerinde v.b. blok yapılarda süslü parantezlere yer verilmediği durumlar yaşanabilmektedir. Bu durum programcılar tarafından blokta birden fazla kod satırı olmadığında tercih edilmektedir. Fakat bu tercih tavsiye edilen bir kullanım şekli değildir. Bu alışkanlık daha sonradan koşullu çalışması gereken satırların koşulsuz çalışmasına sebebiyet verebilir ve güvenlik üzerine kurgulanmış kod satırları kullanıldığında bu satırların beklenmedik şekilde çalışmasına yol açabilir. Süslü parantezler kullanmadan blok yapılarını kullanmak düşük bir güvenlik riski sunmasına karşın uygulama dünyasındaki diğer güvenlik açıklıkları ile beraber değerlendirilen bir açıklıktır. Örneğin Java dilinde bu açıklığa bir örnek verilmiştir: Java Güvensiz Kod Bloğu:
public class Example1{
public static void main(String[] args){
boolean condition = true;
int x = 10, y = 5;
do{
if(x == y){
for(int i = 0; i<x; i++)
x--;
y++;
}
} while(x>0);
}
}
Bu örnekte süslü parantez kullanım prensibi benimsenmediği için döngüde çalışması gereken bir satırın (y++’nın) döngü dışında çalışması durumu gerçeklemiştir. For döngüsünde çalışmayan satır gelecekte bir güvenlik fonksiyonunun başına gelirse bir güvenlik riski ortaya çıkacaktır. Java Güvenli Kod Bloğu:
public class Example1{
public static void main(String[] args){
boolean condition = true;
int x = 10, y = 5;
do{
if(x == y){
for(int i = 0; i<x; i++) {
x--;
y++;
}
}
} while(x>0);
}
}
Bu örnekte ise süslü parantez prensibini takip eden bir geliştiricinin prensibi daima uygulaması dolayısıyla daha önce yaşanan riske yakalanmadığı ve y++ satırının blok içerisinde çalıştırıldığı gösterilmiştir. Örneğin C++ dilinde bu açıklığa bazı örnekler verilmiştir: C++ Güvensiz Kod Blokları:
# ÖRNEK A
if (condition)
firstActionInBlock();
secondAction(); // Uygunsuz; koşul dışında çalışmaktadır.
thirdAction();
# ÖRNEK B
if (condition) firstActionInBlock(); secondAction();
// Uygunsuz; secondAction koşul dışında çalışmaktadır.
# ÖRNEK C
if (condition) firstActionInBlock(); // Uygunsuz.
secondAction(); // Koşul dışında çalışmaktadır.
# ÖRNEK D
if (condition); secondAction(); // Uygunsuz; secondAction
// koşul dışında çalışmaktadır.
# ÖRNEK E
String str = null;
for (int i = 0; i < array.length; i++)
str = array[i];
doTheThing(str); // Uygunsuz; doTheThing() yalnızca son
// dizi elemanında çalışmaktadır.
Örnek A’dan E’ye kadar blok sınırlandırıcı kullanılmaması dolayısıyla koşulsuz çalışan kod satırları örnekleri gösterilmiştir. C++ Güvenli Kod Blokları:
# Güvensiz Örnek A’nın Prensipli Hali
if (condition) {
firstActionInBlock();
secondAction();
}
thirdAction();
# Güvensiz Örnek E’nin Prensipli Hali
String str = null;
for (int i = 0; i < array.length; i++) {
str = array[i];
doTheThing
}
Bu örneklerde ise süslü parantez prensibini takip eden bir geliştiricinin prensibi daima uygulaması dolayısıyla daha önce yaşanan koşulsuz kod satırlarının çalışması riskine yakalanmadığı gösterilmiştir. Açıklığın Önlemi: Bloklarda “daima” süslü parantezler kullanılmalıdır. Gerekli olmasa dahi parantezlerin daima konulması prensip olarak benimsenmelidir. Böylece gelecekteki olası hatalı işlemlerin önüne prensibe riayet edileceğinden geçilmiş olacaktır. Yararlanılan Kaynaklar:
|
|||||
Bu yazı 23.10.2025 tarihinde, saat 05:29:45'de yazılmıştır.
22.01.2026 tarihi ve 10:18:43 saatinde ise güncellenmiştir. |
|||||
|
|||||
| Yorumlar |
|||||
| Henüz yorum girilmemiştir. | |||||
| Yorum Ekle | |||||
Bu yazı 23.10.2025 tarihinde, saat 05:29:45'de yazılmıştır.
22.01.2026 tarihi ve 10:18:43 saatinde ise güncellenmiştir.