31th May 2002 [SBWID-5385]
COMMAND
cvsd local overflow
SYSTEMS AFFECTED
version 1.11
corrected in 1.11.2
PROBLEM
david evlis reign from der sys posted following bug regarding CVSd:
the family of scanf functions (scanf, sscanf, fscanf) are generally
insecure in usage and steps have been taken to make them more...secure
you might say like adding bounds checking (sscanf(hey, \"%.4096s %d\",
buffer, int)) but the function still remains quite insecure, to a
lesser known bug like an off by one.
WRONG:
char buf[10];
int i;
sscanf(hey, \"%.10s\", buf); <-- boundary checks ten bytes...
RIGHT:
char buf[10];
int i;
sscanf(hey, \"%.9s\" buf); <-- see!
therefore in the first example (WRONG) the last byte into buf will
exeed the allocated space (10 bytes) by one byte. woops.
(http://www.hert.org/papers/klog-1.html <-- nice article)
details:
in cvs-1.11/src/rcs.c:
info = findnode (vers->other_delta, \"special\");
if (info != NULL)
{
/* If the size of `devtype\' changes, fix the sscanf call also */
char devtype[16]; <-- SIXTEEN BYTES
if (sscanf (info->data, \"%16s %lu\", <-- WOOPS SHOULD BE 15
devtype, &devnum_long) < 2)
error (1, 0, \"%s:%s has bad `special\' newphrase %s\",
workfile, vers->version, info->data);
devnum = devnum_long;
if (STREQ (devtype, \"character\"))
special_file = S_IFCHR;
else if (STREQ (devtype, \"block\"))
special_file = S_IFBLK;
else
error (0, 0, \"%s is a special file of unsupported type `%s\'\",
workfile, info->data);
}
}
this is only a locally exploitable hole since the data is read from
info->data which in turn is from a symlinked local file (heh, you know
where to find it);
SOLUTION
Upgrade to 1.11.2, or apply following patch written by der sys
(corrected by Larry Jones):
--- rcs_old.c Mon Jan 25 02:05:16 2002
+++ rcs.c Mon Jan 25 02:05:40 2002
--- 4238: if (sscanf (info->data, \"%16s %lu\",
+++ 4238: if (sscanf (info->data, \"%15s %lu\",
devtype, &devnum_long) < 2)
error (1, 0, \"%s:%s has bad `special\' newphrase %s\",
workfile, vers->version, info->data);
TUCoPS is optimized to look best in Firefox® on a widescreen monitor (1440x900 or better).
Site design & layout copyright © 1986-2025 AOH