onatweb adlı üyeden alıntı: mesajı görüntüle
Konuya son bir açıklık getirmek istiyorum. Bu saate kadar sürekli sakinliğimi korudum, herkese saygı çerçevesinde cevap vermeye çalıştım. Sakinliğimin getirdiği cevaplar neticesinde ise sanki bu açık benden kaynaklanıyormuş gibi algılanmış ve buna inanıp adeta bir vatan savunması yapanları gördükçe, dün "daha tartışmayacağım" dediğim halde tekrardan bir açıklama yapma gereğinde gördüm kendimi.

Konuya girmeden önce dediğim gibi mağdur olan firmalar ile iletişimdeyim. Elimden ne geliyorsa bu firmalar için yapmaya dünden razı olduğumu zaten herkes biliyor. Sorumlusu ben olmadığım halde, sorumluluk almaya razıyım. Tekrardan aşağıda yazacaklarımı üstüne alınmak isteyenler alınsın.

Herkesin ön yargılarını bir kenara koyarak bu yazdıklarımı gerçekten tek taraflı olmadan, sağ duyulu bir şekilde okumasını tavsiye ediyorum. Bu bugün benim başıma geldi yarın sizin başınıza da gelebilir. Haksız ve sebebi sen olmadığın halde linçlenmek gerçekten kötü bir şey bunu belirteyim öncelikle.

Öncelikle şu konuya açıklık getirmek istiyorum. Ve anlaşılır bir dilden anlatmak istiyorum. İnternette framework ile alakalı 2-3 tane web sitesinde bir içerik yayınlanmış. Bu konu hakkında hiç bir detaylı döküman yok. "Bakın şöyle bir şey var, güncellerseniz iyi olur" şeklinde paylaşımlar var. Detaylı bir döküman bulamadığım içinde kendim biraz kodların içine girdim. Yii'nin paylaşmış olduğu update ile diğer versiyonu karşılaştırarak bir çıkarımda bulundum. Bu çıkarımı da yanılma payım var diyerek ölümüne savunmuşluğum yok. Ama kesin olarak baktığım tek şey ; bu bir database açığı. İnternette php'nin serialize, unserialize fonksiyonlarını araştırırsanız eğer mantığı anlarsınız. Framework kendi içerisinde database içerisine sorgu sokarken bu fonksiyonları kullanıyor. Bu fonksiyonları kullanım biçimlerinde ise bir yanlışlık varmış bunu update ile düzeltmişler.

En kötü senaryoyu düşünerek yazıyorum. Framework kendi içerisinde database sorgusu yaparken unserialize fonksiyonunu kullanıyor. Bazı yanlış kullanımlar, sorgunun önüne geçebilmeye büyük ihtimalle olanak sağlıyor. Yani örnek veriyorum sorgunun amacı "Veri tabanından sadece 1 id sini sil" ise açık kullanılarak bu sorgu "Veri tabanından tüm verileri" sil olarak değiştirilerek bir nevi database'den veri kaybına yol açıyor.

Yani burada 0'dan bir sorgu oluşturulması mümkün değil. Sadece var olan bir sorgunun devamını bazı operatörler ile getirerek o alana etki ediyorsunuz. Bu açık size veri tabanı ile alakalı komple bir erişim sunmuyor.

Bu database sorgularınının devamına açık ile ek sorgu eklediler diyelim. Burada etkilenen tek veri database içerisindeki önemsiz bir veri olacaktır. Tutup da ESXI'den herhangi bir düzenleme yapmaz. Böyle bir şey yapıldığını savunan bir insan varsa da şuna da inanmalı kendisi;

Bir not defteri açıp, içine herhangi bir ip adresi yazdıktan sonra, yazdığı ip adresini backspace ile silip, sildiği bu ip adresinin ESXI'den de silinmesini beklemek. Bu ne kadar saçmaysa veri tabanından bir veri silmesi, veya düzenlemesi yapıldıktan sonra ESXI tarafına işlemesi de o kadar mantıksız.

Bu açık ile ssh root girişi yapılabilir gibi birisi kuyuya taş atmış, tüm herkeste inanıyor. Anlayabilmiş değilim. İnsanların bu kadar kolay manipüle edildiğini görünce gerçekten şok yaşadım. Böyle bir şeyin olması imkansız. Konuyu açan kişinin WP konuşmasındaki yazısını okuyarak ve çok küçük bir araştırma yaparak bunun ne kadar saçma bir argüman olduğunu anlayabilirsiniz.

Database sorgusu ile ssh root girişi yapılabilmesinin imkanı yoktur.

Hadi diyelim ki olmayacak bir senaryoyu canlandıralım ve database sorgusu ile ssh girişi yaptığını düşünelim.

Burada gene suçlu ben değilim ki ? Ben açık kaynak kodlu bir yazılımda düzenleme yaptım. Bu yazılım framework olarak yii2 kullanıyor. Açık framework tarafında ?

Firmaların çokça şikayet ettiği ve eklenmesi iyi olur dediği şeyleri analiz ederek bu açık kaynak kodlu yazılımın içine ekledim. Bu eklediğim özellikleri ise pazarladım.

Yani bazı insanların yaptığı olaya çok basite indirgeyerek bir örnek vereyim;

"Bir bina var ve bu binanın dış cephe boyasına ihtiyacı var. Ben buradaki dış cephe boyasını yapan bir bireyim. İnsanların yaptığı ise bina çöktü, suçlu boyacıdır demek."

Önceden yazdığımı tekrarlıyorum, muhatap alınabilecek tek türk kişi benim. Ve linçlemeyi seven bir toplum da olduğumuz için sonuç buraya kadar geldi.

Aynı hassasiyeti, Altında binlerce çalışanı olan ve binlerce firmayı mağdur eden vmware'ye de göstermenizi isterim açıkçası.

Daha yazmak istediğim çok şey var. Çirkinleşen insanlar gibi, çirkinleşmek istemiyorum kısacası, o yüzden diğer yazmak istediğim şeyleri yazmak istemiyorum.

Artık komplo teorilerini ve içi boş kartezyen düşünceleri bırakın lütfen.

Selametle.
Konuyu inceledim, olaylarla herhangi bir bağlantım yok sadece incelemelerim üzerine gidişatı anlayabilmek için yorumda bulunmak istiyorum çünkü araştırdığımda VM silinme olayının esası kim bunu çözemedim. BatchQueryResult.php" dosyası üzerinde "__wakeup" ve "__sleep" fonksiyonları ile açığı kapattıklarını söylüyorlar.

https://github.com/yiisoft/yii2 üzerinden 2.0.37 ve daha eski sürümleri kontrol edebilirsiniz.

**sanırım** Açığı incelediğimde "framework/helpers/BaseVarDump.php" dosyasınıda kontrol edecek olursanız "VarDumper" sınıfı üzerinde zaafiyet olduğu anlaşılıyor, $output içerisinde serialize üzerinden veriler eklendiği için ve bu output "dumpasString" fonksiyonu üzerinde "<?php" olarak belirtilmiş olup ve output içerisinde serialize içerisinden alınan veriler eklenmiş, sorun tamamen framework üzerinde gözüküyor:
public static function dumpAsString($var, $depth = 10, $highlight = false)    {
        self::$_output = '';        
        self::$_objects = [];        
        self::$_depth = $depth;        
        self::dumpInternal($var, 0);        
        if ($highlight) {            
        $result = highlight_string("<?php\n" . self::$_output, true);            
        self::$_output = preg_replace('/&lt;\\?php<br \\/>/', '', $result, 1);            }
        return self::$_output;    
}
Yukarıda gösterdiğim kod üzerinde çalıştırılıyor highlight kapalı kaldığında herhangi bir preg_replace işlemi olmadığı için direkt php kod output'u return ediliyor ve "dumpAsString" fonksiyonuna serialize olarak gelen bu veriler kullanıcı tarafından unserialize edilirse tamamen php kod çalıştırma zaafiyeti söz konusu olabilir.

Eğer ki belirttiğim gibi php çalıştırıyorsa zaten open source bir kaynak olduğu için fonksiyonlar kullanılarak sorgu gönderilebilir sorgu gönderilen sınıflarıda inceledim gayet işleme müsait duruyor, eğer sorgu çalıştırılabiliyor ise sorgu içerisinden dosya oluşturulabilir, oturum oluşturulabilir, kullanıcı parolası değiştirilebilir vs. vs...

VM silinme olayında ise dediğim gibi php çalıştırılıyor ise dosya oluşturma(python vs.), işleme geçirme herhangi bir durum her türlü ele alınabilir.