Fastjson 1.2.83, varsayılan AutoType=false ayarı altında bile geleneksel gadget gerektirmeden uzaktan kod yürütme tetikleyebilir; JDK 8/17/21/25 + Spring Boot Loader izolasyon ortamında yeniden üretildi.Yazı yazarı, kaynak: GCSA
Özet
Geleneksel Java serisiz kaldırma açıkları savunma sistemlerinde, endüstride şu bilgi boşlukları yaygındır: “AutoType varsayılan olarak kapalıysa güvenlidir”, “parseObject’un ikinci parametresini (üst düzey hedef türü) sabitlediyseniz güvenlidir”, “yerel Classpath’teki serisiz kaldırma Gadget bağımlılıklarını temizlediyseniz güvenlidir”. Ancak, en son teknik saldırı ve savunma gelişmeleri bu umutları tamamen yıktı.
GCSA Küresel Siber Güvenlik İttifakı, bugün bu teknik derinlemesine raporu独家 yayınlıyor. Raporda, Fastjson 1.2.83'ün varsayılan AutoType=false durumunda, geleneksel Gadget bağımlılığı olmadan uzaktan kod yürütme (RCE) tetiklenebilen temel nedenler detaylı olarak incelenmiştir. Bu kullanıma yönelik teknik şu anda JDK 8 / 17 / 21 / 25 ve Spring Boot Loader izolasyon ortamlarında tam olarak yeniden oluşturulmuştur. Bu zafiyet, geleneksel bir “siyah listeyi atlatıp yerel Gadget arama” değil, Fastjson'un kendi Class meta verisi keşif mantığını doğrudan uzaktan zararlı Class alma ve yetkilendirme kanalına dönüştürmektedir. Aşağıda metin yer almaktadır
Yayıncı: GCSA Küresel Siber Güvenlik İttifakı
Rapor Türü: Eksklüzif Teknik İnceleme / Güvenlik Açığı Derinlemesine Analiz Raporu
Rapor tarihi: 2026-07-21
Rapor durumu: Kaynak kodu denetimi ve izole ortamda tekrarlanma tamamlandı
Sızma numarası: Dahili araştırma numarası FJ-GETRESOURCE-RCE (açıkça duyurulan bir CVE ile eşleşmiyor)
Fastjson 1.2.83, varsayılan AutoType=false ayarı altında bile geleneksel gadget gerektirmeden uzaktan kod yürütme tetikleyebilir; JDK 8/17/21/25 + Spring Boot Loader izolasyon ortamında yeniden üretildi. Hemen SafeMode'u etkinleştirin ve Fastjson 2.x'e geçiş yapın.
1. Özet
Fastjson 1.2.83'ün ParserConfig.checkAutoType, kullanıcı tarafından kontrol edilen @type değerini sınıf kaynak adına dönüştürür ve mevcut ClassLoader'un getResourceAsStream yöntemine iletir:

Absolute URL kaynak adlarını çözebilen fat-jar ClassLoader ortamında, saldırganlar nokta karakterini değiştirerek http:, jar:http: ve jar:file: URL'leri oluşturabilir ve saldırgan tarafından @JSONType ile işaretlenmiş zararlı bir class indirebilir. Fastjson, bu notasyonu tespit ettikten sonra tehlikeli temel sınıf kontrolü ve hedef tür uyumluluk kontrolünden önce doğrudan class'ı döndürür. Class, örneklendirildiğinde ve başlatıldığında rastgele kod çalıştırabilir.
Hedef classpath'te zaten mevcut olan geleneksel serisizleştirme gadget'lara bağlı olmayan bu yöntem, Fastjson AutoType=false varsayılan durumunda bile tetiklenebilir. JSON.parseObject'un hedef türünü sabitlemek yürütümü engelleyemez; SafeMode etkinleştirildiğinde, normal kullanım yolları kaynak erişiminden önce engellenir.
Bu rapor, aynı JSON yükü kullanılarak izole edilmiş bir Linux konteynerinde aşağıdaki yeniden üretimi tamamlamıştır:

2. Güvenlik Açığı Sınıflandırması

Bileşen sürümüne dayalı tekil CVSS 9.8 önerilmez: Genel AppClassLoader negatif kontroldür; modern JDK tam zinciri, iki mutlak JAR URL'sini çözümleyebilen bir yükleyici ve /proc/self/fd'ye bağımlıdır. Bu raporun olumlu ortamını karşılayan uygulamalarda, güvenlik açığı kimlik doğrulaması gerektirmeyen ağ üzerinden RCE etkisine sahiptir.
3. Etki Alanı ve Öncü Şartlar
3.1 Onaylanan Aralık
- Çalışma zamanı doğrulaması: Fastjson 1.2.83
- JDK Onaylandı: 8, 17, 21, 25
- İşletim sistemi onayı: Linux; macOS, /dev/fd kullanılarak JDK 17/21/25 yeniden üretildi
- loader onaylandı: Spring Boot 2.7.18 klasik loader + JDK 8; Spring Boot 3.2.0 loader + JDK 17/21/25
- API Onayı: JSON.parse ve sabit üst düzey türlü JSON.parseObject
Sürüm 3.2 Aralık Açıklaması
Dış açıklamada yer alan 1.2.68–1.2.83 aralığı, açıklama sürümü yerine bilinen test aralığı olarak daha uygun. Kaynak kod kontrolü, karar verici sınıf kaynak tarama kodunun 1.2.67 ve 1.2.68 sürümlerinde zaten mevcut olduğunu göstermektedir. Bu rapor, yalnızca 1.2.83 için tam JDK çalışma zamanı doğrulaması gerçekleştirmiştir.
3.3 Gerekli koşullar
1. Saldırgan, Fastjson'a gelen JSON'u kontrol edebilir ve girdideki @type ayrıştırılır.
2.SafeMode etkin değil.
3. Fastjson'un ClassLoader'u, oluşturulan mutlak kaynak adını URL'ye çözümleyebilir.
4. Mağdur işlem, saldırganın HTTP hizmetine bağlanabilir.
5. Modern Linux zinciri, /proc/self/fd'nin okunabilir ve yükleyicinin ayrıştırabilmesini gerektirir.
jar:file:/proc/self/fd/N!...。
1. JDK, normal uzak JAR geçici önbelleği oluşturabilmelidir; bu genellikle JVM geçici dizinin yazılabilir olduğu anlamına gelir.
Saldırganın gerekli olmayanları:
- Hedef classpath'e dosya yazın
- Hedef classpath, önceden yüklenmiş TemplatesImpl, JNDI, C3P0, Commons Collections gibi gadget'lar içerir.
- Fastjson AutoType'ı etkinleştirin
- JSON.parseObject'un ikinci parametresini kontrol edin
4. Kök neden analizi
4.1 Kullanıcı türü adı kaynak URL olarak kullanılır
Kaynak kodu konumu:

Ana kod:

Bu mantık, resource'un sadece normal bir classpath yolu olduğunu varsayar, ancak protokolünü, mutlak yol anlamsalını veya kaynağını sınırlamaz. Belirli bir fat-jar yükleyici için aşağıdaki girdiler, yerine koymadan sonra mutlak URL'ye dönüşecektir:

Bu nedenle getResourceAsStream, yerel meta verilerden sorgulama yerine, saldırganın kontrolündeki ağ kaynaklarını yüklemek için aşırı kullanılır.
4.2 Uzak sınıfın @JSONType'si yetki belirleyici olarak kabul edildi
Fastjson, kendi ASM ClassReader'ını kullanarak kaynak içeriğini ayrıştırır:

Saldırgan tarafı, uzak sınıfın Fastjson @JSONType açıklamasına sahip olmasını sağlamak yeterlidir; böylece jsonType true olarak ayarlanır. Burada kontrol edilen, güvenilir bir classpath tarafından yüklenmiş bir sınıf değil, saldırganın sağladığı baytlardır.
4.3 jsonType gerçek sınıf yüklemesini tetikler
Kaynak kodu konumu:
TypeUtils.loadClass, açık yükleyiciyi, iş parçacığı bağlam yükleyicisini ve Class.forName'ı sırayla denemektedir. Pozitif ortamda, iş parçacığı bağlam yükleyicisi aynı mutlak kaynak adını yeniden çözümleyecek, class'ı indirecek ve defineClass'ı çalıştıracaktır.
4.4 @JSONType Erken dönüş, sonraki güvenlik kontrollerini atlar
Kaynak kodu konumu:
- Risk base class check will not be executed
- expectClass.isAssignableFrom(clazz) çalıştırılmaz
- Sınıf başlatılmadan önce sabit veri bağlama türü yürütülmeyi engelleyemez
4.5 Özel Durum/Hata: Yumuşak kanal oluşturma başarısız oldu
Kaynak kodu konumu:
4.6 SafeMode konumu
SafeMode kontrolü, kaynak erişiminden önce yapılır:
5. Zincir Kullanımı Ayrıntılı
5.1 JDK 8: Doğrudan uzak sınıf yüklemesi
En kısa biçim:
JDK 17+, aynı şekilde ağ isteklerini tamamlar, ancak dahili adlarda boş yol bölümlerini reddeder,
5.2 Modern JDK İlk Aşama: Uzak JAR'ı İndir
Tek payload'un ilk dizi elemanı:
JDK 17+, ilk aşama jar:http://... iç adını reddediyor, ancak Fastjson, İstisna ekini nedeniyle diziyi çözümlemeye devam ediyor.
5.3 Modern JDK Aşama 2: Önbellek FD'si Yeniden Açılıyor
Sonraki adaylar:
JDK 17'nin class-load günlüğünde ilk eşleşme:
5.4 Bir payload'un neden JDK 8 ve modern JDK ile uyumlu olduğu
- JDK 8, birinci aşama jar dosyasını doğrudan kabul eder ve çalıştırır: http://... class
- Birinci aşama class, JDK 8'in ilgisiz socket/pipe FD'leri denemeye devam etmesini engellemek için RuntimeException("stage-one-stop") fırlatır.
- JDK 17+, sınıf başlatılmadan önce birinci aşamada geçersiz ad nedeniyle başarısız olur ve ardından istisna ile yumuşak bir şekilde FD numaralandırma aşamasına girer
6. Ortam ve kanıtları yeniden oluşturun
6.1 Test edilen bileşenin karma değeri
6.2 Tek Tıkla Yeniden Oluştur

Beğenilen çıktı:Senaryo şunu yapacak:
- Yanlış çeviri isteği. Lütfen geçerli bir metin sağlayın.
- FD özel sınıfı ile saldırı JAR'sını oluşturun;
- Bir JSON dizisi payload oluşturun;
- Docker ağı izole edilerek saldırı aracının HTTP hizmeti başlatılıyor;
- JDK 8/17/21/25 etkilenen konteynerlerini ayrı ayrı başlatın;
- /tmp/fastjson-getresource-rce'yi her bir konteyner eşlemesini kontrol edin.
6.3 El ile saldırı JAR ve payload oluşturun
6.4 Burp Suite ile Gönderme
Burp, Fastjson çözümleme noktası olan kurban arayüzüne yalnızca JSON gönderir; JAR saldırısı hâlâ saldırgan HTTP hizmeti tarafından sağlanmalıdır.
İstek şablonu:
Eğer uygulama sabit bir üst tür kullanıyorsa, alan yapısına göre diziyi sarabilirsiniz, örneğin:
Bu deneyde, yukarıdaki sarmalama, JSON.parseObject(json, BoundEnvelope.class) kullanılarak çözümlendi ve sonuç hâlâ RCE-OK olarak kaldı ve BoundEnvelope normal şekilde döndürüldü.
6.5 Ana Sınır Testi

7. Düzeltme ve Hafifletme Önerileri7.1 Tercih edilen: Fastjson 1.x'ten taşınma
Fastjson 2.x’i bakım altında olan sürüm olarak tercih edin ve tüm polimorfik türleri, AutoType ve uyumluluk modu yapılandırmalarını yeniden doğrulayın. Yalnızca JAR dosyasını değiştirmeyin, geri dönüşüm testi yapmadan.
7.2 SafeMode’i hemen etkinleştirin
Kod yapılandırması:
JVM parametreleri:
Dikkat: AutoTypeCheckHandler kaydedilmişse, SafeMode kontrolünden önce çalıştığı için eş zamanlı olarak denetlenmelidir veya kaldırılmalıdır.
7.3 Seri dışı çözme girişlerini kısıtla
- Güvenilmeyen istekleri doğrudan JSON.parse/JSON.parseObject'a vermeyin
- Giriş veya uygulama girişi üzerinde herhangi bir özel tür meta veri reddedilir.
- Sadece sabitlenmiş üst düzey Java türleri yeterli bir koruma değildir, çünkü iç içe nesneler hala @type işleme yeteneğine sahiptir ve bu zafiyetin jsonType erken döndürmesi uyumluluk kontrolünü atlar.
7.4 WAF/Geçici Ağ Geçidi Kuralı
@type eşitliği sağlayan JSON anahtarını geçici olarak engelle ve URL parametrelerini, istek gövdesini ve iç içe nesneleri üzerine yaz. Sadece düz metin "@type" aramayın, Fastjson lexer alanı adını önce çözümler, örneğin:
WAF kuralı, bileşen yükseltme ve SafeMode yerine geçemez.
7.5 Çıkış ve Çalışma Zamanı Güçlendirme
- Gereksiz dış adreslere HTTP/HTTPS bağlantısı kurulmasını engelle.
- Uygulama konteynerlerine en az ağ politikası uygulayın.
- Uyumluluk izin verdiğinde /proc/self/fd açığını sınırlayın veya daha katı bir konteyner kumandası kullanın.
- ClassLoader'ın mutlak URL kaynak adlarını işleme biçimini denetleyin, http:, https:, jar:, file: gibi protokol biçimlerini reddedin.
- JVM geçici dizinindeki anormal jar_cache* etkinliklerini izleyin.
8. Öneriler ve IOC'yi kontrol edin
8.1 İstek Tarafı Özellikleri
Odaklanın kod çözülmüş @type değerlerinin içerdiğini:
Yalnızca Exception, uyarı için yeterli değildir; protokol formatı, @type ve dizi içindeki ardışık FD adayları ile birlikte analiz edilmelidir.
8.2 Ağ tarafı özellikleri
- JVM, uzantısız JAR veya .class dosyası isteyen anomali sunucusuna istekte bulunuyor
- Aynı çözüm isteği sırasında 1–3 kez tekrarlanan GET/HEAD
- İstek yolu içinde /x, /a.class veya saldırganın tanımladığı eşdeğer yollar ortaya çıkabilir
8.3 Ana Bilgisayar Tarafı Özellikleri
- JVM geçici dizinine jar_cache* oluşturuluyor
- Java işlemi, /proc/self/fd/N üzerinden kendisinin dosyasını yeniden açar
- class-load günlüklerinde şuna benzer şeyler görünüyor:
9. Sonuç
Bu açıklık, geleneksel bir “siyah listeyi atlatıp yerel gadget bulma” değil, Fastjson'un kendi class meta verisi tarama mantığını uzaktan class alma ve yetkilendirme kanalına dönüştürmektedir. @JSONType'nin erken dönüşü, saldırganın sağladığı class'ın tehlikeli temel sınıf ve tür bağlama kontrollerinden önce kabul edilmesine neden olur; Exception başarısızlığı yumuşak kanalı ve JDK jar:http: geçici önbelleği, JDK 8'in doğrudan yükleme primitiflerini JDK 17/21/25'e genişletir.
Bu nedenle aşağıdaki yaygın yargılar geçerli değildir:
- "AutoType varsayılan olarak kapalı olduğundan güvenli" — geçerli değil
- "Fixing the second parameter of parseObject makes it secure" — not valid
- "Classpath'ta bilinen bir gadget yok, bu yüzden güvenli" — geçerli değil
- "JKD 17+, http:// iç adını reddedeceğinden, sadece SSRF olabilir" — geçerli değil
Doğrulanmış loader, ağ ve dosya tanımlayıcı koşulları sağlanan dağıtımlarda, bu sorun tek bir doğrulanmamış JSON isteğiyle gerçek uzaktan kod yürütme haline gelebilir. Fastjson 2.x'e hemen geçiş yapılmalı ve SafeMode etkinleştirilmeli, giden ağ ve ClassLoader kaynak çözümleme sınırları sıkılaştırılmalıdır.
10. Ekler ve kanıt yolları
Aktarım ve telif hakkı bildirimi: Bu rapor ve ilgili teknik analizler, GCSA Küresel Siber Güvenlik İttifakı tarafından yalnızca yayınlanmıştır. Lütfen aktarım yaparken GCSA resmi kaynağı ve orijinal bağlantıyı tamamen koruyun ve raporun temel görüşlerini kötü niyetli şekilde değiştirin.
Kaynak: GCSA Küresel Siber Güvenlik İttifakı
Resmi web sitesi: www.gcsa.org
