Code Injection
Injection de code
Description
L'injection de code fait référence à une catégorie de méthodes d'attaque impliquant l'insertion de code que l'application évalue par la suite. Cette forme d'attaque tire parti d'une mauvaise gestion des données non fiables. De telles vulnérabilités proviennent souvent d'une validation insuffisante des données d'entrée/sortie fournies par l'utilisateur.
L'injection de code se distingue de l'injection de commandes par le fait que les capacités d'un attaquant sont limitées uniquement par les fonctionnalités inhérentes au langage de programmation cible. Par exemple, si un attaquant réussit à injecter du code PHP dans une application et à l'exécuter, ses actions sont limitées par les capacités de PHP. D'autre part, l'injection de commandes implique l'exploitation de code préexistant pour exécuter des commandes système.
print "Enter math equation: "
user_input = gets.chomp
begin
result = eval(user_input)
puts "Result: #{result}"
rescue StandardError => e
puts "Error: #{e.message}"
end
<?php
$userInput = $_POST['expression'];
$result = null;
try {
eval("\$result = $userInput;");
} catch (ParseError $e) {
echo "Error: Invalid Expression";
}
echo "Result: " . $result;
?>
try:
user_input = input("Enter a math expression: ")
result = eval(user_input)
print("Result:", result)
except Exception as e:
print("Error:", e)
Recommandation
Pour atténuer les vulnérabilités d'injection de code, voici quelques mesures d'atténuation possibles :
-
Éviter d'évaluer les entrées de l'utilisateur : La meilleure façon de se protéger contre l'injection de code est de ne pas évaluer du tout les entrées de l'utilisateur.
-
Validation et assainissement des entrées : Si l'évaluation des entrées de l'utilisateur est nécessaire, elles doivent d'abord être assainies pour supprimer les caractères spéciaux pouvant permettre l'exécution de code, comme les parenthèses par exemple.
-
Utilisation d'un environnement sandbox : Une façon d'atténuer le risque d'injection de code consiste à évaluer les entrées de l'utilisateur dans un environnement sandbox isolé et restreint.
-
Principe du moindre privilège : Bien qu'il ne soit pas spécifiquement lié à l'injection de code, le principe du moindre privilège peut aider à réduire l'impact des vulnérabilités en réduisant les privilèges qu'un attaquant pourrait obtenir s'il parvient à compromettre le système avec succès.
print "Enter math equation: "
user_input = gets.chomp
# Nettoyer les entrées utilisateur
sanitized_input = user_input.gsub(/[^0-9+\-\/\*]/, '')
begin
result = eval(sanitized_input)
puts "Result: #{result}"
rescue StandardError => e
puts "Error: #{e.message}"
end
<?php
$userInput = $_POST['expression'];
// Sanitize user input
$sanitizedInput = preg_replace("/[^0-9+\-\/\*]/", "", $userInput);
$result = null;
try {
$result = eval("return $sanitizedInput;");
} catch (ParseError $e) {
echo "Error: Invalid Expression";
}
echo "Result: " . $result;
?>
import re
try:
user_input = input("Enter a Python expression: ")
# Nettoyer les entrées utilisateur
sanitized_input = re.sub(r'[^0-9+\-*/]', '', user_input)
result = eval(sanitized_input)
print("Result:", result)
except Exception as e:
print("Error:", e)
Liens
Normes
- CWE_TOP_25:
- CWE_20
- CWE_94
- GDPR:
- ART_5
- ART_32
- PCI_STANDARDS:
- REQ_6_2
- REQ_6_3
- REQ_11_3
- SOC2_CONTROLS:
- CC_2_1
- CC_3_4
- CC_4_1
- CC_7_1
- CC_7_2
- CC_7_4
- CC_7_5
- HIPAA_CONTROLS:
- SECURITY212
- SECURITY213
- SECURITY255