[j-nsp] Bizaare bug of the year award

Richard A Steenbergen ras at e-gerbil.net
Thu Sep 25 17:17:03 EDT 2008


Ok, I just found a Juniper bug that is so strange I can't even bring 
myself to open a case for it. Not only because I can just imagine trying 
to explain it to JTAC, but because it is so freaking bizaare and funny 
that I just have to share it with others. :)

It seems that in 9.1+ code there is a bug in the traceroute application, 
which causes it to query the incorrect reverse DNS for certain IP 
addresses. The nameservers and the resolv lib on the router itself are 
fine, you can do a "host x.x.x.x" and get correct results, it is only 
the traceroute application which is broken. JUNOS 9.0 and earlier is 
confirmed to be working correctly, JUNOS 9.1/9.2 is confirmed to be 
broken on all versions.

Here is an example:

traceroute to ytti.fi (62.236.255.178), 30 hops max, 40 byte packets
...
 7  te0-2-0-0-10G.alb2nqh1.ip.tele.dk (83.88.20.25)  148.334 ms  126.819 ms  126.299 ms
 8  pos0-0-0-0-10G.stkm3nqh1.ip.tele.dk (83.88.27.6)  156.377 ms  127.819 ms  126.253 ms
 9  Wimax-Cali-190-0-0-61.orbitel.net.co (62.236.181.189)  126.271 ms  126.310 ms  126.189 ms
10  Wimax-Cali-190-0-0-16.orbitel.net.co (62.236.181.16)  130.327 ms  126.542 ms  126.455 ms
11  Wimax-Cali-190-0-0-29.orbitel.net.co (62.236.182.29)  126.178 ms  126.272 ms  126.346 ms

As you can see, it seems to be querying the incorrect IP for hops 9, 10, 
and 11. Here is a tcpdump from the router itself showing that the 
traceroute app is actually querying for the wrong ptr:

IP (tos 0x0, ttl 62, id 0, offset 0, flags [DF], proto: UDP (17),
length: 119) ns1.mynameserverhere.net.domain >
lo0.myrouterhere.net.56079: [udp sum ok] 11052 q: PTR? 
29.0.0.190.in-addr.arpa. 1/0/0 29.0.0.190.in-addr.arpa. PTR
Wimax-Cali-190-0-0-29.orbitel.net.co. (91)

As you can see, hops 10 and 11 are directly mapping of the last octet to
a query of 190.0.0.x, but hop 9 is not. However, since 189-61=128, you
can clearly see that hop 9 is actually zeroing out the top bit (or bits)
of the last octet.

Here is another example of the brokenness:

traceroute to www.telekom.de (217.6.10.34), 30 hops max, 40 byte packets
...
 6  Wimax-Cali-190-0-0-42.orbitel.net.co (62.154.16.234)  13.428 ms 
    Wimax-Cali-190-0-0-46.orbitel.net.co (62.154.16.238)  15.618 ms 
    Wimax-Cali-190-0-0-42.orbitel.net.co (62.154.16.234)  15.574 ms

Only thing in common here is the 62 first octet, though you can now see
that its zeroing out the top 2 bits when doing its lookup. No clue if
there are any other patterns of IPs where this happens also, if all of
62.0.0.0/8 is broken, etc, but its definitely been confirmed on many
routers.

Bonus points to any jnpr developer who can tell me how you guys actually
managed to break this, because this is an award winner in my book. :)

-- 
Richard A Steenbergen <ras at e-gerbil.net>       http://www.e-gerbil.net/ras
GPG Key ID: 0xF8B12CBC (7535 7F59 8204 ED1F CC1C 53AF 4C41 5ECA F8B1 2CBC)


More information about the juniper-nsp mailing list