it-swarm-es.com

¿Es un accidente siempre explotable para RCE?

Al leer documentos escritos por equipos que buscan vulnerabilidades mediante fuzzing, noto que muchas personas etiquetan un bloqueo como una vulnerabilidad DoS. Mientras que en otros documentos e investigaciones, profundizan después del accidente e intentan explotarlo para obtener RCE.

Mi pregunta es si todos los bloqueos relacionados con la memoria pueden conducir a RCE o hay algunas prerrogativas, y ni siquiera lo intentan.

14
J. Doe

Muchos bloqueos no son explotables para nada, excepto la denegación de servicio (DoS). El ejemplo más común sería una lectura de puntero NULL; intentar desreferenciar un puntero a (o en cualquier lugar cercano) 0 fallará, y a menos que se capture la excepción/señal, el programa se bloqueará. Sin embargo, el hecho de que el programa intente leer desde cero cuando recibe una entrada no válida no significa que hará algo más emocionante si recibe una entrada no válida diferente.

Determinar la explotabilidad de un choque es complicado. Hay algunas heurísticas que puede usar (las escrituras suelen ser peores que las lecturas, si el puntero de instrucción apunta a un código no ejecutable, una violación de NX/DEP, es casi seguro que sea explotable, si es una lectura de puntero nulo, es muy poco probable que sea explotables) pero no son perfectamente precisos. Hay herramientas que analizarán un volcado por caída e intentarán adivinarlo (por ejemplo, Microsoft publicó un comando "! Exploitable" para el depurador de Windows windbg que realizará este análisis; existen herramientas similares para los depuradores de Linux ) Para estar seguro, debe analizar el flujo del programa que causó la corrupción de la memoria y ver cuánta influencia tiene sobre él, y si puede hacer que haga algo realmente peligroso.

20
CBHacking

Considere un defecto predeterminado causado por intentar acceder a la ubicación de memoria 0x0 (es decir, una desreferencia de puntero nulo).

Tal vez una parte del código pensó que se hizo con una variable y estableció el puntero en nulo, y tal vez en operaciones normales realmente se hizo con él, pero las pruebas de fuzz encontraron algún caso de Edge donde algo intenta leer esa variable nuevamente después de él. se estableció en nulo.

Eso ciertamente causará un bloqueo, porque su aplicación está tratando de leer la memoria del núcleo, y el núcleo se enoja por eso, pero no le permitirá hacer nada parecido a RCE.

6
Mike Ounsworth