Use of System Exit Açıklığı (CWE-382)
Bu makalede Use of System Exit (CWE-382), yani System.Exit() Kullanılması 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:

Servis Dışı Kalma

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

Java uygulamalardaki java.lang.System.exit() metodu Java Virtual Machine’i sonlandırarak mevcut programdan çıkış yapmayı sağlar. Bu metoda argüman olarak 0’dan farklı bir değer verilmesi genellikle anormal sonlandırmayı belirtmek için kullanılır. Java’daki bu metot C ve C++’daki exit komutuna benzerdir. Java’daki System.Exit()’in deklarasyonu şu şekildedir:

Java:


public static void exit(int status)


Aldığı değerler ise şu şekildedir:

Aldığı Değerler Açıklaması
exit(0) Genellikle başarılı sonlanmalar için kullanılır.
exit(1) veya exit(-1) veya sıfırdan farklı başka bir değer Genellikle başarısız sonlanmalar için kullanılır.

Java dilinde System.exit()’in kullanıldığı güvensiz bir duruma örnek verilmiştir:

Java - Güvensiz Kod Bloğu:

Public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    if (isAuthorized()) {

      try {
          updateDb(request);
      }
      catch (UpdateDbException ude)
      {
          logger.error("Caught Exception While Updating DB: " + ude.toString());
          System.exit(1);
      }

      [..]

J2EE uygulaması System.exit() kullandığında bu JVM’i kapatır. Bu kullanım bir web uygulama için asla iyi bir fikir değildir. Uygulamayı kapatabilen fonksiyona olası başarılı bir erişimde uygulama keyfi olarak servis dışı saldırganlarca bırakılabilir. Bu durum System.exit() Kullanılması (CWE-382) açıklığı olarak değerlendirilir.

Açıklığın Önlemi:

Sonlandırma metodunun çağırılması kodu, arta kalan bir debug (hata ayıklama) kodundan dolayı yer alıyor olabilir veya koda eklenmiş J2EE olmayan üçüncü taraf bir uygulama kodundan dolayı yer alıyor olabilir. Bu kullanımlardan prod ortamda sakınılması gerekir.

Tavsiyeler genel manada şu şekildedir:

  • Web uygulamalar System.exit() gibi virtual machine’in kapanmasına neden olan metotları çağırmamalıdırlar.

  • Web uygulama olmayan uygulamalar ise System.exit() içeren bir main() metodu belki kullanabilirler, fakat kodda main() dışında diğer konumlardan System.exit() genellikle çağırmamalıdırlar.

Yararlanılan Kaynaklar:

  • https://cwe.mitre.org/data/definitions/382.html
  • https://vulncat.fortify.com/en/detail?category=J2EE%20Bad%20Practices&subcategory=JVM%20Termination#Java%2fJSP
  • https://community.veracode.com/s/question/0D52T000051Yh4DSAS/cwe382-j2ee-bad-practices-use-of-systemexit
  • https://www.security-database.com/cwe.php?name=CWE-382
Bu yazı 27.10.2025 tarihinde, saat 03:26:38'de yazılmıştır. 22.01.2026 tarihi ve 10:32:35 saatinde ise güncellenmiştir.
Yazar : Hasan Fatih ŞİMŞEK Görüntülenme Sayısı : 478
Yorumlar
Henüz yorum girilmemiştir.
Yorum Ekle
*
* (E-posta adresiniz yayınlanmayacaktır.)
*
*

#Arşiv


#Giriş

ID :
Şifre :