Title: Security: Force positional arguments to always be arguments to avoid options injection · Issue #1517 · gitpython-developers/GitPython · GitHub
Open Graph Title: Security: Force positional arguments to always be arguments to avoid options injection · Issue #1517 · gitpython-developers/GitPython
X Title: Security: Force positional arguments to always be arguments to avoid options injection · Issue #1517 · gitpython-developers/GitPython
Description: This is somehow related to #1515, but as a more broad problem. Gitpython exposes some methods to interact with the git program, but gitpython fails to validate/escape the arguments (user-input), resulting in the user being able to pass o...
Open Graph Description: This is somehow related to #1515, but as a more broad problem. Gitpython exposes some methods to interact with the git program, but gitpython fails to validate/escape the arguments (user-input), re...
X Description: This is somehow related to #1515, but as a more broad problem. Gitpython exposes some methods to interact with the git program, but gitpython fails to validate/escape the arguments (user-input), re...
Opengraph URL: https://github.com/gitpython-developers/GitPython/issues/1517
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Security: Force positional arguments to always be arguments to avoid options injection","articleBody":"This is somehow related to https://github.com/gitpython-developers/GitPython/issues/1515, but as a more broad problem. Gitpython exposes some methods to interact with the git program, but gitpython fails to validate/escape the arguments (user-input), resulting in the user being able to pass options to the final git command, this doesn't seem bad, but git exposes some options (`--upload-pack` and `--receive-pack`) that can lead to remote code execution.\r\n\r\nOne example is the `clone()` method, it receives a path\r\n \r\nhttps://github.com/gitpython-developers/GitPython/blob/17ff2630af26b37f82ac1158ee3495c4390da699/git/repo/base.py#L1219\r\n\r\nBut an option can be passed as well, leading to RCE, a full working example is:\r\n\r\n```python\r\nimport git\r\nr = git.Repo.init('/tmp/test', bare=True)\r\nr.clone(\"--upload-pack=touch /tmp/pwn\")\r\n```\r\n\r\nA usual solution is to add `--` before any user-input arguments, forcing them to always be taken as positional arguments and not options, but there are commands like git checkout that make special use of `--`, git mentions the `--end-of-options` option https://git-scm.com/docs/gitcli/ as an alias for `--` for cases like that, but that option isn't available for `git checkout` :upside_down_face: \r\n\r\nOther options could be:\r\n- To have a list of commands (like checkout) to not add `--`\r\n- Check all command calls and add `--` manually to each one, for example https://github.com/gitpython-developers/GitPython/blob/17ff2630af26b37f82ac1158ee3495c4390da699/git/repo/base.py#L1170-L1180\r\n that would be `git.clone(multi, '--', ...)`\r\n\r\nref https://github.com/gitpython-developers/GitPython/issues/1515#issuecomment-1353683726.","author":{"url":"https://github.com/stsewd","@type":"Person","name":"stsewd"},"datePublished":"2022-12-19T16:48:59.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":1},"url":"https://github.com/1517/GitPython/issues/1517"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:0b72abaf-4757-ff5b-22d1-b343d21bd833 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 9B28:1BE852:14EA2F0:1C90B38:69694EF7 |
| html-safe-nonce | 5b6fa9ed44afd54ca1e0c59c834634d3b61826ff58b5d9347e6c247a3cc3ad82 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5QjI4OjFCRTg1MjoxNEVBMkYwOjFDOTBCMzg6Njk2OTRFRjciLCJ2aXNpdG9yX2lkIjoiNjM1NTgwMTk3NzczMTUwMTgxNSIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 029748e94b0ec8f9e3a16f707f8f21e8c3cf0a6b21fd5f91b8aac9cdc13d828d |
| hovercard-subject-tag | issue:1503256987 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/gitpython-developers/GitPython/1517/issue_layout |
| twitter:image | https://opengraph.githubassets.com/5d8eebaafa97bbf1e8d1af654cbb75b9606127e25aba31e07519ff581df56e46/gitpython-developers/GitPython/issues/1517 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/5d8eebaafa97bbf1e8d1af654cbb75b9606127e25aba31e07519ff581df56e46/gitpython-developers/GitPython/issues/1517 |
| og:image:alt | This is somehow related to #1515, but as a more broad problem. Gitpython exposes some methods to interact with the git program, but gitpython fails to validate/escape the arguments (user-input), re... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | stsewd |
| hostname | github.com |
| expected-hostname | github.com |
| None | 54182691a21263b584d2e600b758e081b0ff1d10ffc0d2eefa51cf754b43b51d |
| turbo-cache-control | no-preview |
| go-import | github.com/gitpython-developers/GitPython git https://github.com/gitpython-developers/GitPython.git |
| octolytics-dimension-user_id | 503709 |
| octolytics-dimension-user_login | gitpython-developers |
| octolytics-dimension-repository_id | 1126087 |
| octolytics-dimension-repository_nwo | gitpython-developers/GitPython |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 1126087 |
| octolytics-dimension-repository_network_root_nwo | gitpython-developers/GitPython |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | d69ac0477df0f87da03b8b06cebd187012d7a930 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width