Skip to content

(via ryandens): Fix shell injection vulnerability in JavaagentAwareStartScriptGenerator - #392

Merged
macroscopeapp[bot] merged 2 commits into
worktree-javaagent-options-issue-50from
macroscope/worktree-javaagent-options-issue-50
Jul 23, 2026
Merged

macroscopeapp[bot] merged 2 commits into
worktree-javaagent-options-issue-50from
macroscope/worktree-javaagent-options-issue-50

Conversation

@macroscopeapp

@macroscopeapp macroscopeapp Bot commented Jul 23, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Fixes a shell injection vulnerability in JavaagentAwareStartScriptGenerator.Fake.write() by adding platform-aware shell escaping for javaagent option strings.

Changes

Added proper escaping for agent option values to prevent malicious input from being interpreted as shell commands:

  • Unix scripts: Option values are wrapped in single quotes with internal single quotes escaped as '\''
  • Windows scripts: % characters are doubled to %% to prevent environment variable expansion

Security Impact

Previously, unescaped option strings passed to the javaagent could potentially be exploited to execute arbitrary shell commands. This fix ensures that special characters in option values are properly escaped for the target platform's shell interpreter.

Note

Macroscope: Fix It For Me

Activity

Currently: Auto-merged 2ae86eb

Previously
  • Waiting on checks
  • Pushed 51d4603
  • Action failed: Validate
  • Waiting on checks
  • Pushed a62e381

Note

Fix shell injection vulnerability in JavaagentAwareStartScriptGenerator by escaping option values

  • On Unix, javaagent option values are wrapped in single quotes with internal single quotes escaped to prevent shell injection.
  • On Windows, percent signs in option values are doubled to prevent variable expansion.
  • The Writer now accepts a platform argument to apply the correct escaping strategy per OS.
  • Behavioral Change: generated start scripts now quote javaagent option values, which changes the output format of DEFAULT_JVM_OPTS on Unix.

Macroscope summarized 51d4603.

@macroscopeapp
macroscopeapp Bot merged commit 2ae86eb into worktree-javaagent-options-issue-50 Jul 23, 2026
4 checks passed
@macroscopeapp
macroscopeapp Bot deleted the macroscope/worktree-javaagent-options-issue-50 branch July 23, 2026 21:13
ryandens pushed a commit that referenced this pull request Oct 17, 2026
…artScriptGenerator (#392)

## Summary

Fixes a shell injection vulnerability in
`JavaagentAwareStartScriptGenerator.Fake.write()` by adding
platform-aware shell escaping for javaagent option strings.

## Changes

Added proper escaping for agent option values to prevent malicious input
from being interpreted as shell commands:

- **Unix scripts**: Option values are wrapped in single quotes with
internal single quotes escaped as `'\''`
- **Windows scripts**: `%` characters are doubled to `%%` to prevent
environment variable expansion

## Security Impact

Previously, unescaped option strings passed to the javaagent could
potentially be exploited to execute arbitrary shell commands. This fix
ensures that special characters in option values are properly escaped
for the target platform's shell interpreter.

<!-- Macroscope (Fix It For Me) template starts here -->
> [!NOTE]
> ### Macroscope: _Fix It For Me_
> - This PR originated from [this
comment](https://github.com/ryandens/javaagent-gradle-plugin/pull/379/files#r3641346092)
in #379.
> - Since auto-merge is on, Macroscope will merge this PR after waiting
for checks to pass.
> - If you'd rather not wait, you can always merge this yourself but
**no further action from you is currently needed**.
> - You can also @mention Macroscope in this PR to request further
changes.
>
> #### Activity
> Currently: <!-- Macroscope (Fix It For Me) current status starts here
-->_Waiting on checks_<!-- Macroscope (Fix It For Me) current status
ends here -->
>
> <details>
> <summary>Previously</summary>
>
> <!-- Macroscope (Fix It For Me) previous status starts here -->
> - Pushed 51d4603
> - Action failed: Validate
> - Waiting on checks
> - Pushed a62e381
> <!-- Macroscope (Fix It For Me) previous status ends here -->
>
> </details>

----
<!-- Macroscope (Fix It For Me) template ends here -->
<!-- Macroscope's pull request summary starts here -->
<!-- Macroscope will only edit the content between these invisible
markers, and the markers themselves will not be visible in the GitHub
rendered markdown. -->
<!-- If you delete either of the start / end markers from your PR's
description, Macroscope will append its summary at the bottom of the
description. -->
> [!NOTE]
> ### Fix shell injection vulnerability in
`JavaagentAwareStartScriptGenerator` by escaping option values
> - On Unix, javaagent option values are wrapped in single quotes with
internal single quotes escaped to prevent shell injection.
> - On Windows, percent signs in option values are doubled to prevent
variable expansion.
> - The
[`Writer`](https://github.com/ryandens/javaagent-gradle-plugin/pull/392/files#diff-b35a17536e95a01f0d06c07c9255cbcd47cfceeb6231638cda0393b65d70967b)
now accepts a `platform` argument to apply the correct escaping strategy
per OS.
> - Behavioral Change: generated start scripts now quote javaagent
option values, which changes the output format of `DEFAULT_JVM_OPTS` on
Unix.
>
> <!-- Macroscope's review summary starts here -->
>
> <sup><a href="https://app.macroscope.com">Macroscope</a> summarized
51d4603.</sup>
> <!-- Macroscope's review summary ends here -->
>
<!-- macroscope-ui-refresh -->
<!-- Macroscope's pull request summary ends here -->

---------

Co-authored-by: macroscopeapp[bot] <170038800+macroscopeapp[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant