Variables externas en bloques doPrivileged

RECU-0602 (Recurso Ejemplo)

Descripción

Es importante no permitir las operaciones de las entradas externas en un bloque doPrivileged (). Esto se debe a que un atacante podría suministrar entradas maliciosas que pueden provocar ataques de escalada de privilegios y proporcionarle un control no deseado sobre la aplicación.

Ejemplos

Un código vulnerable sería el siguiente, que acepta un argumento de entrada:

private void privilegedMethod(final String filename) throws FileNotFoundException {
  try {
    FileInputStream fis = (FileInputStream) AccessController.doPrivileged(
      new PrivilegedExceptionAction() {
        public FileInputStream run() throws FileNotFoundException {
          return new FileInputStream(filename);           
        }
      }
    );
    // do something with the file and then close it
  } catch (PrivilegedActionException e) {
    // forward to handler and log
  }
}

Un atacante podría proporcionar el nombre de un archivo de contraseñas sensibles, con la ruta de acceso y, por tanto, forzar a realizar las operaciones en el archivo incorrecto.

Una manera de protegerse de ataques de este tipo sería de la siguiente manera:

Indicando explícitamente el nombre del archivo y limitando las variables utilizadas en el bloque privilegiado en el mismo método. Esto asegura que ningún archivo malicioso se puede cargar mediante la explotación de los privilegios del código correspondiente:

private void privilegedMethod() throws FileNotFoundException {
  try {
    FileInputStream fis = (FileInputStream) AccessController.doPrivileged(
      new PrivilegedExceptionAction() {
        public FileInputStream run() throws FileNotFoundException {
          return new FileInputStream("/usr/home/filename");           
        }
      }
    );
    // do something with the file and then close it
  } catch (PrivilegedActionException e) {
    // forward to handler and log
  }
}

Contenidos relacionados

Pautas
Área: Desarrollo » Seguridad » Control de Acceso y Autenticación
Código Título Tipo Carácter
LIBP-0254 Control de acceso Libro de pautas Directriz Obligatoria