界: Input Validation and Representation
输入验证与表示问题是由元字符、交替编码和数字表示引起的。安全问题源于信任输入。这些问题包括:“Buffer Overflows”、“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