COMMAND

    kernel

SYSTEMS AFFECTED

    NetBSD 1.4, 1.5, -current

PROBLEM

    Following  is  based  on  a  NetBSD  Security  Advisory  2001-006.
    Malicious  parties  may  be  able  to  prevent  a NetBSD node from
    communicating  with  other  nodes  by  transmitting a lot of bogus
    fragmented IPv4  packets.   For the  attack to  be effective,  the
    attacker needs  to have  good network  connectivity to  the victim
    node (like logged onto the  victim machine itself, connected by  a
    fat LAN, or whatever).

    There are  exploits for  this problem  available on  the Internet.
    However, the  attack is  timing dependent  and the  attack is  not
    always successful.

    In the IPv4 input  path (sys/netinet/ip_input.c), there's code  to
    reassemble fragmented IPv4 datagrams.  Datagram fragments destined
    to the  node will  be queued  for 30  seconds, to allow fragmented
    datagrams to be reassembled.   Until recently, there was no  upper
    limit in the number of reassembly queues.  Therefore, a  malicious
    party may be  able to transmit  a lot of  bogus fragmented packets
    (with different  IPv4 identification  field -  ip_id), and  may be
    able to put the target machine into mbuf starvation state.

    Recently     NetBSD     introduced     a     new     sysctl(3)   -
    net.inet.ip.maxfragpackets.   With  this,  you  can  configure  an
    upper limit to the number of  reassembly queues.  If you want  the
    old  behavior  (no  limit),  you  can  set the value to a negative
    value.

    Thanks  To  James  Thomas  for  bringing  this  problem  to NetBSD
    attention,  and  Jun-ichiro  Hagino  for  providing  a fix for the
    problem.

SOLUTION

    (1) Upgrade  the system  from newer  sources or  binaries: Compile
        and  install  a  kernel  which  has  the  sysctl(3)   variable
        net.inet.ip.maxfragpackets  in  the  sysctl  MIB.   With  this
        variable, you can limit the number of IPv4 fragment reassembly
        queues  kept  on  the  system.   The  value needs to be picked
        carefully, considering the role of the node (i.e. if the  node
	is a busy web server, you  may want to set the value  higher).
	Note that, however,  even with the  configuration knob, it  is
	possible  for  attackers  to  transmit  a  lot  of  bogus IPv4
	fragmented packets, and prevent other fragmented IPv4  traffic
        from  getting  reassembled.   Unfragmented  IPv4 communication
        will be kept safe by the variable.

        Systems  running  NetBSD-current  dated  from before April 17,
        2001 should be upgraded to NetBSD-current dated April 17, 2001
        or later.

        Systems running NetBSD 1.5.x  systems dated from before  April
        24, 2001 should  be upgraded to  NetBSD 1.5.x dated  April 24,
        2001 or later.  NetBSD 1.5.1 will ship with the fix.

        There is no fix to 1.4.x available at this time.

    (2) Increase the  kernel option NMBCLUSTERS.   Use an  appropriate
        value  for  NMBCLUSTERS  for  the  node.   Normally, it is the
        cluster  mbufs  which  go  into  a  starvation state with this
        attack.  By setting NMBCLUSTERS to a higher value, you may  be
        able to prevent the mbuf memory pool from starving.

        Note  that  a  couple  of  NetBSD  device drivers pre-allocate
        cluster mbufs within the  driver, for performance reasons  and
        DMA  management  reasons.    For  example,   the  fxp   driver
        pre-allocates  64  cluster  mbufs  per  interface.  If you are
        using such network cards,  you will want to  raise NMBCLUSTERS
        even more.