@@ -86,13 +86,29 @@ runs:
8686 - name : Extract GitHub Context and Create Prompt
8787 shell : bash
8888 id : prepare_context
89+ env :
90+ # Pass user-controlled inputs via environment variables to prevent script injection (GHSL-2025-093)
91+ EVENT_COMMENT_BODY : ${{ github.event.comment.body }}
92+ EVENT_ISSUE_TITLE : ${{ github.event.issue.title }}
93+ EVENT_ISSUE_BODY : ${{ github.event.issue.body }}
94+ EVENT_ISSUE_NUMBER : ${{ github.event.issue.number }}
95+ EVENT_PR_TITLE : ${{ github.event.pull_request.title }}
96+ EVENT_PR_NUMBER : ${{ github.event.pull_request.number }}
97+ EVENT_REVIEW_BODY : ${{ github.event.review.body }}
98+ EVENT_ASSIGNEE_LOGIN : ${{ github.event.assignee.login }}
99+ INPUT_TRIGGER_PHRASE : ${{ inputs.trigger_phrase }}
100+ INPUT_ASSIGNEE_TRIGGER : ${{ inputs.assignee_trigger }}
101+ INPUT_DIRECT_PROMPT : ${{ inputs.direct_prompt }}
102+ EVENT_ACTION : ${{ github.event.action }}
103+ EVENT_NAME : ${{ github.event_name }}
104+ REPO_NAME : ${{ github.repository }}
89105 run : |
90- echo "🔍 Extracting GitHub context from event: ${{ github.event_name }} "
106+ echo "🔍 Extracting GitHub context from event: $EVENT_NAME "
91107
92108 # Function to check for trigger phrase
93109 check_trigger() {
94110 local text="$1"
95- local trigger="${{ inputs.trigger_phrase }} "
111+ local trigger="$INPUT_TRIGGER_PHRASE "
96112 if [[ "$text" == *"$trigger"* ]]; then
97113 return 0
98114 fi
@@ -104,11 +120,11 @@ runs:
104120 USER_REQUEST=""
105121 CONTEXT_INFO=""
106122
107- case "${{ github.event_name }} " in
123+ case "$EVENT_NAME " in
108124 "issue_comment")
109- COMMENT_BODY="${{ github.event.comment.body }} "
110- ISSUE_TITLE="${{ github.event.issue.title }} "
111- ISSUE_NUMBER="${{ github.event.issue.number }} "
125+ COMMENT_BODY="$EVENT_COMMENT_BODY "
126+ ISSUE_TITLE="$EVENT_ISSUE_TITLE "
127+ ISSUE_NUMBER="$EVENT_ISSUE_NUMBER "
112128
113129 if check_trigger "$COMMENT_BODY"; then
114130 TRIGGER_FOUND="true"
@@ -118,9 +134,9 @@ runs:
118134 ;;
119135
120136 "pull_request_review_comment")
121- COMMENT_BODY="${{ github.event.comment.body }} "
122- PR_TITLE="${{ github.event.pull_request.title }} "
123- PR_NUMBER="${{ github.event.pull_request.number }} "
137+ COMMENT_BODY="$EVENT_COMMENT_BODY "
138+ PR_TITLE="$EVENT_PR_TITLE "
139+ PR_NUMBER="$EVENT_PR_NUMBER "
124140
125141 if check_trigger "$COMMENT_BODY"; then
126142 TRIGGER_FOUND="true"
@@ -130,9 +146,9 @@ runs:
130146 ;;
131147
132148 "pull_request_review")
133- REVIEW_BODY="${{ github.event.review.body }} "
134- PR_TITLE="${{ github.event.pull_request.title }} "
135- PR_NUMBER="${{ github.event.pull_request.number }} "
149+ REVIEW_BODY="$EVENT_REVIEW_BODY "
150+ PR_TITLE="$EVENT_PR_TITLE "
151+ PR_NUMBER="$EVENT_PR_NUMBER "
136152
137153 if check_trigger "$REVIEW_BODY"; then
138154 TRIGGER_FOUND="true"
@@ -142,17 +158,17 @@ runs:
142158 ;;
143159
144160 "issues")
145- ISSUE_BODY="${{ github.event.issue.body }} "
146- ISSUE_TITLE="${{ github.event.issue.title }} "
147- ISSUE_NUMBER="${{ github.event.issue.number }} "
161+ ISSUE_BODY="$EVENT_ISSUE_BODY "
162+ ISSUE_TITLE="$EVENT_ISSUE_TITLE "
163+ ISSUE_NUMBER="$EVENT_ISSUE_NUMBER "
148164
149165 if check_trigger "$ISSUE_TITLE" || check_trigger "$ISSUE_BODY"; then
150166 TRIGGER_FOUND="true"
151167 USER_REQUEST="$ISSUE_BODY"
152168 CONTEXT_INFO="Issue #$ISSUE_NUMBER: $ISSUE_TITLE"
153- elif [[ "${{ github.event.action }} " == "assigned" && -n "${{ inputs.assignee_trigger }} " ]]; then
154- ASSIGNEE="${{ github.event.assignee.login }} "
155- if [[ "$ASSIGNEE" == "${{ inputs.assignee_trigger }} " ]]; then
169+ elif [[ "$EVENT_ACTION " == "assigned" && -n "$INPUT_ASSIGNEE_TRIGGER " ]]; then
170+ ASSIGNEE="$EVENT_ASSIGNEE_LOGIN "
171+ if [[ "$ASSIGNEE" == "$INPUT_ASSIGNEE_TRIGGER " ]]; then
156172 TRIGGER_FOUND="true"
157173 USER_REQUEST="$ISSUE_BODY"
158174 CONTEXT_INFO="Issue #$ISSUE_NUMBER assigned to $ASSIGNEE: $ISSUE_TITLE"
@@ -162,9 +178,9 @@ runs:
162178 esac
163179
164180 # Check for direct prompt override
165- if [[ -n "${{ inputs.direct_prompt }} " ]]; then
181+ if [[ -n "$INPUT_DIRECT_PROMPT " ]]; then
166182 TRIGGER_FOUND="true"
167- USER_REQUEST="${{ inputs.direct_prompt }} "
183+ USER_REQUEST="$INPUT_DIRECT_PROMPT "
168184 CONTEXT_INFO="Automated GitHub workflow"
169185 fi
170186
@@ -181,9 +197,9 @@ runs:
181197 cat > /tmp/claude-action/github-context-prompt.txt << EOF
182198 You are Claude Code, an AI assistant helping with GitHub workflows and code.
183199
184- Repository: ${{ github.repository }}
200+ Repository: $REPO_NAME
185201 Context: $CONTEXT_INFO
186- Event: ${{ github.event_name }}
202+ Event: $EVENT_NAME
187203
188204 User Request:
189205 $USER_REQUEST
0 commit comments