界: Input Validation and Representation
輸入驗證和表示法問題是由中繼字元、替代編碼和數值表示法引起的。信任輸入會導致安全問題。問題包括:「Buffer Overflows」、「Cross-Site Scripting」攻擊、「SQL Injection」及其他許多問題。
Prompt Injection: Persistent
Abstract
當您將未經驗證的資料傳送至 AI 模型中的系統提示時,攻擊者可以操縱輸出或執行未經授權的動作,進而危害系統完整性和資料安全。
Explanation
在 AI 應用程式中,系統提示會提供指導 AI 回應的預先處理指令或內容。攻擊者可以精心製作輸入,當這些輸入內嵌為系統提示時,就會改變 AI 模型的行為,以執行未經授權的操作或洩漏敏感資訊。在 persistent prompt injection 的情況下,這種不受信任的輸入通常來自資料庫或後端資料儲存區,而不是 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 模型的行為,以執行未經授權的操作或洩漏敏感資訊。在 persistent prompt injection 的情況下,這種不受信任的輸入通常來自資料庫或後端資料儲存區,而不是 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 模型的行為,以執行未經授權的操作或洩漏敏感資訊。在 persistent prompt injection 的情況下,這種不受信任的輸入通常來自資料庫或後端資料儲存區,而不是 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