Ö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
| Eklenti | ElementsKit Lite (Elementor eklentileri) — slug elementskit-lite |
| Test edilen sürüm | 4.0.7 (test sırasında güncel) |
| Etkin kurulum | 1.000.000+ |
| Açık türü | Bozuk Erişim Denetimi / Bilgi İfşası |
| CWE | CWE-862 Missing Authorization / CWE-284 |
| Gereken yetki | Yok — 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 |
| Durum | Taze, 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:
// 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:
// modules/megamenu/api.php
public 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:
// modules/megamenu/api.php — enforce authorization before rendering
public 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
iddeğ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ı —
publishdurumunun 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
- CWE-862: Missing Authorization — https://cwe.mitre.org/data/definitions/862.html
- CWE-284: Improper Access Control — https://cwe.mitre.org/data/definitions/284.html
- WordPress REST API Handbook — Adding custom endpoints (permissions) — https://developer.wordpress.org/rest-api/extending-the-rest-api/adding-custom-endpoints/
- WordPress Plugin Handbook — Checking user capabilities — https://developer.wordpress.org/plugins/security/checking-user-capabilities/
- WordPress Plugin Handbook — Nonces — https://developer.wordpress.org/plugins/security/nonces/
- OWASP — Broken Access Control — https://owasp.org/www-project-top-ten/
- FIRST — CVSS v3.1 Hesaplayıcı — https://www.first.org/cvss/calculator/3.1
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.