Security: Remove shell=True to prevent command injection (Fix #261) #293
+125
−16
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
@pradeeban
Fixes critical command injection vulnerability in FRI server endpoints (/contribute and /library).
Root Cause
User input was executed via subprocess.check_output() with shell=True, allowing attackers to inject arbitrary shell commands via malformed JSON payloads (e.g., {"branch": "main & rm -rf /"}).
Fix
Removed shell=True from subprocess calls on Windows
Switched to subprocess.run() with check=True, capture_output=True, text=True for safe argument handling
Added input validation function (validate_input()) using regex pattern ^[a-zA-Z0-9_-/. ]+$
All user-supplied parameters (study, path, auth, branch, title, desc, filename) are now validated before execution
Added proper error handling for ValueError and CalledProcessError
Changes
/contribute endpoint: Removed shell=True, added input validation for 6 parameters
/library endpoint: Removed shell=True, added input validation for 2 parameters
Impact
Testing
#261