
Dimostra la CVE-2026-21012, una falla di deserializzazione di serde in Rust in cui JSON non attendibile può innescare varianti enum indesiderate e azioni non autorizzate.
// 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!
}
Un'applicazione Rust che utilizza serde deserializza JSON non attendibile in un'enum senza verificare che il chiamante sia autorizzato per la variante. Un attaccante può iniettare una variante enum diversa (ad es. DeleteUser) e innescare azioni non desiderate.
Compila ed esegui il programma Rust:
cargo add serde serde_json
rustc serde_vuln.rs
./serde_vuln
Esegue la variante DeleteUser senza autorizzazione.