Закрепление

Я использую Fortify SCA для поиска проблем безопасности в своем приложении (в качестве домашней работы в университете). Я столкнулся с некоторыми проблемами журнала, которые я не могу избавиться.

В принципе, я регистрирую некоторые значения, которые поступают как пользовательский ввод из веб-интерфейса:

logger.warn("current id not valid - " + bean.getRecordId()));

и Fortify сообщает об этом в качестве проблемы с подделкой журнала, поскольку getRecordId() возвращает пользовательский ввод.

Я следил за этой статьей, и я заменяю "новую строку" пробелом, но проблема все еще сообщается

logger.warn("current id not valid - " + Util.replaceNewLine(bean.getRecordId()));

Может кто-нибудь предложить способ исправить эту проблему?

Ответ 1

Алина, я на самом деле автор статьи, которую вы использовали для решения проблемы с инъекцией журнала. Надеюсь, это было полезно.

Виталий прав в отношении фортификации. Вам нужно будет создать то, что Fortify называет "пользовательским правилом".

Скорее всего, это будет правило очистки потока данных. Базовый пример можно найти здесь: http://www.cigital.com/newsletter/2009-11-tips.php. Если вы владеете Fortify, в документации вашего продукта должно быть руководство по написанию пользовательских правил.

Я не знаю, какой флаг помутнения вы будете использовать, но он будет выглядеть примерно так: "-LOG_FORGING". По сути, вы должны написать правило для удаления журнала, порождающего "порчу" всякий раз, когда данные передаются через ваш служебный метод. Fortify будет предполагать, что любые пропущенные данные теперь могут быть безопасно записаны в журнал и не будут вызывать подделку журнала.

Ответ 2

Я знаю, что это уже ответили, но я подумал, что пример будет приятным:)

<?xml version="1.0" encoding="UTF-8"?>
<RulePack xmlns="xmlns://www.fortifysoftware.com/schema/rules">
  <RulePackID>D82118B1-BBAE-4047-9066-5FC821E16456</RulePackID>
  <SKU>SKU-Validated-Log-Forging</SKU>
  <Name><![CDATA[Validated-Log-Forging]]></Name>
  <Version>1.0</Version>
  <Description><![CDATA[Validated-Log-Forging]]></Description>
  <Rules version="3.14">
    <RuleDefinitions>
      <DataflowCleanseRule formatVersion="3.14" language="java">
        <RuleID>DDAB5D73-8CF6-45E0-888C-EEEFBEFF2CD5</RuleID>
        <TaintFlags>+VALIDATED_LOG_FORGING</TaintFlags>
        <FunctionIdentifier>
          <NamespaceName>
            <Pattern/>
          </NamespaceName>
          <ClassName>
            <Pattern>Util</Pattern>
          </ClassName>
          <FunctionName>
            <Pattern>replaceNewLine</Pattern>
          </FunctionName>
          <ApplyTo implements="true" overrides="true" extends="true"/>
        </FunctionIdentifier>
        <OutArguments>return</OutArguments>
      </DataflowCleanseRule>
    </RuleDefinitions>
  </Rules>
</RulePack>

Ответ 3

Вам нужно отметить вашу заменуNewLine как sanitiser в Fortify (если я правильно помню), и она перестанет сообщать о проблеме.