<p>kubeadm ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΎΠΉ ΠΈΡ… удалСния</p>

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 11 сСнт. 2020  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: kubernetes/kubeadm

КакиС ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова Π²Ρ‹ искали Π² выпусках kubeadm ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Π°Ρ‚ΡŒ этот запрос?

token , error

Π­Ρ‚ΠΎ ΠžΠ’Π§Π•Π’ ΠžΠ‘ ΠžΠ¨Π˜Π‘ΠšΠ• ΠΈΠ»ΠΈ Π—ΠΠŸΠ ΠžΠ‘ О Π€Π£ΠΠšΠ¦Π˜ΠžΠΠ˜Π ΠžΠ’ΠΠΠ˜Π˜?

_Π‘Π•Π—ΠžΠŸΠΠ‘ΠΠžΠ‘Π’Π¬_ ΠžΠ’Π§Π•Π’

РСзюмС:

kubeadm Команда delete ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π»ΠΈΠ±ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚ΠΎΠΊΠ΅Π½Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Ρ‚ΠΎΠΊΠ΅Π½. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ Π²Π²ΠΎΠ΄ просто ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½Ρ‹ΠΌ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ, kubeadm рСгистрируСт Π²Π²ΠΎΠ΄ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ klog . Если ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π½Π΅ удастся, Ρ‚ΠΎΠΊΠ΅Π½ останСтся Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. Π—Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ доступ ΠΊ ΠΆΡƒΡ€Π½Π°Π»Π°ΠΌ, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для выполнСния дСйствий, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΎΠΊΠ΅Π½Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ созданиС кластСра ΠΈΠ»ΠΈ присоСдинСниС ΡƒΠ·Π»ΠΎΠ² ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ кластСру.

ВСрсия Kubernetes:

Уязвимый ΠΊΠΎΠ΄ присутствуСт Π² kubernetes 1.19. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π°Ρ строка, содСрТащая Π²Ρ‹Π·ΠΎΠ² klog послСдний Ρ€Π°Π· Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ 24 ΠΌΠ°Ρ€Ρ‚Π° 2019 Π³.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ:

Уязвимый ΠΊΠΎΠ΄ находится Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ github.com/kubernetes , Π² Ρ„Π°ΠΉΠ»Π΅ kubernetes/cmd/kubeadm/app/cmd/token.go , Π² строкС 423. Π’ΠΎΡ‚ вся функция:

// RunDeleteTokens removes a bootstrap tokens from the server.
func RunDeleteTokens(out io.Writer, client clientset.Interface, tokenIDsOrTokens []string) error {
    for _, tokenIDOrToken := range tokenIDsOrTokens {
        // Assume this is a token id and try to parse it
        tokenID := tokenIDOrToken
        klog.V(1).Infof("[token] parsing token %q", tokenIDOrToken) // POTENTIAL LEAK HERE
        if !bootstraputil.IsValidBootstrapTokenID(tokenIDOrToken) {
            // Okay, the full token with both id and secret was probably passed. Parse it and extract the ID only
            bts, err := kubeadmapiv1beta2.NewBootstrapTokenString(tokenIDOrToken)
            if err != nil {
                return errors.Errorf("given token %q didn't match pattern %q or %q",
                    tokenIDOrToken, bootstrapapi.BootstrapTokenIDPattern, bootstrapapi.BootstrapTokenIDPattern)
            }
            tokenID = bts.ID
        }

        tokenSecretName := bootstraputil.BootstrapTokenSecretName(tokenID)
        klog.V(1).Infof("[token] deleting token %q", tokenID)
        if err := client.CoreV1().Secrets(metav1.NamespaceSystem).Delete(context.TODO(), tokenSecretName, metav1.DeleteOptions{}); err != nil {
            return errors.Wrapf(err, "failed to delete bootstrap token %q", tokenID)
        }
        fmt.Fprintf(out, "bootstrap token %q deleted\n", tokenID)
    }
    return nil
}

А Π²ΠΎΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ kubeadm, которая Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ Ρ„Π°ΠΉΠ»Π΅):

    deleteCmd := &cobra.Command{
        Use:                   "delete [token-value] ...",
        DisableFlagsInUseLine: true,
        Short:                 "Delete bootstrap tokens on the server",
        Long: dedent.Dedent(`
            This command will delete a list of bootstrap tokens for you.

            The [token-value] is the full Token of the form "[a-z0-9]{6}.[a-z0-9]{16}" or the
            Token ID of the form "[a-z0-9]{6}" to delete.
        `),
        RunE: func(tokenCmd *cobra.Command, args []string) error {
            if len(args) < 1 {
                return errors.Errorf("missing subcommand; 'token delete' is missing token of form %q", bootstrapapi.BootstrapTokenIDPattern)
            }
            kubeConfigFile = cmdutil.GetKubeConfigPath(kubeConfigFile)
            client, err := getClientset(kubeConfigFile, dryRun)
            if err != nil {
                return err
            }

            return RunDeleteTokens(out, client, args)
        },
    }

ВлияниС:

Π—Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΠΉ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ· ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ², ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ kubeadm ΠΈ создания Π½ΠΎΠ²ΠΎΠ³ΠΎ кластСра ΠΈΠ»ΠΈ присоСдинСния ΡƒΠ·Π»ΠΎΠ² ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ кластСру, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для использования Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… рСсурсов. Π—Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ дСйствия с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ kubeadm , Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация:

Π― сообщил ΠΎΠ± этой уязвимости Π² HackerOne, ΠΈ ΠΎΠ½ΠΈ сообщили ΠΌΠ½Π΅, Ρ‡Ρ‚ΠΎ, исходя ΠΈΠ· высокой слоТности ΠΈ Π½ΠΈΠ·ΠΊΠΎΠΉ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΡΡ‚ΠΈ Π°Ρ‚Π°ΠΊΠΈ, ΠΎΠ½ΠΈ Π΄ΡƒΠΌΠ°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ± этом ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΈ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎ.

Π― ΠΎΡ‚ΠΊΡ€Ρ‹Π» PR Π½Π° kubernetes, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ исправлСниС: https://github.com/kubernetes/kubernetes/pull/94727

aresecurity kincleanup prioritbacklog

ВсС 3 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Команда удалСния kubeadm ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π»ΠΈΠ±ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚ΠΎΠΊΠ΅Π½Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Ρ‚ΠΎΠΊΠ΅Π½. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ Π²Π²ΠΎΠ΄ просто ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½Ρ‹ΠΌ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ, kubeadm рСгистрируСт Π²Π²ΠΎΠ΄ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ klog. Если ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π½Π΅ удастся, Ρ‚ΠΎΠΊΠ΅Π½ останСтся Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. Π—Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ доступ ΠΊ ΠΆΡƒΡ€Π½Π°Π»Π°ΠΌ, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для выполнСния дСйствий, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΎΠΊΠ΅Π½Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ созданиС кластСра ΠΈΠ»ΠΈ присоСдинСниС ΡƒΠ·Π»ΠΎΠ² ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ кластСру.

ΠΏΡ€ΠΈΠ²Π΅Ρ‚, ΠΈ спасибо, Ρ‡Ρ‚ΠΎ зарСгистрировали ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΡƒΡ€Π½Π°Π»Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ, ΠΈ я ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΆΡƒΡ€Π½Π°Π»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ΄ ΠΊΠΎΡ€Π½Π΅Π²Ρ‹ΠΌ доступом, Π»ΠΈΠ±ΠΎ прСдоставлСны ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅, которая ΡƒΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ высокий доступ, Ρ‡Π΅ΠΌ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

Ρ‚Π°ΠΊΠΆΠ΅:

  • --v=>1 Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π²ΠΎ врСмя выполнСния kubeadm token delete Ссли Ρ‚ΠΎΠΊΠ΅Π½ ΠΈΠΌΠ΅Π΅Ρ‚ допустимый Ρ„ΠΎΡ€ΠΌΠ°Ρ‚
  • Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ ΠΈΡΡ‚Π΅ΠΊΠ°ΡŽΡ‚ Ρ‡Π΅Ρ€Π΅Π· 24 часа ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ PR Π² основном Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅, Π½ΠΎ я Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ слСдуСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ пСрСнос Π½Π° Π±ΠΎΠ»Π΅Π΅ старыС вСрсии (<1.20) ΠΈΠ·-Π·Π° слоТности Ρ‚Π°ΠΊΠΎΠΉ Π°Ρ‚Π°ΠΊΠΈ.

Π― согласСн с @ neolit123, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅
WRT для исправлСния, я +1, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ TokenID ΠΈΠ· ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ²

Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΡ€ΠΈ объСдинСнии https://github.com/kubernetes/kubernetes/pull/94727 .
Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π½ΠΎΡΡ‚ΡŒ

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ

Π‘ΠΌΠ΅ΠΆΠ½Ρ‹Π΅ вопросы

pires picture pires  Β·  64ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

lavender2020 picture lavender2020  Β·  43ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

fanux picture fanux  Β·  48ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

lukaszgryglicki picture lukaszgryglicki  Β·  65ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

aravind-murthy picture aravind-murthy  Β·  44ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ