¿Cómo resolver el error de manipulación de ruta dado por fortificar?

3

Necesito leer el archivo de propiedades guardado en la carpeta de inicio del usuario.

PropertyFile=System.getProperty("user.home")+System.getProperty("file.separator")+"sample.properties";

Fortify está dando error de manipulación de ruta en esta línea. ¿Cómo resolver este problema?

    
pregunta Nagendra 28.10.2015 - 05:50
fuente

2 respuestas

1

Fortify está generando un problema , no un error porque recibe información del entorno del proceso y luego abre un camino sin hacer ningún filtrado de entrada. Incluso si tuviera que agregar filtrado de entrada, las probabilidades de que Fortify fuera reconocerlo y dejar de generar el problema son bajas. Por lo tanto, al final, es probable que establezca el análisis del problema en No es un problema y deje de preocuparse por él. Pero primero debe determinar si esto es un problema de seguridad real o un falso positivo.

Cuando se trata de estas propiedades específicas, estás seguro. La máquina virtual de Java los establece así, siempre que Java no esté dañado, estás a salvo. Así que márcalos como No es un problema y sigue adelante.

PS: Sí, Fortify debe saber que estas propiedades son seguras.

    
respondido por el Neil Smithline 28.10.2015 - 15:50
fuente
0

Tengo una solución a los problemas de manipulación de rutas de Fortify.

Lo que se queja es que si tomas datos de una fuente externa, entonces un atacante puede usar esa fuente para manipular tu ruta. Por lo tanto, al permitir que el atacante elimine archivos o ponga en peligro su sistema.

El remedio sugerido para este problema es usar una lista blanca de directorios confiables como entradas válidas; y, rechazar todo lo demás.

Esta solución no siempre es viable en un entorno de producción. Por lo tanto, sugiero una solución alternativa. Analizar la entrada para una lista blanca de caracteres aceptables. Rechazar desde la entrada, cualquier carácter que no quieras en la ruta. Podría ser eliminado o reemplazado.

A continuación hay un ejemplo. Esto pasa la revisión de Fortify. Es importante recordar aquí para devolver el literal y no el carácter que se comprueba. Fortify realiza un seguimiento de las partes que provienen de la entrada original. Si usa alguna de las entradas originales, aún puede obtener el error.

clase pública CleanPath {

public static String cleanString(String aString) {
    if (aString == null) return null;
    String cleanString = "";
    for (int i = 0; i < aString.length(); ++i) {
        cleanString += cleanChar(aString.charAt(i));
    }
    return cleanString;
}

private static char cleanChar(char aChar) {

    // 0 - 9
    for (int i = 48; i < 58; ++i) {
        if (aChar == i) return (char) i;
    }

    // 'A' - 'Z'
    for (int i = 65; i < 91; ++i) {
        if (aChar == i) return (char) i;
    }

    // 'a' - 'z'
    for (int i = 97; i < 123; ++i) {
        if (aChar == i) return (char) i;
    }

    // other valid characters
    switch (aChar) {
        case '/':
            return '/';
        case '.':
            return '.';
        case '-':
            return '-';
        case '_':
            return '_';
        case ' ':
            return ' ';
    }
    return '%';
}

}

    
respondido por el Trant Batey 19.06.2017 - 18:12
fuente

Lea otras preguntas en las etiquetas