Популярная java-библиотека для синтаксического анализа YAML, SnakeYaml, имеет хорошо известную уязвимость при неправильном использовании для анализа сгенерированных пользователем YAML.
Вы можете прочитать о самой уязвимости здесь:
Эксплуатируемая десериализация SnakeYaml | Свапнил Кумар Дэш | Средний
Свапнил Кумар Дэш ・ 9 сентября 2019 года ・ свапнил дэш. Средний
Решения этой проблемы, которые я нашел в сети, либо неверны, либо непригодны для использования в реальной жизни. Поэтому я хочу поделиться здесь решением, которое я придумал.
Это довольно просто:
public staticT 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”