CVE-2026-15890
Açıklama
PSA Internal Trusted Storage dönüşüm modülü için varsayılan AEAD nonce sağlayıcısı olan `subsys/secure_storage/src/its/transform/aead_get.c` dosyasındaki `secure_storage_its_transform_aead_get_nonce()` fonksiyonu, nonce sayacını senkronize edilmemiş fonksiyon-yerel statik değişkenlerde (`s_nonce` ve `s_nonce_initialized`) saklamaktadır. Her ITS yazma işlemi, AES-GCM veya ChaCha20-Poly1305 nonce değerini burada `secure_storage_its_transform_to_store()` aracılığıyla alır. Fonksiyon herhangi bir kilit (lock) tutmadığı için, onu eşzamanlı olarak çağıran iki iş parçacığı paylaşılan statikler üzerinde yarış durumuna (race condition) girer: başlatma yolu (`psa_generate_random()` ardından `memcpy()`) ve atomik olmayan artır-ve-kopyala yolu, her biri aynı nonce değerini iki farklı şifreleme işlemine verebilir ve artışları kaybederek sayacın asla tekrarlamaması gereken değerleri tekrarlamasına neden olabilir. ITS katmanı (`subsys/secure_storage/src/its/implementation.c` içindeki `secure_storage_its_set()`), kendi başına herhangi bir serileştirme gerçekleştirmez, bu nedenle eşzamanlı aynı-UID yazmaları doğrudan yarış durumundaki sağlayıcıya ulaşır. AES-GCM veya ChaCha20-Poly1305 altında aynı anahtar ile bir nonce'un yeniden kullanılması, felaketle sonuçlanan bir AEAD hatasıdır: iki düz metnin XOR işlemini sızdırır (ITS rutin olarak PSA kalıcı anahtarları da dahil olmak üzere gizli bilgileri saklar) ve GCM için kimlik doğrulama anahtarını açığa çıkararak saklanan girdilerin sahte olarak oluşturulmasına olanak tanır. AEAD anahtarı girdi UID'sine göre türetildiğinden, güvenlik açısından ilgili çakışma, aynı UID'ye yapılan iki eşzamanlı yazmanın aynı nonce değerini almasıdır; ham destek depolamasını okuyabilen bir saldırgan daha sonra bu yeniden kullanımı istismar edebilir. Zephyr ile birlikte gelen hem `zms.c` ITS depolama arka ucu hem de `settings.c` içindeki `settings/NVS` arka ucu, ertelenmiş çöp toplama özelliğine sahip günlük yapılı (log-structured) flaş depolarıdır; dolayısıyla yeniden yazma ile yer değiştiren bir girdi, sektörü geri kazanılana kadar bölmede fiziksel olarak mevcut kalır. Bu nedenle, yarış durumuna giren iki aynı-UID yazması, her iki şifreli metni de ham imajda aynı anda okunabilir durumda bırakır ki bu, nonce yeniden kullanımının istismar edilebilmesi için gereken koşuldur. Tetikleyici dar kalmaya devam etmektedir: her iki yerleşik anahtar sağlayıcısı da (`DEVICE_ID_HASH` ve `ENTRY_UID_HASH`) türetilen anahtarı girdi UID'si ile tuzladığından, farklı UID'ler arasındaki yeniden kullanım zararsızdır ve ifşa durumu, aynı UID'yi iki iş parçacığından eşzamanlı olarak yazan bir uygulama gerektirir. Düzeltme, nonce üretimi süresince tutulan bir `K_MUTEX_DEFINE(s_nonce_mutex)` ile sağlayıcıyı serileştirmektedir.
Nasıl düzeltilir
- zephyrproject zephyr4.4.2 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| zephyrproject zephyr | 4.0.0 ≤ v < 4.4.2 | 4.4.2 |
Sürümünüzü kontrol edin
Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.
Attack Surface Management
Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.