Bueno no queria tratar esto en un foro publico pero va no hay de otra.....
Ahi esta donde se copia el name y justo antes.
Parece bien o no ?
A veces estara bien pero dudo que los que usan bluz como lib se den cuenta de esto, len tendrian que mandarlo con 1 menosm, sino permite sobreescribir el NULL.
Pues si se puede hacer algo, aunque no estoy 100 % seguro de que se pueda correr codigo aun, lo que si se es que 100% DoS seguro, si es que corre como root.
ahora para explotarlo, asi por ser un sitio publico solo digo, hay que tener un name de justo 247 chars, el ultimo char es muy importante dado que se copiara envez del \0 y strncpy no terminara el string en \0......bueno ya dije demasiado.......afecta a cualquier programa de bluz.
Código [Seleccionar]
int hci_read_remote_name_with_clock_offset(int dd, const bdaddr_t *bdaddr, uint8_t pscan_rep_mode, uint16_t clkoffset, int len, char *name, int to)
{
evt_remote_name_req_complete rn;
remote_name_req_cp cp;
struct hci_request rq;
memset(&cp, 0, sizeof(cp));
bacpy(&cp.bdaddr, bdaddr);
cp.pscan_rep_mode = pscan_rep_mode;
cp.clock_offset = clkoffset;
memset(&rq, 0, sizeof(rq));
rq.ogf = OGF_LINK_CTL;
rq.ocf = OCF_REMOTE_NAME_REQ;
rq.cparam = &cp;
rq.clen = REMOTE_NAME_REQ_CP_SIZE;
rq.event = EVT_REMOTE_NAME_REQ_COMPLETE;
rq.rparam = &rn;
rq.rlen = EVT_REMOTE_NAME_REQ_COMPLETE_SIZE;
if (hci_send_req(dd, &rq, to) < 0)
return -1;
if (rn.status) {
errno = EIO;
return -1;
}
rn.name[247] = '\0';
strncpy(name, (char *) rn.name, len);
return 0;
}
int hci_read_remote_name(int dd, const bdaddr_t *bdaddr, int len, char *name, int to)
{
return hci_read_remote_name_with_clock_offset(dd, bdaddr, 0x02, 0x0000, len, name, to);
}
Código [Seleccionar]
strncpy(name, (char *) rn.name, len);
Ahi esta donde se copia el name y justo antes.
Código [Seleccionar]
rn.name[247] = '\0';
Parece bien o no ?
A veces estara bien pero dudo que los que usan bluz como lib se den cuenta de esto, len tendrian que mandarlo con 1 menosm, sino permite sobreescribir el NULL.
Pues si se puede hacer algo, aunque no estoy 100 % seguro de que se pueda correr codigo aun, lo que si se es que 100% DoS seguro, si es que corre como root.
ahora para explotarlo, asi por ser un sitio publico solo digo, hay que tener un name de justo 247 chars, el ultimo char es muy importante dado que se copiara envez del \0 y strncpy no terminara el string en \0......bueno ya dije demasiado.......afecta a cualquier programa de bluz.