Conversation
- Changed RD_EXT_DISABLED default from false to true in Main.java - Extension directory loading now disabled by default to prevent arbitrary code execution - Users must explicitly set RD_EXT_DISABLED=false to enable external extensions - Updated CHANGELOG.md for version 2.0.10 - Added MainSpec test for Main class constants - Updated .gitignore to exclude bin/ directories Addresses security vulnerability where malicious JAR files could be loaded via RD_EXT_DIR environment variable, executing code through static initializers without user interaction.
gschueler
reviewed
Jan 6, 2026
gschueler
reviewed
Jan 6, 2026
Co-authored-by: Greg Schueler <greg.schueler@gmail.com>
The test only verified that string constants equal themselves, which provides no value. The actual security behavior is covered by integration tests.
Updates packaging submodule from 8077ed3 to 662b44a, which includes: - GPG key rotation (commit 5174e38) - New pubring.gpg with updated signing key - Archived old key as pubring20250228.gpg This should resolve the GPG signature verification failures in CI/CD.
The upgrade test installs version 2.0.9 which was signed with the old GPG key before the recent key rotation. Import the archived key (pubring20250228.gpg) to allow verification of the 2.0.9 package signature during the upgrade test.
Contributor
Author
|
Removed un-necessary test and fixed build CI issues related to GPG key rotation. |
gschueler
approved these changes
Jan 12, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Security Vulnerability Fix
Addresses RUN-3540 - Arbitrary Code Execution vulnerability in Rundeck CLI extension loading mechanism.
Vulnerability Summary
The Rundeck CLI contains an extension loading mechanism that can lead to arbitrary code execution. By controlling the
RD_EXT_DIRenvironment variable, an attacker can cause therdtool to load malicious JAR files, executing code through static initializers without user interaction.The vulnerability exists because:
rdchecks forRD_EXT_DIRenvironment variable at startup*.jarfiles in the specified directoryCurrent Fix (Implemented in this PR)
Changes:
RD_EXT_DISABLEDdefault fromfalsetotrueinMain.javaline 199RD_EXT_DISABLED=falseMainSpec.groovy.gitignoreto exclude build artifacts (bin/directories)Impact:
RD_EXT_DISABLED=falseto enable)To re-enable external extensions:
export RD_EXT_DISABLED=falseAlternative More Aggressive Approach (For Discussion)
We could implement a more forceful "soft break" approach that requires explicit opt-in:
Proposed changes:
RD_ALLOW_EXTERNAL_EXTENSIONS=trueRD_EXT_DISABLED=false(or deprecate it)Benefits of alternative approach:
trueto enable, notfalse)Example implementation:
To enable (alternative approach):
Testing
rd acl) continue to work normallyFuture Considerations (Major Release)
Per Greg Schueler's recommendation: In a future major release, the
loadExtensionJarsmethod should be completely removed along with all external extension directory loading functionality, as this feature is no longer actively used.Files Changed
rd-cli-tool/src/main/java/org/rundeck/client/tool/Main.java- Changed default valueCHANGELOG.md- Added version 2.0.10 with security fix noterd-cli-tool/src/test/groovy/org/rundeck/client/tool/MainSpec.groovy- New test file.gitignore- Added bin/ directoriesQuestions for Review
RD_EXT_DISABLED=falseto alert them of security implications?