Public Static Field Not Marked Final Açıklığı (CWE-500)
Bu makalede Public Static Field Not Marked Final (CWE-500), yani Public Static Üye Değişkenin Final Olarak Tanımlanmaması açıklığı anlatılacaktır.

Açıklık Önem Derecesi:

Düşük

Açıklığın Etkisi:

Saldırı yüzeyinin artması

Açıklığın Açıklaması:

Bir nesnenin public üye değişkenleri (member fields) harici class’lar tarafından değiştirilebilirdirler. Genellikle nesnelerin üye değişkenlerine harici class’ların doğrudan erişmesi istenmez. Örneğin iyi bir nesne yönelimli program tasarımında üye değişkenlerin diğer class’lara teşhir edilmesini ve modifiye edilebilmesini önlemek için encapsulation (kapsülleme) kullanılır. Eğer uygulama bu tarz üye değişkenlerin değiştirilemeyeceğini varsayarsa, fakat üye değişkenler değiştirilebilir ise bu encapsulation mekanizmasının ihlali anlamına gelir. Bu durumda zararlı kodlar sistemin davranışını kötü yönde etkileyebilir.

Bu açıklığı somutlaştırmak için JAVA ve C++ örneklerine yer verilmiştir:

JAVA - Güvensiz Hal:

public class MyClass
{

        public static int ERROR_CODE = 100;
        
        //...

}

JAVA - Güvenli Hal:

public class MyClass
{

        public static final int ERROR_CODE = 100;
        
        //...

}

Kod bloğunu yorumlayacak olursak “JAVA - Güvensiz Hal” örneğinde ERROR_CODE üye değişkeni public ve static olarak tanımlanmıştır, fakat final olarak tanımlanmamıştır. Böylesi bir durumda zararlı bir kod bu hata kodunu (ERROR_CODE üye değişkeni değerini) değiştirebilir ve programın beklenmeyen şekilde davranmasına sebep olabilir.

Bir diğer JAVA örneği olarak şu verilebilir:

Java - Güvensiz Hal:

public class SomeAppClass {

        public static String appPropertiesFile = "app/Application.properties";

        // ...
}

Java - Güvenli Hal:

public class SomeAppClass {

        public static final String appPropertiesFile = "app/Application.properties";
        
        //...
}

“Java - Güvensiz Hal” kod bloğunda public ve static tanımlanan değişkenin final olarak kullanılmaması gösterilmiştir. Bu durum zararlı kodlar ile public ve static üye değişkenin manipüle edilmesi ve üye değişkende geliştiricinin tanımladığı konfigürasyon dosyası yerine farklı bir dosyanın çağırılmasıyla sonuçlanabilir. Güvenli kod bloğunda ise public ve static üye değişkenin final ile güvenli şekilde kullanıldığı gösterilmiştir.

C++ - Güvensiz Hal:

class SomeAppClass {

        public:
                static string appPropertiesConfigFile = "app/properties.config";

        // ...

}

C++ - Güvenli Hal:

class SomeAppClass {

        public:
                static const string appPropertiesConfigFile = "app/properties.config";

        // ...
}

“C++ - Güvensiz Hal” kod bloğunda public ve static tanımlanan değişkenin constant olarak kullanılmaması gösterilmiştir. Bu durum yine zararlı kodlar ile public ve static üye değişkenin manipüle edilmesi ve üye değişkende geliştiricinin tanımladığı konfigürasyon dosyası yerine farklı bir dosyanın çağırılmasıyla sonuçlanabilir. Güvenli kod bloğunda ise public ve static üye değişkenin constant ile güvenli şekilde kullanıldığı gösterilmiştir.

Public ve static üye değişkenler final / constant olarak tanımlanmadıklarında “Public Static Üye Değişkenin Final Olarak Tanımlanmaması (CWE-500)” açıklığı olarak ele alınırlar.

Açıklığın Önlemi:

Tavsiyeler şu şekildedir:

  • Public ve static tanımlanan üye değişkenler daima final / const olarak tanımlanmalıdır (eğer ki sabit olacakları planlanmışsa). Çünkü en az ayrıcalık prensibine (principle of least privilege) riayet edildiğinden saldırı yüzeyi daralacaktır ve uygulama daha güvenli olacaktır.

  • Public ve static tanımlanan üye değişkenlerin değiştirilebilir olmasından mümkünse sakınılmalıdır.

Yararlanılan Kaynaklar:

  • https://cwe.mitre.org/data/definitions/500.html
  • https://vulncat.fortify.com/en/detail?id=desc.structural.java.poor_style_non-final_public_static_field#Java%2fJSP
Bu yazı 25.10.2025 tarihinde, saat 16:53:30'de yazılmıştır. 25.10.2025 tarihi ve 14:04:48 saatinde ise güncellenmiştir.
Yazar : Hasan Fatih ŞİMŞEK Görüntülenme Sayısı : 19
Yorumlar
Henüz yorum girilmemiştir.
Yorum Ekle
*
* (E-posta adresiniz yayınlanmayacaktır.)
*
*

#Arşiv


#Giriş

ID :
Şifre :