fix: Require an explicit opt in to unsafety; defer decision to call time#246
Merged
fix: Require an explicit opt in to unsafety; defer decision to call time#246
Conversation
57aebd3 to
0621d9c
Compare
0621d9c to
48d59e9
Compare
robrap
reviewed
May 12, 2025
robrap
reviewed
May 13, 2025
robrap
approved these changes
May 14, 2025
Contributor
MoisesGSalas
left a comment
There was a problem hiding this comment.
Hi @timmc-edx, sorry for being away for so long.
I all looks fine and I tested the RuntimeError on the edunext codejailservice and it worked. Would you mind rebasing on top of the current master?
| # over the computer immediately and entirely. | ||
| # | ||
| # The only purpose of this setting is for local debugging. | ||
| ALWAYS_BE_UNSAFE = False |
Contributor
There was a problem hiding this comment.
is there a code path that sets this to True somewhere?
Contributor
Author
There was a problem hiding this comment.
Not an existing one, no. This would be in case some application that was integrating codejail needed to enable unsafe mode.
51540bc to
68918ef
Compare
Codejail currently makes a decision at module load time of whether it should run all code safely or unsafely, and defaults to unsafely. This causes several problems: - Any misconfiguration of codejail (such as a missing Django setting or middleware) results in the application becoming immediately and entirely vulnerable to anyone who can submit code. - Codejail's behavior changes depending on when the `codejail.safe_exec` module is loaded during application initialization. This causes unstable behavior and is confusing for developers. This change switches the `ALWAYS_BE_UNSAFE` check to occur only at the time that `safe_exec` is actually called, rather than at module load time. The check for whether codejail is configured for Python is also moved to call time, but no longer automatically switches codejail to unsafe mode. Instead, it raises an exception to notify the user of their error.
68918ef to
1f97afa
Compare
MoisesGSalas
approved these changes
Jun 12, 2025
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.
Codejail currently makes a decision at module load time of whether it should run all code safely or unsafely, and defaults to unsafely. This causes several problems:
codejail.safe_execmodule is loaded during application initialization. This causes unstable behavior and is confusing for developers.This change switches the
ALWAYS_BE_UNSAFEcheck to occur only at the time thatsafe_execis actually called, rather than at module load time.The check for whether codejail is configured for Python is also moved to call time, but no longer automatically switches codejail to unsafe mode. Instead, it raises an exception to notify the user of their error.
This addresses #16