Рубрики
Без рубрики

Как предотвратить потенциальное удаленное выполнение кода с помощью десериализации SnakeYaml

Популярная java-библиотека для синтаксического анализа YAML, SnakeYaml, имеет хорошо известную уязвимость при неправильном использовании… С тегами yaml, безопасность, rce, java.

Популярная java-библиотека для синтаксического анализа YAML, SnakeYaml, имеет хорошо известную уязвимость при неправильном использовании для анализа сгенерированных пользователем YAML.

Вы можете прочитать о самой уязвимости здесь:

Эксплуатируемая десериализация SnakeYaml | Свапнил Кумар Дэш | Средний

Свапнил Кумар Дэш ・ 9 сентября 2019 года ・ свапнил дэш. Средний

Решения этой проблемы, которые я нашел в сети, либо неверны, либо непригодны для использования в реальной жизни. Поэтому я хочу поделиться здесь решением, которое я придумал.

Это довольно просто:

  public static  T parseYamlSafe(String yaml, Constructor constructor) {
    Yaml yamlParser = new Yaml(new SafeConstructor());
    // the following line throws an exception
    // if constructors for non standard java types exist in yaml
    yamlParser.load(yaml);

    //if we got here, the YAML is safe to parse.
    yamlParser = new Yaml(constructor); 
    return yamlParser.load(yaml);
  }

Оригинал: “https://dev.to/trexinc/how-to-prevent-a-potential-remote-code-execution-via-snakeyaml-deserialization-b60”