El siguiente código es parte de un programa que se genera en cada solicitud del script ruby on rails de nginx:
static void time_t_to_dos_time(time_t user_supplied_time_t, int *dos_date, int *dos_time)
{
struct tm *t = localtime(&user_supplied_time_t);
*dos_time = t->tm_sec / 2 + t->tm_min * 32 + t->tm_hour * 2048;
*dos_date = t->tm_mday + (t->tm_mon + 1) * 32 +
(t->tm_year + 1900 - 1980) * 512;
}
localtime
devuelve 0 si el valor es demasiado grande para caber en un struct tm
. Entonces, cuando el programa intenta leer t->tm_sec
, intentará leer la dirección de memoria 0.
En ese caso, el programa genera inmediatamente SIGSEGV
y el servidor devuelve:
HTTP/1.1 502 Bad Gateway
Content-Length: 13
Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'
Strict-Transport-Security: max-age=31536000
Vary: Authorization,Accept-Encoding
X-Content-Type-Options: nosniff
X-Frame-Options: deny
X-XSS-Protection: 1; mode=block
Date: Tue, 28 Jun 2016 12:59:10 GMT
502: Failure
Me parece que es un error simple sin ningún problema de seguridad, ya que el programa está diseñado para ejecutarse solo en ese sitio web.
¿Sería esto correcto?