Как исправить Middle Man Injection при открытии файла с относительного пути? - PullRequest
0 голосов
/ 21 июня 2019

Злоумышленники могут управлять аргументом пути файловой системы к File (), который позволяет им получать доступ или изменять файлы, защищенные иным способом.

String strTempDwnldLoc = dms.DMSStartup.getProperty("WebTempDownloadDir") + "/";
File file2 = null;

    .....

try {
    file2 = new File(strTempDwnldLoc+dtoList.get(i)
                     .getDoc_relative_path().split("/")[1]);    
    if (file2.exists()){
      file2.delete();
    }
} catch(Exception e){    
    .....
} 

Я использую Java 6, поэтому не могу использовать java.nio пакет.В противном случае я бы попытался проверить путь к файлу, используя file.getCanonicalPath(), но не смог бы найти достойного решения.

1 Ответ

0 голосов
/ 25 июня 2019

Проблема, которую мы пытаемся решить, заключается в том, что злоумышленник отправляет путь вроде ../../../../../../../etc/passwd.Веб-приложение на Java может с радостью предоставить злоумышленнику файл passwd.Поэтому мы форсируем использование канонических путей.Это может быть не удобно во многих приложениях, но это очень важно.В этом случае «../conf/» будет только одним физическим местом в файловой системе, так как значение привязано к пути к базовому каталогу проекта (который я определил как «родительский» аргумент), поэтому этоизвестен.

недавнее добавление аргумента "parent" предполагает, что входной путь не должен быть каноническим.здесь вызов метода: getValidDirectoryPath ("Context", "../conf/", ".", false);

  public void testGetValidDirectoryPath() throws Exception {
    System.out.println("getValidDirectoryPath");
    Validator instance = ESAPI.validator();
    ValidationErrorList errors = new ValidationErrorList();
    // find a directory that exists
    File parent = new File("/");
    String path = ESAPI.securityConfiguration().getResourceFile("ESAPI.properties").getParentFile().getCanonicalPath();
    instance.getValidDirectoryPath("dirtest1", path, parent, true, errors);
    assertEquals(0, errors.size());
    instance.getValidDirectoryPath("dirtest2", null, parent, false, errors);
    assertEquals(1, errors.size());
    instance.getValidDirectoryPath("dirtest3", "ridicul%00ous", parent, false, errors);
    assertEquals(2, errors.size());
}

Посетите следующий веб-сайт для получения дополнительной информации: https://www.jtmelton.com/2010/05/02/the-owasp-top-ten-and-esapi-part-4-malicious-file-execution/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...