Re: BoF en inet_network(), afecta a Servidor DNS: BIND
Bueno volviendo al tema del Estudio de un bug, y posteriormente el la Creacion de un exploit para el mismo. Lamento informarles que no he dado con nada en este bug pero bueno.
Si nos consentramos en lo que sabemos, lo unico que cambio en la version vulnerable del codigo es que el siguiente fracmento de Cofigo cambio de lugar:
De adentro del if, a afuera del mismo:
Version Vulnerable
Version NO Vulnerable
Ok, aqui lo importante es preguntarnos como cambia el funcionamiento del programa Antes y despues
.
Bien segun lo he analizado mientras voy en en el camion, mientras como, y hasta mientras sueño
el resultado operativo del codigo sigue siendo el mismo, si no es asi que alguien me lo haga saber y me diga lo ciego que estoy.
Lo unico que noto es que el Procesador se ahorra unas cuantas Instrucciones en caso de que la la Condicion del if sea verdadera, en caso contrareo Todo trabaja Igual.
o no 
Bueno hasta el momento hago un recuento de lo que he Conseguido hasta el momento.
Es posible Insertarle un valor Invalido para Obtener un Resultado Valido:
Lo cual puede representar un consumo de recursos en el servidor BIND, o el programa que use la funcion inet_network() vulnerale esto solo en caso de que se le envie constantememente cadenas Invalidas como las que mostre obviamente de mayor longitud ya que el Procesador tendria que estar dentro del mismo ciclo mientras le manden estas cadenas.
Un saludo!!
Si nos consentramos en lo que sabemos, lo unico que cambio en la version vulnerable del codigo es que el siguiente fracmento de Cofigo cambio de lugar:
Código
if (pp >= parts + 4 || val > 0xffU)
return (INADDR_NONE);
De adentro del if, a afuera del mismo:
Version Vulnerable
Código
if (!digit)
return (INADDR_NONE);
if (*cp == '.') {
if (pp >= parts + 4 || val > 0xffU)
return (INADDR_NONE);
*pp++ = val, cp++;
goto again;
Version NO Vulnerable
Código
if (!digit)
return (INADDR_NONE);
if (pp >= parts + 4 || val > 0xffU)
return (INADDR_NONE);
if (*cp == '.') {
*pp++ = val, cp++;
goto again;
Ok, aqui lo importante es preguntarnos como cambia el funcionamiento del programa Antes y despues
Bien segun lo he analizado mientras voy en en el camion, mientras como, y hasta mientras sueño
Lo unico que noto es que el Procesador se ahorra unas cuantas Instrucciones en caso de que la la Condicion del if sea verdadera, en caso contrareo Todo trabaja Igual.
Bueno hasta el momento hago un recuento de lo que he Conseguido hasta el momento.
Es posible Insertarle un valor Invalido para Obtener un Resultado Valido:
Bueno entre las pruebas que estuve haciendo he visto que la aplicacion que tengo de prueba puede recivir cadenas como las que siguen sin colgarse:
pero no nos ganamos nada ya que no ponemos nada en la memoria, las ffff se pierden en el corrimiento de bits hacia la izquierda dentro del microprocesador.
Código:
%./test_network 0xfffff00000011.0xfabcd000000003.0xa.0x90
0x11030a90
0x11030a90
pero no nos ganamos nada ya que no ponemos nada en la memoria, las ffff se pierden en el corrimiento de bits hacia la izquierda dentro del microprocesador.
Lo cual puede representar un consumo de recursos en el servidor BIND, o el programa que use la funcion inet_network() vulnerale esto solo en caso de que se le envie constantememente cadenas Invalidas como las que mostre obviamente de mayor longitud ya que el Procesador tendria que estar dentro del mismo ciclo mientras le manden estas cadenas.
Un saludo!!
Comentarios