Укрепление отчетов о проверке SCA Проблема с журналированием при чтении переменных среды
Я использовал System.getenv("envVariableName")
и это бросило мне проблему подделки журналов. Я даже попытался закодировать возвращенную строку, используя ESAPI-кодировщик, но это не помогло.
Мой фрагмент кода:
String envValue = encode(System.getenv("envVariableName"));
String encode(String message) {
if (message != null) {
String clean = message.replace('\n', '_').replace('\r', '_');
if (ESAPI.securityConfiguration().getLogEncodingRequired()) {
clean = ESAPI.encoder().encodeForHTML(message);
if (!message.equals(clean)) {
clean += " (Encoded)";
}
}
return clean;
}
return message;
}
Любое предложение относительно того, что я пропускаю, будет оценено.
3 ответа
Fortify (используемый по меньшей мере) распознал кодировщики ESAPI как удаляющие "паразитные" веб-флаги, но я думаю, что это было только в контексте правил XSS Fortify. Я не думаю, что они сделали это в контексте Log Forging, хотя я вполне уверен, что они признают, что регистрация ESAPI обеспечивает "безопасную регистрацию".
Если я понимаю ваше желание здесь, вы не просто хотите пометить этот конкретный экземпляр как "Не проблема" и подавить его, но вместо этого вы хотите, чтобы он не распознал этот шаблон как экземпляры Log Forging. К сожалению, вы не можете изменить правила HP (теперь Microfocus) Fortify. (Их пакеты правил даже зашифрованы, поэтому, за исключением запуска AWB под отладчиком, вы даже не можете просматривать их правила.) Если вы решите, что "переменные среды" являются "доверенными", я полагаю, вы могли бы установить и применить AWB набор фильтров, который будет игнорировать случаи, когда единственным признаком заражения на приемнике является "переменная окружения". (Или примените это только к этой категории журналов).
Но в целом вам придется либо жить с шумом (Fortify генерирует много ложных срабатываний), либо вам придется вручную проверять каждый из случаев и подавлять ложные срабатывания как "не проблема". Это обычный способ работы, хотя иногда эта функция ограничена специалистами AppSec.
Надеюсь, это поможет.
Вопрос: Если вы уже используете ESAPI, то почему бы просто не использовать ведение журнала ESAPI, поскольку оно обеспечивает "безопасное ведение журнала", как при защите от атак на подделку журналов?
Строка, назначенная Fortify, действительно находится на String envValue = encode(System.getenv("envVariableName"));?
Проблемы с подделкой журналов обычно возникают, когда вы записываете некоторую информацию в журнал из ненадежного источника: https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.log_forging