Summary
build_json_body constructs JSON by string formatting without escaping special characters:
fields.push(format!(" \"{}\": \"{}\"", k, v));
Values containing ", \, or newlines produce malformed or attacker-controlled JSON sent to allowed endpoints.
Severity: Medium
Category: Injection (TM-INJ)
Affected Files
crates/bashkit/src/builtins/http.rs lines 207-224
Steps to Reproduce
http POST https://allowed-api.com name='test","admin":true,"x":"y'
# Produces: { "name": "test","admin":true,"x":"y" }
# Injected admin:true field
Impact
Arbitrary JSON field injection in request bodies. Can escalate privileges on target APIs (e.g., setting admin: true).
Acceptance Criteria
Summary
build_json_bodyconstructs JSON by string formatting without escaping special characters:Values containing
",\, or newlines produce malformed or attacker-controlled JSON sent to allowed endpoints.Severity: Medium
Category: Injection (TM-INJ)
Affected Files
crates/bashkit/src/builtins/http.rslines 207-224Steps to Reproduce
Impact
Arbitrary JSON field injection in request bodies. Can escalate privileges on target APIs (e.g., setting
admin: true).Acceptance Criteria
serde_jsonto construct JSON body properly (values asserde_json::Value::String)",\, and control characters in values"produces valid escaped JSON\nproduces valid escaped JSON