The software specifies permissions for a security-critical resource in a way that allows the resource to be read or modified by unintended actors.
Never create NULL ACLs; an attacker can set it to Everyone.
db-4.7.25/mutex/mut_win32.c
The highlighted line of code below is the trigger point of this particular Centos 6 misc weakness.
* process run as a different user.
*/
static _TCHAR hex_digits[] = _T("0123456789abcdef");
static SECURITY_DESCRIPTOR null_sd;
static SECURITY_ATTRIBUTES all_sa;
static int security_initialized = 0;
static __inline int get_handle(env, mutexp, eventp)
ENV *env;
DB_MUTEX *mutexp;
HANDLE *eventp;
{
_TCHAR idbuf[] = _T("db.m00000000");
_TCHAR *p = idbuf + 12;
int ret = 0;
u_int32_t id;
for (id = (mutexp)->id; id != 0; id >>= 4)
*--p = hex_digits[id & 0xf];
#ifndef DB_WINCE
if (!security_initialized) {
InitializeSecurityDescriptor(&null_sd,
SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&null_sd, TRUE, 0, FALSE);
all_sa.nLength = sizeof(SECURITY_ATTRIBUTES);
all_sa.bInheritHandle = FALSE;
all_sa.lpSecurityDescriptor = &null_sd;
security_initialized = 1;
}
#endif
if ((*eventp = CreateEvent(&all_sa, FALSE, FALSE, idbuf)) == NULL) {
ret = __os_get_syserr();
__db_syserr(env, ret, "Win32 create event failed");
}
return (ret);
}
/*
* __db_win32_mutex_init --
* Initialize a Win32 mutex.
*
* PUBLIC: int __db_win32_mutex_init __P((ENV *, db_mutex_t, u_int32_t));
*/
int
__db_win32_mutex_init(env, mutex, flags)
ENV *env;
db_mutex_t mutex;