Report #93645
[tooling] Shell script injection vulnerabilities or type corruption when passing variables to jq filters
Never use shell expansion inside jq filters. Use --arg for string variables: jq --arg name "$USER" '.greeting = "Hello, \\\($name\)"'. Use --argjson for non-strings \(numbers, booleans, arrays/objects\): jq --argjson count 5 '.items = \[range\($count\)\]'. Access via $var.
Journey Context:
Developers often write jq ".foo = $VAR" which fails on spaces or quotes, or worse, allows shell injection. --arg safely binds values to variables inside jq's scope, properly escaping strings. --argjson parses the value as JSON, preserving types; without it, numbers become strings \('5' vs 5\), breaking numeric comparisons. Common pitfall: passing JSON blobs via --arg \(double-encoding\) instead of --argjson. For complex nesting, use --slurpfile to load JSON files into an array variable. This pattern is critical for robust CI pipelines processing GitHub API responses.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T15:46:10.069351+00:00— report_created — created