Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
>
V5339. OWASP. Potential RCE...
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V5339. OWASP. Potential RCE vulnerability. Insecure GraalVM context is used to process potentially tainted data.

19 Янв 2026

Анализатор обнаружил использование небезопасно сконфигурированного Polyglot Context (GraalVM), который может исполнить скрипт с вредоносным кодом. Такая конфигурация может сделать приложение уязвимым к Remote Code Execution (RCE). Подробнее суть данной уязвимости описана здесь.

Потенциальная эксплуатация небезопасной конфигурации Polyglot Context относится к категориям рисков OWASP Top 10 Application Security Risks:

Рассмотрим пример c небезопасной настройкой в Context.Builder:

public void evalScript(String script) {
    try (Context c = Context.newBuilder()
                            .allowAllAccess(true)
                            .build()
    ) {
        c.eval("js", script);
    }
}

В метод Context.eval передаётся непроверенный JavaScript код, полученный из параметра публичного метода. Поскольку метод является публичным, в него могут поступать данные из внешних источников: контроллеров, форм, пользовательского ввода и т.п.

Использование небезопасной настройки .allowAllAccess(true) приводит к тому, что создаваемый Context получает права на вызов всех публичных конструкторов/методов хостового языка.

Непроверенный скрипт в сочетании с опасными настройками создаёт риск удалённого выполнения произвольного кода. Например, злоумышленник сможет выполнить команду rm -rf /, используя такой скрипт:

runtime = Java.type('java.lang.Runtime');
runtime.getRuntime().exec("rm -rf /");

Для повышения уровня безопасности и предотвращения выполнения произвольного кода рекомендуется ограничить доступ к хостовому языку.

Если выполнение скрипта не подразумевает выполнение методов хостового языка, рекомендуется запретить доступ полностью с помощью .allowAllAccess(false):

public void evalScript(String script) {
    try (Context c = Context.newBuilder()
                            .allowAllAccess(false)
                            .build()
    ) {
        c.eval("js", script);
    }
}

Если требуется доступ к API хостового языка, то можно использовать настройку HostAccess.EXPLICIT, которая разрешает обращение только к тем членам класса, которые помечены аннотацией @Export. Чтобы задать список классов, доступных для прямого получения, можно использовать Builder.allowClassLookup.

Пример сконфигурированного таким образом контекста:

public void evalScript(String script) {
    try (Context c = Context.newBuilder()
                            .allowHostClassLookup(clazz ->
                                clazz.startsWith("com.example.api")
                            )
                            .allowAllAccess(false)
                            .allowHostAccess(HostAccess.EXPLICIT)
                            .build()
    ) {
        c.eval("js", script);
    }
}

В этом примере можно будет использовать только те классы, которые помечены аннотацией @Export, а через Java.type(....) можно будет получить только классы из пакета com.example.api.

Данная диагностика классифицируется как: