Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Fix sqlalchemy password leakage #408

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

yurisich
Copy link

Issue #, if available:

No issue created.

Description of changes:

I attempted to add tests to demonstrate this, but the testing.postgres dependency uses the default username without a password in a manner that I couldn't easily override. If you are interested in setting up a reproduction case, use a password that contains the character # in it and send the generated sqlalchemy segments to AWS. The name of the segment will include the password in it.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

Switches away from using `str(engine_instance.engine)` for rendering
connection strings, in order to prevent passwords containing
characters such as `#` from leaking. The name of the segment will
contain the password if this character is used, likely others as well.

See: https://bugs.python.org/issue18140 and encode/database#145

The code in question is here:

sqlalchemy/sqlalchemy/blob/aea28a9/lib/sqlalchemy/engine/url.py#L597-L630
This uses the same technique of extracting the engine url from the
correctly sanitized `__str__()` representation of the engine that
the `ext.sqlalchemy.util.decorators.py` module relies on, which
does not leak passwords in manner outlined in 9f22fff.
@yurisich yurisich requested a review from a team as a code owner September 26, 2023 19:45
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant