-
-
Notifications
You must be signed in to change notification settings - Fork 7.4k
Update python sdk to strip any directory traversal in filename #22965
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
Strip any directory traversal
…znich/openapi-generator into padznich-python-sdk-dir-traversal-fix
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
1 issue found across 7 files
Prompt for AI agents (all issues)
Check if these issues are valid — if so, understand the root cause of each and fix them.
<file name="samples/openapi3/client/petstore/python-httpx/petstore_api/api_client.py">
<violation number="1" location="samples/openapi3/client/petstore/python-httpx/petstore_api/api_client.py:720">
P2: os.path.basename still returns ".." for a filename of "..", so a crafted Content-Disposition can still escape the temp folder. Guard against empty/"."/".." names and fall back to the generated temp filename.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
| ) | ||
| assert m is not None, "Unexpected 'content-disposition' header value" | ||
| filename = m.group(1) | ||
| filename = os.path.basename(m.group(1)) # Strip any directory traversal |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
P2: os.path.basename still returns ".." for a filename of "..", so a crafted Content-Disposition can still escape the temp folder. Guard against empty/"."/".." names and fall back to the generated temp filename.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At samples/openapi3/client/petstore/python-httpx/petstore_api/api_client.py, line 720:
<comment>os.path.basename still returns ".." for a filename of "..", so a crafted Content-Disposition can still escape the temp folder. Guard against empty/"."/".." names and fall back to the generated temp filename.</comment>
<file context>
@@ -717,7 +717,7 @@ def __deserialize_file(self, response):
)
assert m is not None, "Unexpected 'content-disposition' header value"
- filename = m.group(1)
+ filename = os.path.basename(m.group(1)) # Strip any directory traversal
path = os.path.join(os.path.dirname(path), filename)
</file context>
| filename = os.path.basename(m.group(1)) # Strip any directory traversal | |
| filename = os.path.basename(m.group(1)) | |
| if filename in ("", ".", ".."): # fall back to tmp filename | |
| filename = os.path.basename(path) |
based on #22953
with updated samples, docs.
cc @cbornet (2017/09) @tomplus (2018/10) @krjakbrjak (2023/02) @fa0311 (2023/10) @multani (2023/10)
PR checklist
Commit all changed files.
This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
These must match the expectations made by your contribution.
You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example
./bin/generate-samples.sh bin/configs/java*.IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
master(upcoming7.x.0minor release - breaking changes with fallbacks),8.0.x(breaking changes without fallbacks)"fixes #123"present in the PR description)Summary by cubic
Prevents directory traversal in Python SDK file downloads by sanitizing Content-Disposition filenames with os.path.basename. Updates Python samples to reflect the fix.
Written for commit f675161. Summary will update on new commits.