
Demuestra CVE-2026-21012, una falla de deserialización de serde en Rust donde JSON no confiable puede desencadenar variantes de enum no intencionadas y acciones no autorizadas.
// 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!
}
Una aplicación Rust que usa serde deserializa JSON no confiable en un enum sin validar que el llamador esté autorizado para la variante. Un atacante puede inyectar una variante de enum diferente (p. ej., DeleteUser) y provocar acciones no deseadas.
Compila y ejecuta el programa Rust:
cargo add serde serde_json
rustc serde_vuln.rs
./serde_vuln
Ejecuta la variante DeleteUser sin autorización.