Slide 13
Slide 13 text
Software Security
• Development environments don’t
necessarily make security
controls/options “clear”
• Selected platform may drive/
restrict language choices
% grep -Er "\s(mem|str)cpy\(" .
…
./apps/http-post-auth/http-post-auth.c: strcpy(s->message, "status=");
./apps/http-post-auth/http-post-auth.c: strcpy(&s->message[7], msg);
./apps/irc/irc.c: memcpy(log, &log[LOG_WIDTH], LOG_WIDTH * (LOG_HEIGHT - 1));
./apps/irc/irc.c: memcpy(log, &log[LOG_WIDTH], LOG_WIDTH * (LOG_HEIGHT - 1));
./apps/ping6/ping6.c: memcpy(command, (void *)"ping6", 5);
./apps/rest-coap/coap-common.c: memcpy(
./apps/rest-coap/coap-common.c: memcpy((char*)&buffer[index], option->value, option->len);
./apps/rest-coap/coap-common.c: memcpy(&buffer[index], packet->payload, packet->payload_len);
./apps/rest-coap/coap-server.c: memcpy(option->value, value, len);
./apps/rest-common/buffer.c: memcpy(buffer, data, len);
./apps/rest-common/buffer.c: strcpy(buffer, text);
./apps/rest-common/rest-util.c: memcpy(p + 4 - size, buf, size);
./apps/rest-common/rest-util.c: memcpy(buf, ((char*)(&data)) + 4 - size, size);
./apps/rest-common/rest.c: memcpy(temp_etag, etag, size);
./apps/rest-http/http-server.c: strcpy(current_header->value, value);
./apps/rest-http/http-server.c: strcpy(current_header->value, buffer);
./apps/rest-http/http-server.c: memcpy(buffer + index, response->payload, response->payload_len);
• “Me write Python/Ruby/
Node/… pretty one day” (or
worse, C)
• History repeating…?
Quick grep for potentially dangerous behavior in someone’s Contiki project