Apache CouchDB Remote Code Execution Vulnerability

Geçtiğimiz Nisan ayında, Apache resmi olarak bir bildiri yayınladı. Bu bildiriye göre, CouchDB veritabanı yönetim sisteminde, uzaktan kod yürütme açığının tespit edildiği kabul edilmiş oldu. Bu zafiyeti araştırmaya başladığımda, tek bir dökümanda istediğim bilgilerin hepsine ulaşamadığım için farklı dökümanlardan konu ile ilgili bilgiler topladım. Benim yaklaşımım aşama aşama olacak ve konunun sonunda CouchDB Remote Code Execution Vulnerability ile bitirilecektir. Hazırsanız geniş bir yelpaze ile konuyu incelemeye başlayalım.

Konu başlıklarımız sırasıyla NoSQL, MapReduce, Erlang, CouchDB, Remote Code Execution, CouchDB Cluster Set
Up & Port & Firewalls, Apache CouchDB Remote Code Execution Vulnerability dir.

Keyifli okumalar dilerim.

1. NoSQL : Not Only SQL (İlişkisellikten Öte)
İnsanlar “NoSQL veritabanı” terimini kullandıklarında, genellikle ilişkisel olmayan herhangi bir veritabanına atıfta bulunmak için kullanırlar. Bazıları “NoSQL” teriminin “SQL olmayan” anlamına geldiğini söylerken, diğerleri bunun “Sadece SQL değil” anlamına geldiğini söylemektedir. Her iki durumda da çoğu, NoSQL veritabanlarının, verileri ilişkisel tablolardan farklı bir biçimde depolayan veritabanları olduğu konusunda hem fikirdir.

SQL veritabanları, dikey ölçekleme yapısına sahiptir. Yeni veri geldikçe depolama alanınızı kapasitesi daha büyük olan sunuculara taşımanız gerekmektedir ve bu durum size gittikçe pahalıya mal olmaktadır. Onun yerine, NoSQL veritabanları ise yatay ölçekleme yapısına sahiptir. Yani yeni verileri farklı depolama alanlarına bölerek tutarsınız. Bu hem daha ucuz bir yaklaşımdır hem de verilere ulaşma konusunda size hız kazandırır.

2. MapReduce
MapReduce, bir kümede paralel, dağıtılmış bir algoritmaya sahip büyük veri kümelerini işlemek & üretmek için kullanılan bir programlama modeli ve ilişkili bir uygulamadır. MapReduce programı, filtreleme ve sıralama yapan bir harita prosedüründen ve özet işlemi gerçekleştiren bir azaltma yönteminden oluşur.

Dağınık mimari üzerinde çok büyük verilerin kolay bir şekilde analiz edilebilmesini sağlayan bir sistemdir. 2004 yılında Google tarafından duyurulan bu sistem aslen 1960’lı yıllarda geliştirilen fonksiyonel programlamadaki map ve reduce fonksiyonlarından esinlenmiştir.

Map aşamasında master node (düğüm) verileri alıp daha küçük parçalara ayırarak worker (işçi) düğümlere dağıtır. Worker düğümler bu işleri tamamladıkça sonucunu master düğüme geri gönderir. Reduce aşamasında tamamlanan işler, işin mantığına göre birleştirilerek sonuç elde edilir. Daha basit şekilde ifade edecek olursak, Map aşamasında analiz edilen veri içerisinden almak istediğimiz veriler çekilir, Reduce aşamasında ise bu çekilen veri üzerinden istenilen analiz gerçekleşir.

3. Erlang
Erlang, 1986’da Joe Armstrong, Robert Virding ve Mike Williams önderliğinde geliştirilmiştir. Erlang veya alternatifi Erlang/OTP şeklinde kullanılır.

Büyük endüstriyel ve gerçek zamanlı sistemlerin programlanması için tasarlanmış, concurent(eş zamanlı) ve fonksiyonel bir programlama dilidir. Dinamik olarak yazılmıştır ve pattern matching (desen eşleme) söz dizimine sahiptir. Oldukça güçlü bir dağıtık mimariye sahip olduğu bilinmektedir. Fonksiyonlar, Erlang dilinde özyinelemeli olarak kullanılır ve tanımlanır.Büyük sistemler için en önemli özelliklerinden biri non-stop çalışmaya devam etmesidir (Herhangi bir durdurma işlemi yapılmadan yükseltme yapılacağı gibi durumlar).

4. CouchDB
Açık kaynak kodlu, belge odaklı bir NoSQL veritabanıdır. Erlang dilinde yazılmıştır. Verileri depolamak, aktarmak ve işlemek için birden fazla format ve protokol kullanır. Verileri JSON formatında tutan, MapReduce indeksleri için JavaScript ve kendi API’si için HTTP kullanan veritabanı sistemidir. İlişkisel veritabanlarından farklı olarak, çeşitli bilgi işlem cihazları, cep telefonları ve web tarayıcıları arasında kayıt yönetimini basitleştiren şemasız bir veri modeli kullanır. 2005 yılında tanıtılmıştır ve 2008 yılında Apache Software Foundation projesi haline gelmiştir.

Apache CouchDB has started. Time to relax.

5. Remote Code Execution
Uzaktan Kod Yürütme anlamına gelmektedir. Saldırganların, hedef makine üzerinde uzaktan kötü amaçlı kod veya komutlar yürütebildiği güvenlik açığıdır. Amaç belirli bir yerel makineye erişim sağlamaktır.

Remote Code Execution (RCE), ana bilgisayar tarafından kötü amaçlı yazılım indirildiğinde gerçekleşir. Saldırgan, programlama dilinden veya web sunucundan yararlanarak diğer komutları da yürütebilir. Birçok programlama dilinde, saldırgan sisteme dosya yazma, okuma veya silme komutu verebilir. Hatta saldırıya uğrayan sistem ile farklı veritabanlarına bağlanmak bile mümkün olabilir.

6. CouchDB Cluster Set Up & Port & Firewalls
CouchDB cluster modda, varsayılan olarak 5984 portunu kullanmaktadır. Erlang diğer düğümleri (nodes) bulmak için 4369 numaralı TCP bağlantı noktasını (EPMD) kullanır. Bu nedenle tüm sunucular bu bağlantı noktasında birbirleriyle konuşabilmelidir. Bir Erlang clusterında, tüm düğümler, bir örgü ağ yapılandırmasında diğer tüm düğümlere bağlanır.

Bu makinede çalışan her Erlang uygulaması (CouchDB gibi), diğer düğümlerle iletişim için otomatik olarak atanan bağlantı noktalarını kullanır. Düşündüğünüz gibi, bu tanım sonucunda rastgele bağlantı noktaları ortaya çıkmaktadır.

Bu noktaya kadar ele aldığımız zafiyet için bilinmesi gereken konulara değinmiş olduk. Artık Apache CouchDB Remote Code Execution Vulnerability için inceleme yapmaya başlayabiliriz.

Bu güvenlik açığı, çeşitli bilgi işlem cihazları, cep telefonları ve web tarayıcılarında kayıt yönetimini kolaylaştırmak için öncelikle veri toplamak ve depolamak için yaygın bir hizmet olan CouchDB 3.2.1 sürümünde bulunmaktadır.

25.05.2022 tarihinde, Apache’ nin yayınlamış olduğu resmi bildirim ile güvelik açığı duyurulmuş oldu. Önem derecesi kritik olarak (10.0) belirtilen bu güvenlik açığının etkilenenleri, Linux platformlarda CouchDB versiyonu 3.2.1 ve altı olan sistemlerdir.

Bu saldırı, Apache CouchDB’ deki bir uzaktan kod yürütme güvenlik açığından yararlanmaktadır. CouchDB yönetici kullanıcıları, veritabanı sunucusunu HTTP aracılığıyla yapılandırabilir. Başarılı bir sömürü, CouchDB yönetici kullanıcısının bir CouchDB kullanıcısı olarak rastgele kabuk komutları yürütmesine izin verecektir.

Veritabanının yerel JSON ayrıştırıcısı ile belge doğrulaması sırasında kullanılan Javascript JSON ayrıştırıcısı arasındaki tutarsızlıktan kaynaklanan CouchDB’de bir güvenlik açığı vardı. CouchDB veritabanlarının doğrudan internete maruz kalması amaçlandığından, bu, çok sayıda kurulumda ayrıcalık yükseltme ve sonucunda uzaktan kod yürütmeyi mümkün kılmış oldu.

Güvenlik açığı, CouchDB’nin tüm kullanılabilir arabirimlere bağlı rastgele bir port noktası açmasına ve ardından epmd yardımcı program işleminin bu rastgele bağlantı noktasını ağa tanıtmasına neden olmaktadır. epmd sabit bir bağlantı noktasında dinler ve bağlandığında saldırgan tam yönetici erişimine sahip olur.

CouchDB’nin varsayılan kurulum ayarlarındaki açıklar nedeniyle, sisteme erişimi olmayan saldırgan kimlik doğrulaması yapmadan erişim sağlayabilir ve yönetici ayrıcalıkları elde edebilir, sunucuyu ele geçirebilir.

Saldırganlara, yönetici kullanıcı olarak herhangi bir sayıda rastgele kod yürütmesine izin vererek, ağın tam kontrolünü verir ve sistemdeki tüm güvenlik protokollerini atlar. Sonucunda fidye yazılım olaylarına, hassas veya özel bilgilerin geçici/kalıcı olarak kaybolmasına, işlemlerin kesinti yaşamasına, mail kayıplarına ve kuruluşun itibarına potansiyel zarar verilmesine neden olabilir.

Önerilen Çözümler

  •  Apache CouchDB en son sürüme (CouchDB 3.2.2) yükseltilmelidir.
  • CouchDB kurulumlarından önce firewall (güvenlik duvarı) uygulanmalıdır.
  • Güvenlik önlemleri için her zaman uygulamalar güncel tutulmalıdır.
  • Yeni güncelleme ile CouchDB 3.2.2 ve sonraki sürümlerde eski varsayılan Erlang tanımlama bilgisi değeriyle başlamayı reddedecektir. Bu sürüme yükseltme yapıldıysa, farklı değer girilmek zorundadır.
  • Tüm CouchDB dağıtım portları (bağlantı noktaları) yerel IP adreslerine (‘127.0.0.1’ ve/veya ’ ::1’) bağlanmalıdır.


Kaynakça

Veriyum Teknoloji A.Ş.

  • Merkez Adres

    Hilal Mh. Cezayir Cd. No:15/A Çankaya Ankara / Türkiye

  • Telefon

    0312 472 22 33 | 0850 303 VRYM

  • Faks

    0850 200 21 76

  • Yetkili Kişi

    Cevdet KAYMAZ

  • Şube Adres

    Atatürk Bul. Hacı Hanife İş Merkezi No: 120/12 Odunpazarı Eskişehir / Türkiye

  • Yetkili Kişi

    Burhan KAYMAZ

  • Vergi Bilgileri

    Seğmenler Vergi Dairesi - 924 047 65 78

  • Ticaret Sicil No

    321915

  • ATO Sicil No

    2/2307

  • Denetleme

    Bilgi Teknolojileri ve İletişim Kurumu