Estoy evaluando la seguridad de un portal web para un cliente y encontré una vulnerabilidad.
Encontré una función donde se encarga de subir archivos. Se supone que solo lo deben usar los administradores, pero la función real se puede llamar directamente y no verifica la autenticación. De todos modos, aquí están las condiciones:
La carga toma 2 argumentos (digamos), ID (debe ser int, si no es int, rompe el código y no carga), objeto de archivo.
Cuando se carga el archivo, comprueba la extensión del archivo usando:
%código%. Si la extensión es uno de los siguientes:
pathinfo['extension']
rompe la carga.
De lo contrario, significa que todas las comprobaciones se pasan y coloca el archivo en:
"php, php3, php4, phps, php5, php6, phtml, html, htm, py, pl, sh"
P.S. Lee datos POST / GET completos (usando php: // input) si encuentra "% 00" (usa expresiones regulares) en POST / GET / COOKIE / ... cualquier cosa, rompe toda la conexión.
Entonces, para resumir, hace 3 controles:
- % 00 en POST / GET leyendo php: // input y buscando% 00
- $ ID para ser int
- La extensión del archivo, no debería ser igual a
/uploads/$ID.$EXT
¿Es una vulnerabilidad? ¿Podemos pasar por alto las pruebas y causar daño? RCE?
P.S. Es un servidor Linux.