
One issue is that it hasn't been maintained in a decade; one has to use an
unofficial fork of the code which updates it for the 21st century (One good
fork is Zinq
N-DjbDNS).
This is not the most serious issue with djbdns. The main issue with djbdns isn't an issue with djbdns per se but an issue with some of its userbase. A number of users are still using an unpatched copy of djbdns-1.05, released a decade ago because they mistakingly believe the software is perfectly secure.
This myth is still told on online discussion forums; for example, just last year two posters on Slashdot (which has not been a very good place to post anything for years, but that is another rant for another day) spouted that djbdns is (nearly) completely bug-free without anyone posting a follow-up correcting their mistake.
This is very dangerous. People spouting on public forums about how djbdns is magically 100% perfectly secure and never need patching need to -- how do I say this -- pull their head out a place where the sun doesn't shine.
A stock install of djbdns-1.05 has security problems. Three, to be exact. Two of them can be resolved with simple, small patches:
*** dnscache.c.orig Sun Feb 11 13:11:45 2001
--- dnscache.c Tue Mar 18 17:22:03 2003
***************
*** 1,4 ****
--- 1,5 ----
#include <unistd.h>
+ #include <signal.h>
#include "env.h"
#include "exit.h"
#include "scan.h"
***************
*** 391,396 ****
--- 392,398 ----
char *x;
unsigned long cachesize;
+ signal(SIGPIPE, SIG_IGN);
x = env_get("IP");
if (!x)
strerr_die2x(111,FATAL,"$IP not set");
Patch #2:
--- response.c.orig 2009-02-24 21:04:06.000000000 -0800
+++ response.c 2009-02-24 21:04:25.000000000 -0800
@@ -34,7 +34,7 @@
uint16_pack_big(buf,49152 + name_ptr[i]);
return response_addbytes(buf,2);
}
- if (dlen <= 128)
+ if ((dlen <= 128) && (response_len < 16384))
if (name_num < NAMES) {
byte_copy(name[name_num],dlen,d);
name_ptr[name_num] = response_len;
The third one, however, requires some fundamental design changes to
properly address; this webpage has
more details.
Personally, my solution to this cache spoofing issue with djbdns is to use deadwood (MaraDNS 2.0's recursive resolver) instead; but I am a little biased.
djbdns is an excellent program. I'm not denying that. But it does have security holes and people need to stop claiming otherwise.
Update (January 4, 2011):
To give credit where credit is due, the first patch above comes from Mark Delany in this mailing list posting; the second patch above comes from DJB himself in this posting.
I also forgot about the large packet compression pointer bug, which also has security consequences. More information is in this mailing list posting.
Updated in 2014 to point to N-DjbDNS instead of the now-dead Zinq.
See also: Finally, a CVE-2012-1911 patch and Yet another DjbDNS security hole
To post a comment about this entry, send me an email and I may or may not post your comment (with or without editing; see the blog index for details)