VYPR
Moderate severityNVD Advisory· Published Sep 1, 2022· Updated Apr 23, 2025

Denial of service in Helm

CVE-2022-36055

Description

Helm is a tool for managing Charts. Charts are packages of pre-configured Kubernetes resources. Fuzz testing, provided by the CNCF, identified input to functions in the _strvals_ package that can cause an out of memory panic. The _strvals_ package contains a parser that turns strings in to Go structures. The _strvals_ package converts these strings into structures Go can work with. Some string inputs can cause array data structures to be created causing an out of memory panic. Applications that use the _strvals_ package in the Helm SDK to parse user supplied input can suffer a Denial of Service when that input causes a panic that cannot be recovered from. The Helm Client will panic with input to --set, --set-string, and other value setting flags that causes an out of memory panic. Helm is not a long running service so the panic will not affect future uses of the Helm client. This issue has been resolved in 3.9.4. SDK users can validate strings supplied by users won't create large arrays causing significant memory usage before passing them to the _strvals_ functions.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
helm.sh/helm/v3Go
< 3.9.43.9.4

Affected products

1

Patches

1
10466e3e179c

Merge pull request from GHSA-7hfp-qfw3-5jxh

https://github.com/helm/helmMatt FarinaAug 24, 2022via ghsa
2 files changed · +15 0
  • pkg/strvals/parser.go+7 0 modified
    @@ -29,6 +29,10 @@ import (
     // ErrNotList indicates that a non-list was treated as a list.
     var ErrNotList = errors.New("not a list")
     
    +// MaxIndex is the maximum index that will be allowed by setIndex.
    +// The default value 65536 = 1024 * 64
    +var MaxIndex = 65536
    +
     // ToYAML takes a string of arguments and converts to a YAML document.
     func ToYAML(s string) (string, error) {
     	m, err := Parse(s)
    @@ -249,6 +253,9 @@ func setIndex(list []interface{}, index int, val interface{}) (l2 []interface{},
     	if index < 0 {
     		return list, fmt.Errorf("negative %d index not allowed", index)
     	}
    +	if index > MaxIndex {
    +		return list, fmt.Errorf("index of %d is greater than maximum supported index of %d", index, MaxIndex)
    +	}
     	if len(list) <= index {
     		newlist := make([]interface{}, index+1)
     		copy(newlist, list)
    
  • pkg/strvals/parser_test.go+8 0 modified
    @@ -62,6 +62,14 @@ func TestSetIndex(t *testing.T) {
     			val:     4,
     			err:     true,
     		},
    +		{
    +			name:    "large",
    +			initial: []interface{}{0, 1, 2, 3, 4, 5},
    +			expect:  []interface{}{0, 1, 2, 3, 4, 5},
    +			add:     MaxIndex + 1,
    +			val:     4,
    +			err:     true,
    +		},
     	}
     
     	for _, tt := range tests {
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

6

News mentions

0

No linked articles in our index yet.