pkgsrc-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: pkg/49860: DoS against snmpd on netbsd routers



On May 2, 11:01pm, 6bone%6bone.informatik.uni-leipzig.de@localhost (6bone%6bone.informatik.uni-leipzig.de@localhost) wrote:
-- Subject: Re: pkg/49860: DoS against snmpd on netbsd routers

| On Tue, 28 Apr 2015, Christos Zoulas wrote:
| 
| > Looks like that qsort is deadly... I wonder why it thinks it needs to
| > sort something all the time. The arp stuff looks suspect as expected.
| > (if it is related to ndp). I am not sure if I have time to optimize the
| > code, but using a hashmap instead of sorting seems to be a good thing
| > to do.
| >
| 
| Yet another information. In normal operation 'ndp -an | wc -l' reports 
| nearly 1500 entries.
| 
| During the attack ndp reports:
| 
| ndp: ioctl(SIOCGNBRINFO_IN6): Invalid argument
| ndp: failed to get neighbor information
| ndp: ioctl(SIOCGNBRINFO_IN6): Invalid argument
| ndp: failed to get neighbor information
| ...
| 
| Could that be a problem for the snmpd?

I suspect that the error handling and processing on snmpd is flawed.
Really, I should fix it... But I find the code ugly, so I don't like
working on it.

This comes from here: 
                if ((error = in6_setscope(&nb_addr, ifp, NULL)) != 0)
                        return error;

                s = splsoftnet();
                if ((rt = nd6_lookup(&nb_addr, 0, ifp)) == NULL ||
                    (ln = (struct llinfo_nd6 *)rt->rt_llinfo) == NULL) {
                        error = EINVAL;
                        splx(s);
                        break;
                }

Perhaps you can add some debugging code there and print some things?

christos


Home | Main Index | Thread Index | Old Index