github.com / openai
openai/ codex
Rust·9453 files·commit 40db507·scanned 5d ago·cached ✓
15/100
LOW RISK
Minor findings consistent with the project type. Nothing reachable from install hooks.
score capped at 15 — openai is a verified organization — findings likely false positives
verdict accurate?
Verified organization
32% file coverage
Partial architecture graph
CLI tool detected
threat-state: lowlive
FINDINGS ░▒▓
warningPython subprocess / os.system usageos.system() or subprocess with shell=True / suspicious commands can execute arbitrary shell commands. Plain pip/package installs are usually benign..github/scripts/macos-signing/sign_macos_cli_package.py
command.extend(["--identifier", f"com.openai.codex.{name}"])
subprocess.run(command, check=True)
with (reports / f"{name}-signature.yaml").open("wb") as output:...+4warningPython subprocess / os.system usageos.system() or subprocess with shell=True / suspicious commands can execute arbitrary shell commands. Plain pip/package installs are usually benign..github/scripts/macos-signing/test_notarize_with_akv.py
artifact.write_bytes(b"signed release artifact")
subprocess.run(
[
str(+4criticalRust process Command usagestd::process::Command can execute arbitrary shell commands. Malware uses it to drop payloads, exfiltrate data, or establish persistence.bazel/rules/testing/wine/src/lib.rs
install_powershell_runtime(prefix.path(), &runtime.powershell_runtime)?;
let mut command = StdCommand::new(&runtime.wine);
configure_wine_environment(&mut command, &runtime, pr...+8criticalRust process Command usagestd::process::Command can execute arbitrary shell commands. Malware uses it to drop payloads, exfiltrate data, or establish persistence.bazel/rules/testing/wine/src/lib_tests.rs
let executable = codex_utils_cargo_bin::cargo_bin("wine-smoke")?;
let mut process = WineTestCommand::new(executable).arg("--wait").spawn()?;
let mut lines = BufReader::new(process.take_std...+8warningRust unsafe blockunsafe blocks bypass Rust's memory safety guarantees. Malware uses them for raw pointer manipulation, shellcode injection, or calling dangerous foreign functions.codex-rs/app-server-daemon/src/backend/pid.rs
// A previous updater may have started this child; reap it if it has exited.
unsafe { libc::waitpid(raw_pid, std::ptr::null_mut(), libc::WNOHANG) };
...+3criticalRust process Command usagestd::process::Command can execute arbitrary shell commands. Malware uses it to drop payloads, exfiltrate data, or establish persistence.codex-rs/app-server-daemon/src/backend/pid.rs
async fn read_process_details(pid: u32) -> Result<(String, String)> {
let output = Command::new("ps")
.args(["-p", &pid.to_string(), "-o", "stat=", "-o", "lstart="])
.output()+8warningRust unsafe blockunsafe blocks bypass Rust's memory safety guarantees. Malware uses them for raw pointer manipulation, shellcode injection, or calling dangerous foreign functions.codex-rs/app-server-daemon/src/backend/pid_identity.rs
// arg=1 includes zombies so callers can reap children that have exited.
let read = unsafe {
libc::proc_pidinfo(
pid,+3warningRust unsafe blockunsafe blocks bypass Rust's memory safety guarantees. Malware uses them for raw pointer manipulation, shellcode injection, or calling dangerous foreign functions.codex-rs/app-server-daemon/src/backend/pid_start.rs
{
unsafe {
command.pre_exec(|| {
if libc::setsid() == -1 {+3warningRust wallet/crypto code with network activityCode handling private keys or signing and also making network requests may be exfiltrating secrets or sending funds to an attacker.codex-rs/app-server-client/src/lib.rs
.send(())
.expect("server completion signal should send");
client.shutdown().await.expect("shutdown should complete");
}+5warningRust wallet/crypto code with network activityCode handling private keys or signing and also making network requests may be exfiltrating secrets or sending funds to an attacker.codex-rs/app-server-transport/src/transport/remote_control/websocket.rs
#[tokio::test]
async fn run_server_writer_inner_assigns_contiguous_seq_ids_per_stream() {
let (client_stream, mut server_stream) = connected_websocket_pair().await;
let (websoc...+5warningRust wallet/crypto code with network activityCode handling private keys or signing and also making network requests may be exfiltrating secrets or sending funds to an attacker.codex-rs/app-server/tests/suite/v2/account_enterprise_tests.rs
let assertion = format!(
"{}.{}.signature",
URL_SAFE_NO_PAD.encode(r#"{"alg":"ES256"}"#),
URL_SAFE_NO_PAD.encode(+5warningExtremely long lines (>1000 chars)Very long lines in source files (not minified bundles) can hide malicious code.codex-rs/app-server-protocol/schema/typescript/ClientRequest.ts+4
warningExtremely long lines (>1000 chars)Very long lines in source files (not minified bundles) can hide malicious code.codex-rs/app-server-protocol/schema/typescript/ResponseItem.ts+4
warningExtremely long lines (>1000 chars)Very long lines in source files (not minified bundles) can hide malicious code.codex-rs/app-server-protocol/schema/typescript/ServerNotification.ts+4
infoSuspicious file in repoExecutable file (setup-msvc-env.ps1) in repository.github/actions/setup-msvc-env/setup-msvc-env.ps1+2
infoSuspicious file in repoExecutable file (compute-bazel-windows-path.ps1) in repository.github/scripts/compute-bazel-windows-path.ps1+2
infoSuspicious file in repoExecutable file (setup-dev-drive.ps1) in repository.github/scripts/setup-dev-drive.ps1+2
Scores are heuristics. A “safe” verdict means no known-malicious patterns were found — clever malware can look boring. Wrong verdict? Flag it above; confirmed false positives become regression tests.
3000 files scanned @ 40db507 | 10/22/2026 | heuristic scan — always review manually
risk by category
code execution25
network & exfiltration25
file system access0
obfuscation15
supply chain15
owasp / injection0
telemetry
files 3000/9453rules hit 19engine v7commit 40db507
github
openai/codex
Lightweight coding agent that runs in your terminal
130467
20571
563d
9453 files
3000 scanned(32%)
40db507
architecture░▒▓
entry (0) flagged (108) pkg (1047)
1447 nodes · 2849 edgesscroll to zoom · click node to jump to finding