https://blog.gdssecurity.com/labs/2017/3/27/an-analysis-of-cve-2017-5638.html
TL;DR
Тип уязвимости — server side template injection, точка входа — обработчик загрузки файлов в Apache Struts. При некорректном заголовке Content-Type вызывается исключение, при его обработке логируется среди прочего и содержимое заголовка как отдельное сообщение. На этапе локализации сообщения никакого шаблона для этого случая не предусмотрено, поэтому в самом-самом default методе текст сообщения (то есть содержимое заголовка, сформированное атакующим) используется как шаблон. Вызывается метод подстановки переменных, где и выполняется код.
Дело усугубляется тем, что при локализации сообщений используется тот же язык шаблонов, что и везде в Struts, а он весьма богатый. Там предусмотрены ограничения на доступ к классам в виде черного списка. Но атакующий красиво их обходит, добираясь до этого списка и очищая его. Ну а дальше уже добирается до шелла.