Soy nuevo en la revisión de código seguro. Sé que strlen calculará la longitud hasta que encuentre un carácter nulo. Esto es parte de un código más grande.
char* executeMount(char* password, char* path, int unmountOrMount)
{
char* catString = new char[(strlen("echo|set /p password=") + strlen(password) + strlen(" | runas /user:administrator \"mountvol ") + strlen(path) + 1)];
strcpy(catString, "echo|set /p password=");
strcat(catString, password);
strcat(catString, " | runas /user:administrator \"mountvol ");
strcat(catString, path);
//Equivalent command: system("echo|set /p password=" + adminPassword + " | runas /user:administrator mountvol" + path);
return catString;
}
¿Devolverá catString a un desbordamiento de búfer?
Strlen calculará todas las cadenas hasta que alcance un terminador nulo. Entonces catString es la longitud total de todas las cadenas + 1 (para el terminador nulo). strcpy copiará echo | set / p password="+ terminador nulo. El siguiente strcat eliminará el terminador nulo y concatenará la" contraseña "pero el strcat subsiguiente no eliminará el terminador nulo que conduce al desbordamiento del búfer. ¿Mi razonamiento es correcto? ¿Es este código? vulnerable a cualquier otra amenaza?