Re: BoF en inet_network(), afecta a Servidor DNS: BIND
En la pagina de BIND: BIND Vulnerabilities
Veamos La pagina nos dice nuevamente lo mismo Podemos hacer un DoS al servidor BIND, o podemos ejecutar codigo arbitrareo en el equipo que aloja el servidor.
Ahora
Viendo las diferencias vemos que la version, 1.5 del archivo vulnerable es casi exactamente lo mismo solo movieron de lugar la siguiente Intruccion:
En la version Vulnerable esta dentro del if (*cp == '.') y la version NO vulnerable esta afuera antes de if (*cp == '.'), lo cual me indica que la clave de esto debe estar en saber manejar el formato de entrada con los Puntos '.'. Ya me he impreso el codigo fuente vulnerable y lo estoy analizando paso por paso, ya que no he podido encontrar un input que vulnere el codigo.
Impact:
Applications linked against libbind which call inet_network() with untrusted inputs could lead to a denial-of-service or potentially code execution.
Note that none of the applications shipped with BIND 8 or BIND 9 call inet_network().
Applications linked against libbind which call inet_network() with untrusted inputs could lead to a denial-of-service or potentially code execution.
Note that none of the applications shipped with BIND 8 or BIND 9 call inet_network().
Veamos La pagina nos dice nuevamente lo mismo Podemos hacer un DoS al servidor BIND, o podemos ejecutar codigo arbitrareo en el equipo que aloja el servidor.
Ahora
Código:
Index: inet_network.c
diff -u inet_network.c:1.5 inet_network.c:1.6
--- inet_network.c:1.5 Wed Apr 27 04:56:21 2005
+++ inet_network.c Tue Jan 15 04:02:01 2008
@@ -84,9 +84,9 @@
}
if (!digit)
return (INADDR_NONE);
+ if (pp >= parts + 4 || val > 0xffU)
+ return (INADDR_NONE);
if (*cp == '.') {
- if (pp >= parts + 4 || val > 0xffU)
- return (INADDR_NONE);
*pp++ = val, cp++;
goto again;
}
diff -u inet_network.c:1.5 inet_network.c:1.6
--- inet_network.c:1.5 Wed Apr 27 04:56:21 2005
+++ inet_network.c Tue Jan 15 04:02:01 2008
@@ -84,9 +84,9 @@
}
if (!digit)
return (INADDR_NONE);
+ if (pp >= parts + 4 || val > 0xffU)
+ return (INADDR_NONE);
if (*cp == '.') {
- if (pp >= parts + 4 || val > 0xffU)
- return (INADDR_NONE);
*pp++ = val, cp++;
goto again;
}
Viendo las diferencias vemos que la version, 1.5 del archivo vulnerable es casi exactamente lo mismo solo movieron de lugar la siguiente Intruccion:
Código
if (pp >= parts + 4 || val > 0xffU)
return (INADDR_NONE);
En la version Vulnerable esta dentro del if (*cp == '.') y la version NO vulnerable esta afuera antes de if (*cp == '.'), lo cual me indica que la clave de esto debe estar en saber manejar el formato de entrada con los Puntos '.'. Ya me he impreso el codigo fuente vulnerable y lo estoy analizando paso por paso, ya que no he podido encontrar un input que vulnere el codigo.
Comentarios