Skip to content

Commit 420aec2

Browse files
author
Yogthos
committed
fix(sandbox): pass GITHUB_TOKEN, GH_TOKEN, SSH_AUTH_SOCK to bash children
scrub_env was stripping GITHUB_TOKEN (matches 'TOKEN' pattern) and SSH_AUTH_SOCK (matches 'AUTH' pattern), preventing gh CLI and git over SSH from working inside bash tool invocations. Added all three to SAFE_EXACT alongside HOME/USER/PATH so git workflows work. Removed GH_TOKEN/GITHUB_TOKEN from EXPLICIT list. Updated tests to reflect the new safe classification.
1 parent 9c2a26a commit 420aec2

1 file changed

Lines changed: 26 additions & 21 deletions

File tree

src/sandbox.rs

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -124,23 +124,26 @@ pub fn is_sensitive_env_name(name: &str) -> bool {
124124
// none, so they pass naturally; the exclusions here are for
125125
// tooling env vars that legitimately need to reach bash.
126126
const SAFE_EXACT: &[&str] = &[
127-
"DISPLAY", // X11 — unrelated despite containing nothing sensitive
128-
"TERM", // terminal type
129-
"SHLVL", // bash nesting
130-
"PWD", // current directory
131-
"OLDPWD", // previous directory
132-
"PATH", // exec path
133-
"MANPATH", // man search path
134-
"LANG", // locale
135-
"LC_ALL", // locale override
136-
"LC_CTYPE", // locale ctype
137-
"EDITOR", // user's editor
138-
"VISUAL", // visual editor
139-
"PAGER", // pager
140-
"HOSTNAME", // hostname
141-
"USER", // username
142-
"LOGNAME", // login name
143-
"HOME", // home dir
127+
"DISPLAY", // X11 — unrelated despite containing nothing sensitive
128+
"TERM", // terminal type
129+
"SHLVL", // bash nesting
130+
"PWD", // current directory
131+
"OLDPWD", // previous directory
132+
"PATH", // exec path
133+
"MANPATH", // man search path
134+
"LANG", // locale
135+
"LC_ALL", // locale override
136+
"LC_CTYPE", // locale ctype
137+
"EDITOR", // user's editor
138+
"VISUAL", // visual editor
139+
"PAGER", // pager
140+
"HOSTNAME", // hostname
141+
"USER", // username
142+
"LOGNAME", // login name
143+
"HOME", // home dir
144+
"SSH_AUTH_SOCK", // SSH agent — needed for git push over SSH
145+
"GITHUB_TOKEN", // GitHub CLI token
146+
"GH_TOKEN", // GitHub CLI token (short form)
144147
];
145148
if SAFE_EXACT.iter().any(|s| &upper == s) {
146149
return false;
@@ -154,8 +157,6 @@ pub fn is_sensitive_env_name(name: &str) -> bool {
154157
"AWS_ACCESS_KEY_ID",
155158
"AWS_SECRET_ACCESS_KEY",
156159
"AWS_SESSION_TOKEN",
157-
"GH_TOKEN",
158-
"GITHUB_TOKEN",
159160
"GITLAB_TOKEN",
160161
"BITBUCKET_TOKEN",
161162
];
@@ -209,8 +210,8 @@ mod tests {
209210
fn is_sensitive_env_name_matches_explicit_cloud_vars() {
210211
assert!(is_sensitive_env_name("AWS_ACCESS_KEY_ID"));
211212
assert!(is_sensitive_env_name("AWS_SESSION_TOKEN"));
212-
assert!(is_sensitive_env_name("GH_TOKEN"));
213-
assert!(is_sensitive_env_name("GITHUB_TOKEN"));
213+
// GH_TOKEN / GITHUB_TOKEN are now SAFE_EXACT — needed for
214+
// gh CLI and git operations inside bash children.
214215
}
215216

216217
#[test]
@@ -233,6 +234,10 @@ mod tests {
233234
assert!(!is_sensitive_env_name("GOPATH"));
234235
assert!(!is_sensitive_env_name("VIRTUAL_ENV"));
235236
assert!(!is_sensitive_env_name("NODE_ENV"));
237+
// GitHub / SSH tokens needed for git workflows in bash children.
238+
assert!(!is_sensitive_env_name("GITHUB_TOKEN"));
239+
assert!(!is_sensitive_env_name("GH_TOKEN"));
240+
assert!(!is_sensitive_env_name("SSH_AUTH_SOCK"));
236241
}
237242

238243
#[test]

0 commit comments

Comments
 (0)