Copy/Paste Programcılığın Yazılım Güvenliğine Etkisi

Merhaba,

Geçtiğimiz günlerde netsec mail listesine Mert Sarıca tarafından bir mail gönderilmişti. Mail şu şekilde başlamaktaydı,

2009 yılında “Bilgi güçtür ve paylaşıldıkça artar” mottosuyla oluşturduğum…

Bu cümle bireysel bilgi gelişimi adına çok önemli bir ifade. Benim de 2005 yılında başlayan siber güvenlik alanına olan ilgim bu motta üzerine kurulmuştu. Bilgi güçtü, ve paylaştıkça artıyordu. Sadece siber güvenlik alanı değil, özellikle bilgisayar programcılığı üzerinde de son derece etkisi olan bu motto, günümüzün belkide en önemli platformu olan stackoverflow.com sitesini kurdu.

Özellikle son bir yıldır hem kendimi, hemde ekibimizde ki stajyer arkadaşları kapsayan bir kural koydum. Bu kuralı zaman içerisinde kural olmaktan çıkıp, kültür olmasına inanarak koydum. Kural şuydu,

“Mesai saati içinde ve ya dışında, iş süreçlerini aksatmaya engel olmadan, stackoverflow.com adresinde ki security tag’in de sorulan sorulara cevap vermek”

Bu her ne kadar basit bir kural olsada, son derece emek ve zaman isteyen bir iş. Sorulan sorulara cevap vermek istenildiği zaman aslında onlarca başka sorunun doğduğuna, bu sorular bir arada ele alındığında ise insanı başka alt konuları araştırmaya ittiğini gördüm/yaşadım. Bir çok insan yazdığı kod bloğunu paylaşıyor, yaşadıkları problemleri çözmeye çalışıyordu. Ardından benzer bir sorun yaşayan kişi doğrudan problemi ve çözüm üreten kodu görebiliyordu… Böylece “Bilgi güç oluyor ve paylaştıkça çoğalıyordu”.

Bir soru, bir dünya problem

Dün akşam kişisel bir projem için kod geliştirirken Django isimli framework’ün dosya yükleme süreçlerinde herhangi bir validator sınıfı sunmadığını fark ettim. Bir diğer deyişle, dosya yüklerken dosyanın boyutunu, content-type’ını ve uzantısını kontrol etme imkanı sunan bir sınıfın Django tarafından by default sunulmadığını gördüm. Bunun üzerine google’e gidip FileField olarak tanımladığım model alanı için aşağıdaki soruyu sordum.

“Only accept a certain file type in FileField”

İlk sırada her zaman ki beklediğim bir stackoverflow linki çıktı http://stackoverflow.com/questions/6460848/in-django-how-does-one-limit-file-types-on-file-uploads-for-modelforms-with-fil . Soru tam olarak benim yaşadığım şeyi anlatıyordu;

“In Django, how does one limit file types on file uploads for ModelForms with FileFields?”

Ve tam olarak 4 yıl önce sorulmuştu. Bu süre zarfında ise 5.500 kere bu konu internet kullanıcı tarafından görüntülenmişti!

Buyrun verilen ve doğru olarak kabul gören cevaplardan birine bakalım.

Validating with the extension of a file name is not a consistent way. For example I can rename a picture.jpg into a picture.pdf and the validation won’t raise an error.

A better approach is to check the content_type of a file.

def validate_file_extension(value):
    if value.file.content_type != 'application/pdf':
        raise ValidationError(u'Error message')

Aslında cevap veren kullanıcı, dosya isimleri üzerinde yapılacak değiştirmeler ile olası kuralların atlatılabileceğinin farkında. Lakin farkında olmadığı şey Burp ile request’i durdurarak Content-Type değerininde değiştirilebildiği. Bu cevabı görüp doğrudan kod bloğuna ekleyen yazılım geliştirici arkadaşlar için malesef yapacak bir şey yok.

Özellikle son bir yıldır yazılım geliştirici ekipler ile yakından çalışma imkanı bulmuş biri olarak şunu rahatlıkla söyleyebilirim ki, herkes copy/paste yapar! Hemde herkes.

Paylaşılan her bilgi güvenilir değildir…