界: Input Validation and Representation
入力の検証や表現の問題は、メタキャラクター、代替エンコーディング、数値表現などによって引き起こされます。セキュリティの問題は、入力を信頼することに起因します。この問題に含まれるのは、「Buffer Overflow」、「Cross-Site Scripting」攻撃、「SQL Injection」などです。
Prompt Injection: Persistent
Abstract
AI モデルのシステム プロンプトに未検証のデータを送信すると、攻撃者が出力を操作したり、許可されていないアクションを実行したりして、システムの整合性とデータのセキュリティを侵害する可能性があります。
Explanation
AI アプリケーションでは、システム プロンプトによって、前処理の指示や AI の応答をガイドするコンテキストが提供されます。攻撃者は、システム プロンプトとして埋め込まれると AI モデルの動作が変わって不正な操作を実行したり、機密情報を漏洩したりする可能性がある入力を作成できます。永続的なプロンプト インジェクションの場合、この信頼できない入力は通常は、Web リクエストではなく、データベースまたはバックエンド データ ストアから取得されます。
例 1: 次のコードは、Spring AI を使用する AI チャット クライアントへのシステム プロンプトのインジェクションを示しています。
この例では、攻撃者はシステム プロンプトへの未検証の入力を操作し、セキュリティ侵害が引き起されるようにしています。
例 1: 次のコードは、Spring AI を使用する AI チャット クライアントへのシステム プロンプトのインジェクションを示しています。
@GetMapping("/prompt_injection_persistent")
String generation(String userInput1, ...) {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users WHERE ...");
String userName = "";
if (rs != null) {
rs.next();
userName = rs.getString("userName");
}
return this.clientBuilder.build().prompt()
.system("Assist the user " + userName)
.user(userInput1)
.call()
.content();
}
この例では、攻撃者はシステム プロンプトへの未検証の入力を操作し、セキュリティ侵害が引き起されるようにしています。
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 1427
[2] Standards Mapping - Common Weakness Enumeration Top 25 2024 [13] CWE ID 077
desc.dataflow.java.prompt_injection_persistent
Abstract
AI モデルのシステム プロンプトに未検証のデータを送信すると、攻撃者が出力を操作したり、許可されていないアクションを実行したりして、システムの整合性とデータのセキュリティを侵害する可能性があります。
Explanation
AI アプリケーションでは、システム プロンプトによって、前処理の指示や AI の応答をガイドするコンテキストが提供されます。攻撃者は、システム プロンプトとして埋め込まれると AI モデルの動作が変わって不正な操作を実行したり、機密情報を漏洩したりする可能性がある入力を作成できます。永続的なプロンプト インジェクションの場合、この信頼できない入力は通常は、Web リクエストではなく、データベースまたはバックエンド データ ストアから取得されます。
例 1: 次のコードは、Anthropic AI モデルへのシステム プロンプトのインジェクションを示しています。
この例では、攻撃者はシステム プロンプトへの未検証の入力を操作し、セキュリティ侵害が引き起されるようにしています。
例 1: 次のコードは、Anthropic AI モデルへのシステム プロンプトのインジェクションを示しています。
client = new Anthropic();
# Simulated attacker's input attempting to inject a malicious system prompt
attacker_query = ...;
attacker_name = db.qyery('SELECT name FROM user_profiles WHERE ...');
response = client.messages.create(
model = "claude-3-5-sonnet-20240620",
max_tokens=2048,
system = "Provide assistance to the user " + attacker_name,
messages = [
{"role": "user", "content": attacker_query}
]
);
...
この例では、攻撃者はシステム プロンプトへの未検証の入力を操作し、セキュリティ侵害が引き起されるようにしています。
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 1427
[2] Standards Mapping - Common Weakness Enumeration Top 25 2024 [13] CWE ID 077
desc.dataflow.javascript.prompt_injection_persistent
Abstract
AI モデルのシステム プロンプトに未検証のデータを送信すると、攻撃者が出力を操作したり、許可されていないアクションを実行したりして、システムの整合性とデータのセキュリティを侵害する可能性があります。
Explanation
AI アプリケーションでは、システム プロンプトによって、前処理の指示や AI の応答をガイドするコンテキストが提供されます。攻撃者は、システム プロンプトとして埋め込まれると AI モデルの動作が変わって不正な操作を実行したり、機密情報を漏洩したりする可能性がある入力を作成できます。永続的なプロンプト インジェクションの場合、この信頼できない入力は通常は、Web リクエストではなく、データベースまたはバックエンド データ ストアから取得されます。
例 1: 次の Python コードは、OpenAI AI モデルへのシステム プロンプトのインジェクションを示しています。
この例では、攻撃者はシステム プロンプトへの未検証の入力を操作し、セキュリティ侵害が引き起されるようにしています。
例 1: 次の Python コードは、OpenAI AI モデルへのシステム プロンプトのインジェクションを示しています。
client = OpenAI()
# Simulated attacker's input attempting to inject a malicious system prompt
attacker_name = cursor.fetchone()['name']
attacker_query = ...
completion = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "Provide assistance to the user " + attacker_name},
{"role": "user", "content": attacker_query}
]
)
この例では、攻撃者はシステム プロンプトへの未検証の入力を操作し、セキュリティ侵害が引き起されるようにしています。
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 1427
[2] Standards Mapping - Common Weakness Enumeration Top 25 2024 [13] CWE ID 077
desc.dataflow.python.prompt_injection_persistent