Add security context with deserialization guard #1
+800
−1
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.
Overview
Introduces a context-aware taint tracking mechanism to protect against
arbitrary code execution during pickle deserialization.
Core mechanism
Added
security_ctxstruct to PyContext with deserialization_taint_counterNew internal API to track deserialization state:
Taint counter is incremented when entering pickle.loads() and decremented
on exit (both success and error paths)
Taint state propagates to new contexts created during deserialization
Design rationale
Extends PyContext (thread context) as it's the existing mechanism for context
variables and is natively supported by higher-level concurrency models like
asyncio. Storing the security state in the C struct prevents malicious user
code from overriding or bypassing the protection.
Protection via audit hooks