Vulnerable-Web-Application CVE semgrep_id:PHPCS_SecurityAudit.BadFunctions.SystemExecFunctions.WarnSystemExec:44:44
Improper control of generation of code ('Code Injection')
Ссылка на строку:
Описание уязвимости
Название: Improper control of generation of code ('Code Injection')
Категория: SAST (Static Application Security Testing)
Описание: Выполнение неконстантных команд может привести к внедрению команд (Command Injection).
Уровень серьёзности: Критический
Сканер: Semgrep
Местоположение: repo/CommandExecution/CommandExec-4.php, строка 44
Уязвимость
Уязвимость связана с использованием функции shell_exec()
для выполнения команд, полученных из ненадёжного источника. В данном случае переменная $target
может быть подвержена манипуляциям, что позволяет атакующему внедрить произвольные команды.
Пример уязвимого кода
$target = str_replace(array_keys($substitutions), $substitutions, $target);
echo shell_exec($target);
if ($_GET["typeBox"] == "secret")
Варианты исправления
-
Использование безопасных альтернатив:
- Вместо
shell_exec()
, рассмотрите возможность использования более безопасных функций, таких какproc_open()
, которые позволяют более строго контролировать входные данные.
$descriptorspec = [ 0 => ['pipe', 'r'], // stdin is a pipe that the child will read from 1 => ['pipe', 'w'], // stdout is a pipe that the child will write to 2 => ['file', 'error-output.txt', 'a'] // stderr is a file to write to ]; $process = proc_open('your_command', $descriptorspec, $pipes); if (is_resource($process)) { // ... proc_close($process); }
- Вместо
-
Валидация и очистка входных данных:
- Перед использованием данных в командах оболочки, убедитесь, что они прошли валидацию и очистку. Используйте регулярные выражения или другие методы для проверки и очистки данных.
$target = preg_replace('/[^a-zA-Z0-9\s]/', '', $target); // Пример простой очистки echo shell_exec($target);
-
Использование параметризованных команд:
- Если возможно, используйте параметризованные команды, чтобы избежать прямого встраивания пользовательских данных в команды.
exec('your_command ' . escapeshellarg($user_input));
Ссылки на статьи
Описание:
Executing non-constant commands. This can lead to command injection.Исходный JSON:
{
"id": "5c64d8742cc1fbe6cbedad46f5ef2b04a8c0d747f81c4e947e55b0fb0f3d3d17",
"category": "sast",
"name": "Improper control of generation of code ('Code Injection')",
"description": "Executing non-constant commands. This can lead to command injection.",
"cve": "semgrep_id:PHPCS_SecurityAudit.BadFunctions.SystemExecFunctions.WarnSystemExec:44:44",
"severity": "Critical",
"scanner": {
"id": "semgrep",
"name": "Semgrep"
},
"location": {
"file": "repo/CommandExecution/CommandExec-4.php",
"start_line": 44
},
"identifiers": [
{
"type": "semgrep_id",
"name": "PHPCS_SecurityAudit.BadFunctions.SystemExecFunctions.WarnSystemExec",
"value": "PHPCS_SecurityAudit.BadFunctions.SystemExecFunctions.WarnSystemExec"
},
{
"type": "cwe",
"name": "CWE-94",
"value": "94",
"url": "https://cwe.mitre.org/data/definitions/94.html"
},
{
"type": "owasp",
"name": "A03:2021 - Injection",
"value": "A03:2021"
},
{
"type": "owasp",
"name": "A1:2017 - Injection",
"value": "A1:2017"
},
{
"type": "phpcs_security_audit_source",
"name": "PHPCS Security Audit Test ID PHPCS_SecurityAudit.BadFunctions.SystemExecFunctions.WarnSystemExec",
"value": "PHPCS_SecurityAudit.BadFunctions.SystemExecFunctions.WarnSystemExec"
}
]
}
```