
Güvenlik uzmanları, Ruby on Rails’te saldırganların siteler arası istek amptörleri (CSRF) korumalarını atlamasına izin veren kritik bir güvenlik açığı ortaya koydu.
26 Nisan 2025’te açıklanan kusur, 2022/2023’ten bu yana benzer konular için “düzeltme” varsayılan popüler web çerçevesinin ve tüm sürümlerin tüm mevcut sürümlerini etkiler.
Güvenlik açığı, Rails’in CSRF token uygulamasında temel bir kusurdan kaynaklanmaktadır. Çerçeve, bu güvenlik belirteçlerini bir “çiğ jeton” ile rastgele bir “tek seferlik pedi” (OTP) kullanarak üretir.
Bununla birlikte, kritik bir gözetim içinde, rails, OTP’yi hem de Xored jetonunu basit birleştirme yoluyla birlikte paketler ve “maskeli jeton” dediği şeyi yaratır.
Bu uygulama hatası, saldırganların CSRF tokenlerini kolayca çözebileceği ve yeni geçerli olanlar üretebileceği ve siteler arası saldırıları önlemek için tasarlanmış koruma mekanizmasını tamamen atlayabileceği anlamına gelir.
Şifreli verilerin yanında kriptografik anahtar (OTP) gönderildiğinden, güvenlik önlemi temelde tehlikeye atılır.
SecListes analistleri ve araştırmacılar, bu güvenlik açığının ray kullanılarak inşa edilen binlerce web sitesi için önemli bir güvenlik riskini temsil ettiğini belirtti.
Kusur, birçok geliştiricinin uygulamalarını kötü niyetli aktörlerden korumak için güvendiği kritik bir güvenlik katmanını etkili bir şekilde geçersiz kılar.
Güvenlik açığı ilk olarak kusurun kapsamlı kanıtlarını sağlayan güvenlik araştırmacısı Daniel Owens tarafından bildirildi.
Onun açıklaması, bunun temelde Rails geliştiricilerinin 2022/2023’te yayınlanan güncellemelere sabitlediklerine inandıkları güvenlik açığı olduğunu gösteriyor.
Güvenlik açığının teknik analizi
Güvenlik açığının teknik kökü, mask_token
Rails kod tabanı içindeki yöntem. Bu yöntem, SSL saldırılarını ihlal gibi azaltmak için her isteğe göre değişecek olan özgünlük jetonunun “maskeli” versiyonunu oluşturmaktan sorumludur.
Sorunlu uygulama aşağıdaki kod snippet’inde görülebilir:-
def mask_token(raw_token)
one_time_pad = SecureRandom.random_bytes(AUTHENTICITY_TOKEN_LENGTH)
encrypted_csrf_token = xor_byte_strings(one_time_pad, raw_token)
masked_token = one_time_pad + encrypted_csrf_token
encode_csrf_token(masked_token)
end
Bu kodda görüldüğü gibi, Rails rastgele bir kerelik bir ped üretir ve bir XOR işlemi ile jetonu şifrelemek için kullanır.
Daha sonra, şifreleme anahtarını, şifreleme anahtarını, kullanıcılara göndermeden önce şifrelenmiş verilerle birleştirerek, şifreleme güvenliğinin temel ilkesini ihlal eder.
Owens, şifreleme tuşunu kolayca çıkaran ve yeni geçerli jetonlar oluşturan JavaScript kodu ile güvenlik açığını gösterdi:-
function getCsrfToken(otp, raw_token) {
var masked_token = new Uint8Array(raw_token.length);
for(var i = 0; i String.fromCharCode(b)).join('')).replace(/=+$/, '');
}
Bu istismar, saldırganların CSRF korumasını atlayan kötü niyetli talepler oluşturmalarını sağlar ve potansiyel olarak savunmasız raylar uygulamalarında kimlik doğrulamalı kullanıcılar adına gerçekleştirilen yetkisiz eylemlere yol açar.
Malware Trends Report Based on 15000 SOC Teams Incidents, Q1 2025 out!-> Get Your Free Copy