
신뢰할 수 없는 JSON이 의도하지 않은 enum variants 및 무단 작업을 트리거할 수 있는 Rust serde 역직렬화 결함인 CVE-2026-21012를 시연합니다.
// serde_vuln.rs - Deserializes an enum from user JSON without validation
use serde::{Deserialize, Serialize};
use serde_json;
#[derive(Deserialize, Debug)]
enum AdminAction {
ReadLogs,
DeleteUser(String),
CreateUser(String),
}
#[derive(Deserialize, Debug)]
struct Command {
action: AdminAction,
}
fn main() {
let user_input = r#"{"action": {"DeleteUser": "admin"}}"#;
let cmd: Command = serde_json::from_str(user_input).unwrap();
println!("Executing: {:?}", cmd.action);
// Could delete admin if permissions not checked!
}
serde를 사용하는 Rust 애플리케이션이 신뢰할 수 없는 JSON을 검증 없이 enum으로 역직렬화하여, 호출자가 해당 variant에 대한 권한이 있는지 확인하지 않습니다. 공격자는 다른 enum variant(예: DeleteUser)를 주입하여 의도치 않은 작업을 유발할 수 있습니다.
Rust 프로그램을 컴파일하고 실행합니다:
cargo add serde serde_json
rustc serde_vuln.rs
./serde_vuln
권한 확인 없이 DeleteUser variant를 실행합니다.