Skip to content

docker credential JSON: validate non UTF-8 auth #132104

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

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

Conversation

janisz
Copy link

@janisz janisz commented Jun 4, 2025

What type of PR is this?

/kind bug

What this PR does / why we need it:

Which issue(s) this PR fixes:

Fixes #131982

Special notes for your reviewer:

Does this PR introduce a user-facing change?

The auth field in Docker config will be validated to be a valid UTF-8 string and will be rejected if not.

Additional documentation e.g., KEPs (Kubernetes Enhancement Proposals), usage docs, etc.:


@k8s-ci-robot k8s-ci-robot added release-note Denotes a PR that will be considered when it comes time to generate release notes. size/S Denotes a PR that changes 10-29 lines, ignoring generated files. kind/bug Categorizes issue or PR as related to a bug. cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. do-not-merge/needs-sig Indicates an issue or PR lacks a `sig/foo` label and requires one. needs-triage Indicates an issue or PR lacks a `triage/foo` label and requires one. labels Jun 4, 2025
@k8s-ci-robot
Copy link
Contributor

Welcome @janisz!

It looks like this is your first PR to kubernetes/kubernetes 🎉. Please refer to our pull request process documentation to help your PR have a smooth ride to approval.

You will be prompted by a bot to use commands during the review process. Do not be afraid to follow the prompts! It is okay to experiment. Here is the bot commands documentation.

You can also check if kubernetes/kubernetes has its own contribution guidelines.

You may want to refer to our testing guide if you run into trouble with your tests not passing.

If you are having difficulty getting your pull request seen, please follow the recommended escalation practices. Also, for tips and tricks in the contribution process you may want to read the Kubernetes contributor cheat sheet. We want to make sure your contribution gets all the attention it needs!

Thank you, and welcome to Kubernetes. 😃

@k8s-ci-robot
Copy link
Contributor

This issue is currently awaiting triage.

If a SIG or subproject determines this is a relevant issue, they will accept it by applying the triage/accepted label and provide further guidance.

The triage/accepted label can be added by org members by writing /triage accepted in a comment.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@k8s-ci-robot k8s-ci-robot added needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. needs-priority Indicates a PR lacks a `priority/foo` label and requires one. labels Jun 4, 2025
@k8s-ci-robot
Copy link
Contributor

Hi @janisz. Thanks for your PR.

I'm waiting for a kubernetes member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should join the org to skip this step.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@k8s-ci-robot k8s-ci-robot requested review from deads2k and wojtek-t June 4, 2025 19:29
@k8s-ci-robot k8s-ci-robot added sig/auth Categorizes an issue or PR as relevant to SIG Auth. and removed do-not-merge/needs-sig Indicates an issue or PR lacks a `sig/foo` label and requires one. labels Jun 4, 2025
@SergeyKanzhelev
Copy link
Member

/release-note-edit

The auth field in Docker config will be validated to be a valid UTF-8 string and will be rejected if not.

@SergeyKanzhelev
Copy link
Member

/ok-to-test

@k8s-ci-robot k8s-ci-robot added ok-to-test Indicates a non-member PR verified by an org member that is safe to test. and removed needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. labels Jun 4, 2025
Signed-off-by: Tomasz Janiszewski <[email protected]>
@janisz janisz requested a review from SergeyKanzhelev June 5, 2025 09:02
@enj enj moved this to Needs Triage in SIG Auth Jun 5, 2025
@SergeyKanzhelev
Copy link
Member

Adding sig node:

/sig node

@k8s-ci-robot k8s-ci-robot added the sig/node Categorizes an issue or PR as relevant to SIG Node. label Jun 6, 2025
@janisz
Copy link
Author

janisz commented Jun 6, 2025

/assign @sreeram-venkitesh

@SergeyKanzhelev
Copy link
Member

Since this may potentially break things, let's add a feature gate around it which is enabled by default. Please see the SystemdWatchdog as an example. After one release we can delete that feature gate. It is mostly to give a quick escape hatch for a single release so users can fix their configs or give us feedback.

Signed-off-by: Tomasz Janiszewski <[email protected]>
@janisz
Copy link
Author

janisz commented Jun 9, 2025

@SergeyKanzhelev good point. I added feature gate

@SergeyKanzhelev
Copy link
Member

please fix linter by properly adding the feature gates everywhere it needs to be declared

Signed-off-by: Tomasz Janiszewski <[email protected]>
@k8s-ci-robot k8s-ci-robot added size/M Denotes a PR that changes 30-99 lines, ignoring generated files. and removed size/S Denotes a PR that changes 10-29 lines, ignoring generated files. labels Jun 10, 2025
@k8s-ci-robot
Copy link
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: janisz
Once this PR has been reviewed and has the lgtm label, please assign liggitt for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@liggitt
Copy link
Member

liggitt commented Jun 10, 2025

/hold

Is this fixing a real or theoretical issue? A remote system that is vulnerable to non-utf8 characters presented in authentication headers by untrusted users doesn't seem like Kubernetes' issue to protect against. I'm not convinced restricting the character set of the password is a reasonable thing to do.

@k8s-ci-robot k8s-ci-robot added the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Jun 10, 2025
@janisz
Copy link
Author

janisz commented Jun 10, 2025

@liggitt Good point! I do not have any exploit for this so it's a theoretical issue although since all other strings that k8s operates on are UTF-8 (validated) this can cause problems (e.g. stackrox/stackrox#15270). HTTP does not specify encoding (https://stackoverflow.com/a/703341/1387612) so in theory it may work with any bytes but I guess in most cases it will be a configuration error not a planned behaviour.

CVE Library/Language Description
CVE-2010-3870 PHP Malformed UTF-8 bypassing filters
CVE-2015-2059 libin Out-of-bounds read on invalid UTF-8
CVE-2016-4303 cJSON Buffer overflow via malformed JSON string
CVE-2009-3560 Expat Crash from malformed UTF-8 in XML parsing
CVE-2020-36317 Rust Non-UTF-8 retention breaks safety
CVE-2024-6197 libcurl Stack corruption on invalid ASN.1 string

@SergeyKanzhelev
Copy link
Member

We do not have a lot of places where the non UTF-8 string will be accepted by k8s. This seems to be one of the few places. I think it is not a big deal to limit this to avoid any possible issues with handling extra characters.

If we are not limiting the character set, I think it may be a good thing to test this end-to-end with some really nasty characters.

@stlaz stlaz moved this from Needs Triage to In Review in SIG Auth Jun 23, 2025
@janisz janisz requested a review from stlaz June 27, 2025 09:21
@k8s-ci-robot
Copy link
Contributor

@janisz: The following test failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
pull-kubernetes-verify fe22da9 link true /test pull-kubernetes-verify

Full PR test history. Your PR dashboard. Please help us cut down on flakes by linking to an open issue when you hit one in your PR.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

@k8s-ci-robot k8s-ci-robot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Jun 28, 2025
@k8s-ci-robot
Copy link
Contributor

PR needs rebase.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. kind/bug Categorizes issue or PR as related to a bug. needs-priority Indicates a PR lacks a `priority/foo` label and requires one. needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. needs-triage Indicates an issue or PR lacks a `triage/foo` label and requires one. ok-to-test Indicates a non-member PR verified by an org member that is safe to test. release-note Denotes a PR that will be considered when it comes time to generate release notes. sig/auth Categorizes an issue or PR as relevant to SIG Auth. sig/node Categorizes an issue or PR as relevant to SIG Node. size/M Denotes a PR that changes 30-99 lines, ignoring generated files.
Projects
Status: In Review
Development

Successfully merging this pull request may close these issues.

docker credential JSON: validate non UTF-8 characters
6 participants