записывает вызовы с помощью команды, созданной из ненадежных данных - PullRequest
0 голосов
/ 05 декабря 2018

код:

outputStream.write(buffer, 0, length);
outputStream.flush();

Сообщение об ошибке Fortify: средний уровень

Метод run () в SomeFile.java вызывает write () с командой, созданной из ненадежных данных.Этот вызов может заставить программу выполнять вредоносные команды от имени злоумышленника.

Как это исправить?

Версия Java: 1.8

Код похож на это

1 Ответ

0 голосов
/ 24 января 2019

Fortify SCA перечисляет функцию outputStream.write (), которая имеет API-интерфейс приемника.Это означает, что было бы опасно, если бы недоверенные и непроверенные данные достигли входных параметров этой функции.Я не уверен, где вы получаете исходный буфер, но здесь Fortify считает, что буферная переменная (или переменная длины) может быть испорчена непроверенными данными.Существует два способа устранения проблемы:

  1. Вы можете пометить его как ложноположительный в своем файле FPR и объединить его со всеми новыми проверками, чтобы ваш аудит сохранялся при последующих проверках.
  2. Вы можете написать правила очистки, в которых вы учите Fortify распознавать ваш API очистки.Например, у вас может быть код:

    buffer = getUntrustedDataFromWeb(Request);

Validator.validate(buffer); //white list the accepted characters (e.g. A-Z,a-z,0-9)

length = buffer.size();

outputStream.write(buffer, 0, length);

outputStream.flush();

A Очистить пользовательские правила будут выглядеть следующим образом:

    <DataflowCleanseRule formatVersion="3.2" language="java">
    <MetaInfo>
        <Group name="package">Java Core Web</Group>
    </MetaInfo>
    <RuleID>702AB36D-4473-4CD5-B656-5D1040B59F07</RuleID>
    <Notes><![CDATA[
Validate the data]]></Notes>
    <FunctionIdentifier>
        <NamespaceName>
            <Value>com.web.util</Value>
        </NamespaceName>
        <ClassName>
            <Value>Validator</Value>
        </ClassName>
        <FunctionName>
            <Value>validate</Value>
        </FunctionName>
        <Parameters/>
        <ApplyTo implements="true" overrides="true" extends="true"/>
    </FunctionIdentifier>
    <OutArguments>this</OutArguments>
</DataflowCleanseRule>

Вам потребуется добавить указанное выше пользовательское правило при следующем запуске Fortify (см. Sourceanalyzer-h для синтаксиса).

...