7 августа 2002 Удаленный DoS в NFS сервере в FreeBSD Network File System (NFS) позволяет хосту экспортировать файловую систему или ее часть, так, чтобы другие хосты могли обратиться к ним по сети и установить их, как будто они были на местных дисках. NFS использует структуру Sun Remote Procedure Call (RPC). Часть кода NFS сервера, который обрабатывает входящие RPC сообщения, содержит ошибку, которая при получении сервером сообщения с нулевой длиной, может привести к созданию ссылки на предыдущее сообщение с образованием петли в цепочке сообщений. Это может привести к бесконечной петли в кода NFS сервера, при попытке пересечь такую цепочку. Некоторые версии Linux могут производить нулевые RPC сообщения в некоторых случаях. Система FreeBSD с NFS сервером может заблокироваться при попытке соединиться с таким клиентом. Также атакующий может сам создавать пустые RCP сообщения, что может привести к блокировки уязвимой FreeBsd системы. Уязвимость обнаружена во всех реализациях FREEBSD до версии 4.6.1-RELEASEp7 и 4.6-STABLE включительно. Другие публикации: FreeBSD-SA-02:36.nfs: Bug in NFS server code allows remote denial of service / Уведомления / FreeBSD / 7 августа 2002 -----BEGIN PGP SIGNED MESSAGE----=============================================================== ============== FreeBSD-SA-02:36.nfs Security Advisory The FreeBSD Project Topic: Bug in NFS server code allows remote denial of service Category: core Module: nfs Announced: 2002-08-05 Credits: Mike Junk <[email protected]> Affects: All releases prior to 4.6.1-RELEASE-p7 4.6-STABLE prior to the correction date Corrected: 2002-07-19 17:19:53 UTC (RELENG_4) 2002-08-01 19:31:55 UTC (RELENG_4_6) 2002-08-01 19:31:54 UTC (RELENG_4_5) 2002-08-01 19:31:54 UTC (RELENG_4_4) FreeBSD only: NO I. Background The Network File System (NFS) allows a host to export some or all of its filesystems, or parts of them, so that other hosts can access them over the network and mount them as if they were on local disks. NFS is built on top of the Sun Remote Procedure Call (RPC) framework. II. Problem Description A part of the NFS server code charged with handling incoming RPC messages had an error which, when the server received a message with a zero-length payload, would cause it to reference the payload from the previous message, creating a loop in the message chain. This would later cause an infinite loop in a different part of the NFS server code which tried to traverse the chain. III. Impact Certain Linux implementations of NFS produce zero-length RPC messages in some cases. A FreeBSD system running an NFS server may lock up when such clients connect. An attacker in a position to send RPC messages to an affected FreeBSD system can construct a sequence of malicious RPC messages that cause the target system to lock up. IV. Workaround 1) Disable the NFS server: set the nfs_server_enable variable to "NO" in /etc/rc.conf, and reboot. Alternatively, if there are no active NFS clients (as listed by the showmount(8) utility), just killing the mountd and nfsd processes should suffice. 2) Add firewall rules to block RPC traffic to the NFS server from untrusted hosts. V. Solution The following patch has been verified to apply to FreeBSD 4.4, 4.5, and 4.6 systems. a) Download the relevant patch from the location below, and verify the detached PGP signature using your PGP utility. # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-02:36/nfs.patch # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-02:36/nfs.patch.asc b) Apply the patch. # cd /usr/src # patch < /path/to/patch c) Recompile your kernel and modules as described in <URL:http://www.freebsd.org/handbook/kernelconfig.html> and reboot the system. VI. Correction details The following list contains the revision numbers of each file that was corrected in FreeBSD. Path Revision Branch - ------------------------------------------------------------------------src/sys/nfs/nfs_socket.c RELENG_4 1.60.2.5 RELENG_4_6 1.60.2.3.2.1 RELENG_4_5 1.60.2.1.6.1 RELENG_4_4 1.60.2.3.4.1 - -----------------------------------------------------------------------------BEGIN PGP SIGNATURE----Version: GnuPG v1.0.7 (FreeBSD) iQCVAwUBPU8NTVUuHi5z0oilAQHMZAP+L80QudeELKHfZYxG5PPf6cuWkreAC avl LP1oJDHLWuw32K4tM0Y+v505t+U2/wGnl2dSqwkfemzxlhzfsmrbubQx8EFgO6sb nhEEtSfu4t81ylHTY+qEWFtRweB5A1tGJaYV67wybWZxulkYJ9qnRLKF4PToc0E3 T1Y/CN0DNYA= =2YSa -----END PGP SIGNATURE-----