Zafiyet.live Keşfet. Değerlendir. Düzelt. Doğrula.
  • Yama var
  • Son 7 gün
  • CWE-532

CVE-2026-105963

Plug.Crypto'da yanlış tipte argümanlarda gizli anahtar taban değeri hata izlerine sızıyor

elixir-plug plugelixir-plug Plug Crypto

Orta 5,1 CVSS 4.0
Yayımlandı
Güncellendi
23 Eki 2026
Açık yaşı
5 gün
Kaydı açan
EEF

ÖzetTürkçe

Plug.Crypto içindeki genel fonksiyonlar, argüman tiplerini fonksiyon başlığındaki guard ile doğrular. Yanlış tipte bir argüman bu guard'ı geçemediğinde Erlang VM, en üst yığın çerçevesinde gerçek argüman değerlerini içeren bir FunctionClauseError fırlatır. Böylece gizli anahtar taban değeri, türetilmiş bir anahtar ya da bir API anahtarının karşılaştırıldığı değer bu çerçeveye düşer. Kütüphanenin rescue blokları ve Plug.Crypto.prune_args_from_stacktrace/1 yalnızca fonksiyon gövdesi içinde fırlatılan istisnaları yakalar, dolayısıyla guard hatalarını görmez. Plug.Cowboy ve Bandit bu çerçeveyi hata günlüğüne yazar ve crash_reason Logger üst verisi olarak ekler; hata izleyiciler de bunu iletir. Kimliği doğrulanmamış uzak bir saldırgan, yanlış tipte argüman içeren bir istekle gizli anahtar taban değerini uygulama günlükleri üzerinden açığa çıkarabilir. İki giriş noktası istek verisini kabul eder: Plug.Crypto.verify/4, token ikili (binary) veya nil olmadığında gizli anahtar taban değerini açığa çıkarır; Phoenix.Token.verify/4 token'ı guard'sız ilettiği için bu yola ulaşır. Plug.Crypto.secure_compare/2 ise taraflardan biri ikili olmadığında diğer operandı açığa çıkarır; eksik bir istek başlığı nil değer ürettiğinde bu durum oluşur. Sızan değeri okumak için günlüklere ya da hata izleyiciye ayrıca erişim gerekir, bu yüzden yalnızca istek saldırganın gizli bilgiyi öğrenmesi için yeterli değildir. Etkilenen sürümler: plug 1.6.3 ile 1.7.0 öncesi; plug_crypto 1.0.0 ile 2.2.1 öncesi.

Kaynaktaki açıklama (İngilizce)

Externally-Generated Error Message Containing Sensitive Information vulnerability in plug_crypto in elixir-plug plug_crypto allows an unauthenticated remote attacker to expose the secret key base through application logs via a wrong-typed argument. Every public function in Plug.Crypto validates argument types in a function-head guard. A failed guard makes the Erlang VM raise FunctionClauseError with the actual argument values in the top stack frame, so the secret key base, a derived key, or the value an API key is compared against lands in that frame. The library's rescue blocks and Plug.Crypto.prune_args_from_stacktrace/1 only reach exceptions raised inside a function body, so they never see a guard failure. Plug.Cowboy and Bandit write the frame to the error log and attach it as crash_reason Logger metadata, which error trackers forward.

Two entry points take request data. Plug.Crypto.verify/4 exposes the secret key base when the token is neither a binary nor nil, which Phoenix.Token.verify/4 reaches because it forwards the token unguarded. Plug.Crypto.secure_compare/2 exposes the other operand when one side is not a binary, as happens when a missing request header yields nil. Reading the leaked value needs separate access to the logs or the error tracker, so the request alone does not disclose the secret to the attacker.

This issue affects plug: from 1.6.3 before 1.7.0; plug_crypto: from 1.0.0 before 2.2.1.

Üreticinin geçici önlemi (İngilizce)

Check argument types in the calling code before entering Plug.Crypto, so no head guard ever fails. Pass a token to Phoenix.Token.verify/4, Phoenix.Token.decrypt/4, Plug.Crypto.verify/4 or Plug.Crypto.decrypt/4 only when is_binary(token) holds, and treat anything else as an invalid token. Call Plug.Crypto.secure_compare/2 only when both operands are binaries, treating a missing header or parameter as a failed comparison rather than passing nil.

Where the leaked value matters more than the crash, configuring the error tracker to drop stack-frame arguments also keeps the secret out of the forwarded report. For Sentry this means not sending vars with the crash report. This narrows exposure but leaves the value in the local error log.

Bu açığın açıklamasını Türkçeye çevirdik. Adım adım çözüm önerilerini kritik ve yeni açıklar için hazırlıyoruz; düzeltilmiş sürüm aşağıdaki tabloda, ayrıntılar üreticinin duyurusunda.

Etkilenen sürümler2 yazılım

YazılımEtkilenenDüzeltildiği sürüm
elixir-plug plug ≥ 1.6.3, < 1.7.0 1.7.0
elixir-plug Plug Crypto ≥ 1.0.0, < 2.2.1 2.2.1

Kaynaklar9 kaynak

Kayıt geçmişi

  1. Yayımlandı

İlgili açıklar

Türkçe metin, resmi kayıtlardaki bilgilerle yapay zekâ yardımıyla yazıldı ve yayından önce otomatik kontrollerden geçti. Bir değişikliği uygulamadan önce üreticinin duyurusuna mutlaka bakın.