コンテンツにスキップ

Code Injection

コードインジェクション

説明

コードインジェクションとは、アプリケーションがその後に評価するコードを挿入する攻撃手法のカテゴリを指します。この形式の攻撃は、信頼できないデータの不適切な取り扱いを利用します。このような脆弱性は、入力/出力のユーザー提供データの検証が不十分な場合によく発生します。

コードインジェクションは、攻撃者の機能がターゲットプログラミング言語に固有の機能によってのみ制限されるという事実によって、コマンドインジェクションと区別されます。たとえば、攻撃者が PHP コードをアプリケーションに正常に挿入して実行した場合、そのアクションは PHP の機能によって制限されます。一方、コマンドインジェクションは、既存のコードを悪用してシステムコマンドを実行することを伴います。

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)

推奨事項

コードインジェクションの脆弱性を軽減するための、いくつかの可能な軽減策を次に示します。

  • ユーザー入力の評価を避ける: コードインジェクションから保護する最善の方法は、ユーザー入力をまったく評価しないことです。

  • 入力の検証とサニタイズ: ユーザー入力の評価が必要な場合は、たとえば括弧など、コードの実行を許可する可能性のある特殊文字を削除するために、最初にサニタイズする必要があります。

  • サンドボックス環境の使用: コードインジェクションのリスクを軽減する 1 つの方法は、分離され制限されたサンドボックス環境でユーザー入力を評価することです。

  • 最小特権の原則: コードインジェクションに直接関連しているわけではありませんが、最小特権の原則は、攻撃者がシステムの侵害に成功した場合に取得できる特権を減らすことで、脆弱性の影響を軽減するのに役立ちます。

print "Enter math equation: "
user_input = gets.chomp

# ユーザー入力のサニタイズ
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: ")

    # ユーザー入力のサニタイズ
    sanitized_input = re.sub(r'[^0-9+\-*/]', '', user_input)

    result = eval(sanitized_input)
    print("Result:", result)
except Exception as e:
    print("Error:", e)

リンク

標準

  • 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