while with rust strings we cannot inject \0, it feels a bit safer to
enforce some basic restrictions, with length and not containing any
slash seems sensible enough.
Admins should not put sensible data as theme-XYZ.css files in
/usr/share (which is normally readable by all system users anyway)
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
fn get_theme(headers: &http::HeaderMap) -> String {
let exists = |t: &str| {
- Path::new(&format!(
- "/usr/share/javascript/proxmox-widget-toolkit/themes/theme-{t}.css"
- ))
- .exists()
+ t.len() < 32
+ && !t.contains('/')
+ && Path::new(&format!(
+ "/usr/share/javascript/proxmox-widget-toolkit/themes/theme-{t}.css"
+ ))
+ .exists()
};
match cookie_from_header(headers, "PBSThemeCookie") {