İçeriğe atla
Noroxi
Araştırma7 dk

ElementsKit Lite 4.0.7: Kimlik Doğrulamasız Şablon İfşası

ElementsKit Lite 4.0.7'deki eksik yetkilendirme açığı, anonim ziyaretçilerin megamenü REST rotasıyla yayımlanmış Elementor şablonlarını okumasına izin veriyor.

Noroxi EkibiSızma testi ve güvenlik danışmanlığı

Özet. Bir milyonu aşkın etkin kuruluma sahip Elementor eklenti paketi ElementsKit Lite 4.0.7, bir bozuk erişim denetimi açığı (CWE-862, Eksik Yetkilendirme) barındırıyor. Megamenü özelliğinin REST rotası açık bir izin geri çağırımıyla kaydediliyor ve yetkilendirmeyi her eyleme özgü yönteme bırakıyor; bu yöntemlerden biri yayımlanmış herhangi bir Elementor belgesini kimliğine göre, hiçbir yetki ya da nonce denetimi olmadan işliyor. Böylece kimliği doğrulanmamış bir ziyaretçi, sitenin bir düzenleme yetkisi ya da görüntüleme koşulları ardında tutmayı amaçladığı şablonları okuyabiliyor. Aşağıda açığın kök nedeni, çıkarılacak güvenli kodlama dersi ve site sahipleriyle geliştiriciler için savunma önlemleri yer alıyor. Eşgüdümlü ifşa gereği satıcı özel olarak bilgilendirildi; işlevsel kavram kanıtı ise düzeltme çıkana kadar yayımlanmayacak.

Anahtar kelimeler: ElementsKit Lite, WordPress, bozuk erişim denetimi, eksik yetkilendirme, REST API, Elementor şablonları, bilgi ifşası, CWE-862.

1. Giriş

Elementor eklenti paketleri sayfa oluşturucuyu bileşenler, şablonlar ve yerleşim özellikleriyle genişletir. ElementsKit Lite, 1.000.000'u geçen etkin kurulumuyla bunların en yaygınlarından biridir. Bu ölçek, eklentiyi yakından incelemeye değer kılar: tek bir eksik denetim çok büyük bir site kitlesinde tekrar eder, üstelik şablon ve tasarım içeriğini site sahipleri WordPress teknik olarak "yayımlanmış" saysa bile çoğu zaman özel görür.

Buradaki kalıp tanıdıktır — herkesin erişebildiği, sonra da işleyicide yetkilendirmeyi yeniden denetlemeyi atlayan bir REST rotası. WordPress ekosisteminde en sık rastlanan ve sonuçları en ağır hatalardan biridir. Geliştiricinin bunu tanıması, site sahibinin de saptayıp sınırlaması gerekir. Mekanizma aşağıda, çalıştırılabilir bir saldırı verilmeden anlatılıyor.

2. Etkilenen bileşen

EklentiElementsKit Lite (Elementor eklentileri) — slug elementskit-lite
Test edilen sürüm4.0.7 (test sırasında güncel)
Etkin kurulum1.000.000+
Açık türüBozuk Erişim Denetimi / Bilgi İfşası
CWECWE-862 Missing Authorization / CWE-284
Gereken yetkiYok — kimlik doğrulamasız
CVSS 3.1~5.3 (Orta) AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
DurumTaze, güncel sürümde kodda doğrulandı.

3. Teknik analiz

Megamenü temel rotası, açık bir izin geri çağırımıyla kaydedilir ve her eylemin yetkilendirmeyi "geri çağırımın içinde" yaptığını bildirir:

php
// core/handler-api.php  (Handler_Api::init)register_rest_route(    untrailingslashit('elementskit/v1/' . $this->prefix),    '/(?P<action>\w+)/' . ltrim($this->param, '/'),    [ 'methods' => WP_REST_Server::ALLMETHODS,      'callback' => [$this, 'callback'],      'permission_callback' => '__return_true' ]   // all permissions "implemented inside the callback");

İzin geri çağırımı olarak '__return_true' kullanmak kendi başına yanlış değildir; ne var ki yetkilendirmenin tüm yükünü her eyleme özgü yönteme yıkar. Bu sözleşme ancak her yöntem üzerine düşeni yaptığı sürece ayakta kalır. Megamenü içerik yöntemi ise üzerine düşeni yapmaz:

php
// modules/megamenu/api.phppublic function get_megamenu_content() {    $menu_item_id = intval($this->request['id']);    // DEFECT: only a publish/password gate — no current_user_can() and no wp_verify_nonce()    if ('publish' !== get_post_status($menu_item_id) || post_password_required($menu_item_id)) {        return '';    }    $output = \ElementsKit_Lite\Utils::render_elementor_content($menu_item_id, true); // renders ANY published doc    return $output;}

İşlemeden önceki tek kapı yayım durumu ile parola denetimidir; yetki denetimi (current_user_can) de nonce doğrulaması (wp_verify_nonce) da yoktur. render_elementor_content() Elementor'un get_builder_content_for_display() işlevini gönderi türü kısıtı olmaksızın çağırdığı için yöntem, kimliğiyle verilen herhangi bir yayımlanmış Elementor belgesinin — elementor_library şablonları da dâhil — HTML'ini işler.

Elementor'un önyüz koruması (block_template_frontend) normalde kütüphane şablonlarının doğrudan görüntülenmesini edit_posts yetkisi olan kullanıcılarla sınırlar. Bu kimlik doğrulamasız rota üzerinden işleme yapmak o korumayı büsbütün devre dışı bırakır: platformun anonim ziyaretçilerden gizlemek istediği içerik — görüntüleme koşulları ardındaki şablonlar da içinde — kimlik doğrulaması olmadan okunabilir olur.

4. Açığa nasıl ulaşılır (kavramsal)

Rotanın iki yanında birbirinden bağımsız iki güvenlik varsayımı durur ve ikisi de tutmaz. REST katmanı yetkilendirmeyi işleyicinin yapacağına güvenir; işleyici ise publish durumundaki bir belgenin herkese işlenmesinin güvenli olduğuna güvenir. İkisi bir arada, anonim bir HTTP isteğinden Elementor'un işleme rutinine kesintisiz bir yol bırakır.

WordPress'te publish, bir erişim kararı değil editoryal bir durumdur. Birçok nesne dâhili ya da koşullu kullanım için yayımlanır: kütüphane şablonları, tasarım parçaları, yalnızca bir görüntüleme koşulu sağlanınca gösterilen içerik, herkese açık hiçbir sayfadan bağlantı verilmeyen ögeler. Kök hata, "yayımlanmış"ı "herkese açık" yerine koymaktır. Siteye HTTP isteği gönderebilen herkes — hesapsız, çerezsiz, nonce'suz — geçerli bir yayımlanmış kimlik verdiği sürece rotaya böyle bir belgeyi işletebilir. Kimlikler küçük tam sayılar olduğundan aday belgeler kümesi kayda değer biçimde gizli değildir.

Sonuç bir gizlilik ifşasıdır: kimliği doğrulanmamış bir taraf, sahibinin özel sandığı şablonların işlenmiş işaretlemesine ve stillerine ulaşabilir. İstek dizisi, parametre değerleri ve herhangi bir numaralandırma yordamı bu yazının dışında bırakılmıştır.

5. Etki değerlendirmesi

Sızan şey, sitenin yalnızca katkıda bulunan ve üzeri kullanıcılara ya da yalnızca görüntüleme koşulları karşılanınca göstermeyi amaçladığı Elementor kütüphane şablonları ve belgeleridir: tasarımlar, gömülü metinler, dâhili ya da hazırlık aşamasındaki şablonlar. Sorun yalnızca gizliliği ilgilendirir; kendi başına veriyi değiştirmez, erişilebilirliğe dokunmaz.

Karşılık gelen CVSS 3.1 vektörü AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N, yaklaşık 5.3 (Orta). Ağ erişimi, düşük karmaşıklık ve yetki ya da kullanıcı etkileşimi gerektirmemesi istismar edilebilirliği yüksek tutar; yalnızca gizliliği etkilemesi ise temel puanı Orta düzeyde bırakır. Kurulum tabanı pratikteki önemi artırır: 1.000.000'u aşan sitede Orta düzey bir açık, büyük bir toplam maruziyettir.

6. Giderme

Düzeltme, herhangi bir şey işlenmeden önce Elementor'un kendi görüntüleme ilkesini işleyicinin içinde yeniden uygulamaktır:

php
// modules/megamenu/api.php — enforce authorization before renderingpublic function get_megamenu_content() {    $menu_item_id = intval($this->request['id']);
    // Mirror Elementor's block_template_frontend(): library templates require an editing capability.    if ('elementor_library' === get_post_type($menu_item_id)        && ! current_user_can('edit_posts')) {        return '';    }
    if ('publish' !== get_post_status($menu_item_id) || post_password_required($menu_item_id)) {        return '';    }
    return \ElementsKit_Lite\Utils::render_elementor_content($menu_item_id, true);}

Buna ek olarak ya da bunun yerine rota, herhangi bir gönderi kimliği değil, yalnızca kayıtlı bir megamenüde fiilen kullanılan menü ögelerini işleyecek biçimde daraltılabilir. Daha genel olarak, kimliğe göre rastgele belge işleyen bir rotanın açık bir izin geri çağırımına yaslanması doğru değildir; işlemek üzere olduğu belirli nesne için çağıranın yetkisini denetlemelidir.

Resmî düzeltme sürümü çıkana kadar site sahipleri özelliği maruz kalmış saymalı ve aşağıdaki sınırlama adımlarını uygulamalıdır.

7. Site sahipleri için saptama ve sıkılaştırma

  • Rotayı günlüklerinizde izleyin. Eklentinin megamenü REST uç noktasına gelen kimlik doğrulamasız istekler — hele yalnızca bir id değerini değiştiren istek dizileri — numaralandırmanın pratik göstergesidir. Tek kaynaktan gelen ardışık kimlik erişimi dikkat ister.
  • Şablon içeriğine en az yetki ilkesini uygulayın. "Yayımlanmış ama bağlantısız" bir gizlilik denetimi değildir. Bir şablon hassas bir şey taşıyorsa — dâhili metin, yayımlanmamış tasarım, hazırlık sayfası — publish durumunun işlenebileceğini varsayın ve gerçekten hassas içeriği yayımlanmış belgelerin dışında tutun.
  • Kullanmıyorsanız özelliği kapatın. ElementsKit megamenüsünü çalıştırmayan siteler, düzeltme çıkana kadar o modülü ya da eklentiyi devre dışı bırakıp saldırı yüzeyini daraltabilir.
  • Olanak varsa sanal yama uygulayın. Bir web uygulaması güvenlik duvarı ya da uç kuralı, geçici önlem olarak ilgili REST yoluna gelen kimlik doğrulamasız çağrıları engelleyebilir. Bu, sorunu sınırlar; satıcı düzeltmesinin yerini tutmaz.
  • Eklentiyi güncel tutun. Satıcı yayımlar yayımlamaz resmî düzeltme sürümünü kurun, elle denetime bel bağlamak yerine güncelleme bildirimlerine abone olun.

Bu önlemlerin hepsi yukarıda anlatılan mekanizmadan çıkar; analizin ortaya koymadığı hiçbir ürün özelliğini varsaymaz.

8. Daha geniş ders

İlke şudur: taşıma katmanı erişilebilirliği ile nesne düzeyinde yetkilendirme ayrı sorunlardır ve ikisi de uygulanmalıdır. permission_callback => '__return_true' bildirip "geri çağırımın içinde denetlerim" demek, en dikkatsiz işleyici kadar güçlü bir sözleşmedir; denetimi unutan tek bir yöntem tüm rotayı yeniden açar. publish gibi editoryal bir durum da hiçbir zaman bir erişim kararı değildir. Güvenli bir işleyici, üzerinde işlem yapılan kaynağın tam olarak hangisi olduğuna bakıp çağıranın yetkisini eylem anında, her seferinde denetler — rotadan miras almaz, içerik durumundan vekâlet çıkarmaz. Bir platform bir içerik türü için görüntüleme ilkesi tanımlamışsa — Elementor'un yaptığı gibi — o türü işleyen bileşenler ilkeyi sessizce dolanmak yerine birebir yansıtmalıdır.

9. Sorumlu ifşa

Çalışma eşgüdümlü ifşa kapsamında yürütüldü. Satıcı özel olarak ve iyi niyetle bilgilendirildi; tam teknik kavram kanıtı, resmî bir düzeltme çıkana ya da üzerinde anlaşılan ifşa süresi dolana (hangisi önce olursa) kadar kamuya açılmayacak ve zamanlama bakımcıyla eşgüdümleniyor. Burada canlı istismara imkân verecek hiçbir şey yer almıyor.

Tüm testler, herkese açık GPL eklentisi üzerinde yalıtılmış ve localhost'a bağlı bir laboratuvarda yapıldı. Üçüncü taraf ya da üretim sistemlerine dokunulmadı. Noroxi LLC yalnızca yetkili güvenlik araştırması yürütür; yamasız bir sorun için işlevsel istismar malzemesi sağlamaz, sağlamayacaktır.

Kaynaklar


Savunma ve eğitim amacıyla yayımlanmıştır. Noroxi LLC yalnızca yetkili güvenlik araştırması yürütür; işlevsel istismar ayrıntısı, bir düzeltme çıkana kadar yayımlanmaz.

Bu hafta sömürülenler · her pazartesi

KEV'e girenler, yeni PoC'ler, WordPress triyajı ve bu hafta ne yapmalı. Hesap gerekmez.

Adresiniz yalnızca bu e-posta için kullanılır; üçüncü tarafla paylaşılmaz.

Sıradaki

Essential Blocks'ta Eksik Yetkilendirme: Katkıda Bulunan API anahtarını okuyor