계: Input Validation and Representation
입력 검증 및 표현 문제는 메타 문자, 대체 인코딩 및 숫자 표현 때문에 발생합니다. 보안 문제는 입력을 신뢰하기 때문에 발생합니다. 문제로는 "Buffer Overflows", "Cross-Site Scripting" 공격, "SQL Injection", 그 외 여러 가지가 있습니다.
Prompt Injection: Persistent
Abstract
검증되지 않은 데이터를 AI 모델의 시스템 프롬프트로 보낼 경우 공격자가 출력을 조작하거나 무단 작업을 실행하여 시스템 무결성과 데이터 보안을 손상시킬 수 있습니다.
Explanation
AI 응용 프로그램에서 시스템 프롬프트는 AI 응답을 안내하는 사전 처리 지침이나 컨텍스트를 제공합니다. 공격자는 입력을 조작하여 시스템 프롬프트로 포함될 때 무단 작업을 실행하거나 민감한 정보를 공개하도록 AI 모델의 동작을 변경할 수 있습니다. 영구 프롬프트 주입의 경우 신뢰할 수 없는 입력은 일반적으로 웹 요청이 아닌 데이터베이스나 백엔드 데이터 저장소에서 제공됩니다.
예제 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 모델의 동작을 변경할 수 있습니다. 영구 프롬프트 주입의 경우 신뢰할 수 없는 입력은 일반적으로 웹 요청이 아닌 데이터베이스나 백엔드 데이터 저장소에서 제공됩니다.
예제 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 모델의 동작을 변경할 수 있습니다. 영구 프롬프트 주입의 경우 신뢰할 수 없는 입력은 일반적으로 웹 요청이 아닌 데이터베이스나 백엔드 데이터 저장소에서 제공됩니다.
예제 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