Kişisel Web Alt Yapılarında Composer’ın Tehlikeleri

Gününümüzde geliştirilen herhangi bir projede paket yöneticisinin olmayışı pek kabul edilebilir bir şey değildir. Her şeyi sıfırdan yazmak yerine, topluluk içerisindeki gurular tarafından geliştirilmiş modülleri/iş paketlerini projeniz içerisinde kullanmak ve anlık olarak yönetebilmek son derece elzem bir konudur. Bu süreci PHP dünyasında çözen yaklaşım ise composer‘dir.

Peki nedir bu composer ?

Php için geliştirilmiş bir bağımlılık yönetim aracıdır. Projemizde kullanmak istediğimiz php kütüphanesinin ihtiyacı olan php dosyalarını projeye dahil edilmesini sağlayan, çeşitli güncellemeleri otomatik yapabilen bir araçtır. Php’de Composer’ın yaptığı işlemleri Ruby’de bundler, NodeJs’de Npm, Java’da Maven yapmaktadır.

Neden İhtiyaç Duyulur ?

Geliştirdiğimiz projelerimizde birçok kütüphaneye ihtiyaç duyarız ve bu kütüphanaleri projemize ekleriz. Bu kütüphaneler sürekli geliştiriliyor,güvenlik açıkları gideriliyor performans artırıcı güncellemeler yapılıyor bir üst versiyonları çıkarılıyor bizimde bu güncellemeleri almamız gerekiyor aksi takdirde projemizde güvenlik açığı oluşabilir, performans açısından istediğimizi alamayabiliriz, eski versiyonu kullandığımız için bu teknolojide geride kalmış olabliriz. Birden fazla kütüphane kullandığımız için bu kütüphaneleri tek tek projemize eklemek veya projede bulunana kütüphaneleri güncellemek biraz zahmetli olucaktır işte tam burada devreye composer giriyor. Biz ihtiyacımız olan kütüphaneyi veya güncellemesini istediğimiz kütüphaneyi composer’a belirtiyoruz composer bizim yerimize istediğimiz kütüphaneyi projemize ekliyor veya güncelliyor. Bir örnek ile gözümüzde canlandıralım Bizim Php ile yazdığımız kod başka birinin Bilgisayarın’da çalışmayalbilir bu sorun Php versiyonundan kaynaklanıyor olabilir bizim kodumuz Php 5.3 üstünü destekliyordur ancak o kişi Php 5.2 kullanıyır olabilir eğer biz projeye Composer aracını yüklemişsek o kişi Composer’ı kullanarak versiyon sorununa takılmadan projeyi çalıştırabilir.

Bu bilgileri doğrudan alıntıladığım Bulutfon bloğunda composer ile ilgili daha detaylı bilgileri okumanız önemle rica olunur.

Demo Sayfaları ve Composer’ın Etkisi

Başka birisi tarafından geliştirilmiş kodları, her ne kadar aylık +1M kullanıcısı olsada, doğrudan projemiz içerisinde güncelliyor olmak potansiyel bir güvenlik riski oluşturur. Bunu kabul etmekle birlikte, bu yazıda asıl bahsedeceğim risk bu değildir.

Bir çok modül örnek kullanım dosyaları ile birlikte release edilir. Farz edelim ki bir Image processing kütüphanesi mevcut, bu kütüphanenin kullanımını örnekleyen kodlar ise /samples veya /examples altında yayınlanır. Örnek kullanımlarında içerisinde bulunduğu bu proje, composer paketi olarak yayınlanmış ise bazı yeni risklerimiz oluşacaktır.

Hiçbir yazılım geliştirici, örnek olarak yazdığı, projenin veya kütüphanenin nasıl kullanılacağını anlattığı kodlarda güvenliğe önem vermez.

Bu risklerin etkisini bir adet gerçek hayat örneği üzerinden anlatmak isterim. Vulnerability research çalışmalarım sırasında karşılaştığım, bu blog yazısını yazmama neden bu hikaye Tiki Wiki isimli open-source PHP projesi ile ilgili.

Tiki Wiki projesi release edilen paketlerinde /vendor ve /vendor_extra klasörleri gelmektedir. Bu klasörler composer tarafından indirilen bağımlılıkların tutulduğu yerdir. Yaz girişinde Kişisel Web Altyapılarında dememin başlıca sebebi ise bu klasörler web üzerinden erişilebilir durumdadır. Laravel gibi günümüz popüler framework’leri composer tarafından indirilen klasörleri web’den erişilemez bir dizinde tutar!

Paket ile doğrudan gelen örnek bir elfinder.html veya back-end uygulaması olen php klasörü dikkatimizi çekmektedir. Daha öncede dediğimiz gibi, hiçbir yazılım geliştiricinin, sample code için güvenliği önemsemeyişi burada önemli rol oynar. php klasörü içerisindeki end-point API yapısında, herhangi bir file extension veya file type kontrolü yoktur..!

Bu durumu tespit eder etmez Tiki Wiki ekibine mail ile ulaşığ durumu bildirdim. Çok nazik bir şekilde benden “Public Disclosure” politikamı istediler ve benim belirlediğim zaman sınırına göre release çıkacaklarını dile getirdiler. Ve sonunda release’i gerçekleştirdiler.

tikiwiki

İlgili zafiyetin Metasploit modülü ise aynı gün içerisinde MSF ekibi tarafında kabul edildi.

https://rapid7.com/db/modules/exploit/unix/webapp/tikiwiki_upload_exec

Önlem

Kendi altyapınızı geliştirmeyiniz. Bağımlılıklar web üzerinden erişilemiyor olmalıdır. Zira Laravel vb. altyapıları kullanmanız durumunda bu sorun ile karşılaşmayacaksınızdır.