NGINX LDAP Uygulaması Zafiyeti
NGINX LDAP Authenticate Uygulaması Zafiyeti
12 Nisan 2022 tarihinde Nginx LDAP Authenticate uygulaması üzerinde güvenlik istismarı paylaşıldı. Yalnızca referans uygulaması (LDAP Implementation) etkilendiği belirlendi. Nginx Open-Source ve Nginx Plus uygulamaları kendi başlarına bu zafiyetten etkilenmemektedir. Ancak aşağıda belirtilen referans uygulaması kullanılırsa bu zafiyetten etkilenilmektedir.
NGINX LDAP Authenticate Referans Uygulaması
NGINX veya NGNIX Plus tarafından Proxy sağlanan sunucular adına kullanıcıların kimliğini doğrulamak için LDAP kullanılır. https://github.com/nginxinc/nginx-ldap-auth adresinde Python arka plan programı ve ilgili NGINX yapılandırması olarak yayınlanmıştır, amacı ve yapılandırması blogda ayrıntılı olarak açıklanmıştır.
NGINX ve LDAP referans uygulamasının dağıtımları, aşağıdaki koşullardan herhangi biri geçerliyse güvenlik açıklarından etkilenir. Aşağıda, koşulları ve bunların nasıl azaltılacağını daha ayrıntılı olarak ele alınmaktadır.
1. Python deamon yapılandırmak için komut satırı parametreleri kullanılıyorsa
2. Kullanılmayan, isteğe bağlı yapılandırma parametreleri varsa
3. LDAP kimlik doğrulaması belirli grup üyeliğine bağlıysa
Zafiyetli Versiyonlar
Zafiyet ile ilgili olarak NGNIX tarafından yayınlanan makalede herhangi bir zafiyetli versiyon belirtilmemiştir. Ancak zafiyeti tespit eden ekibin yayınlamış oldukları açıklamada NGNIX 1.18.0 versiyonunun zafiyetten etkilendiği belirtilmiştir.
Çözüm Önerileri
Koşul 1 için Çözüm
LDAP referansı uygulamasını yapılandırmanın birincil yolu, üretticinin sayfasında bulunan yapılandırmada ve belgelerde ayrıntılı olarak açıklandığı gibi bir dizi proxy_set_header yönergesidir. Ancak, yapılandırma parametreleri Python deamon (nginx-ldap-auth-daemon.py) başlatan komut satırlarıyla da ayarlanabilir.
Komut satırında yapılandırma parametreleri belirtildiğinde, bir saldırgan özel hazırlanmış HTTP istek başlıklarını ileterek bunların bir kısmını veya tamamını geçersiz kılabilir. Buna karşı korunmak için, NGINX yapılandırmasında (repoda nginx-ldapauth.conf) location = /auth-proxy bloğuna aşağıdaki yapılandırmayı ekleyerek kimlik doğrulama sırasında herhangi bir yabancı istek üstbilgisinin yoksayıldığından emin olun.
Koşul 2 için Çözüm
Koşul 1'de olduğu gibi, bir saldırgan, eğer yapılandırmada ayarlanmamışlarsa, belirli yapılandırma parametrelerini geçersiz kılmak için özel hazırlanmış HTTP isteklerini iletebilir. Örneğin, yapılandırmada açıkça ayarlanmadıysa LDAP arama şablonu geçersiz kılınabilir. Bu durum, NGINX konfigürasyonundaki location = /auth-proxy bloğuna yukarıdaki konfigürasyon eklenerek aynı şekilde savunulabilir.
Koşul 3 için Çözüm
Login formları gibi username ve password içeren alanlar üzerinde; parantez ”()”, eşittir ”=” gibi karakterlerin ve aynı zamanda LDAP sunucuları için özel anlamı olan tüm karakterlerin kabul edilmemesi önerilmektedir. NOT: Yapılandırmanızın ve sunucunuzun yedeği olmadan koşullara bağlı çözüm işlemlerini uygulamayınız. Daha güncel çözümler için üretici sayfalarını ve bizi takipte kalınız.
Referanslar
• Addressing Security Weaknesses in the NGINX LDAP Reference Implementation - NGINX
• https://github.com/nginxinc/nginx-ldap-auth/commit/763f23b29785d96dc2dafbc68524b393eef212f6
• GitHub - nginxinc/nginx-ldap-auth: Example of LDAP authentication using ngx_http_auth_request_module