
Démontre CVE-2026-21012, une faille de désérialisation de la bibliothèque Rust serde où un JSON non fiable peut déclencher des variantes d'énumération non intentionnelles et des actions non autorisées.
// 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!
}
Une application Rust utilisant serde désérialise du JSON non fiable en une énumération sans vérifier que l'appelant est autorisé pour la variante. Un attaquant peut injecter une variante d'énumération différente (par exemple, DeleteUser) et déclencher des actions non intentionnelles.
Compilez et exécutez le programme Rust :
cargo add serde serde_json
rustc serde_vuln.rs
./serde_vuln
Il exécute la variante DeleteUser sans autorisation.