CVE-2020-15586: net/http Go package vulnerable to 'Expect: 100-continue' header panic

stdlib Updated 02 Oct 2025

Summary

17/02/2022
Yes i
Unrated
Not published

CVE-2020-15586: Data race and crash in net/http. Affects stdlib across 2 version ranges.

< 1.13.13 >= 1.14.0-0, < 1.14.5

Fixed in 1.13.13 or 1.14.5, depending on the release line you run. How to fix ↓

Also tracked for

The same CVE-2020-15586 is tracked separately for each ecosystem and vendor. Its fix information is the same; the package and affected versions differ.

Free scan

Check if this vulnerability affects your application

Upload a manifest or SBOM and we'll show whether you're affected, plus every other risky package in the same scan.

Check my app free

No signup required · Results in about 60 seconds

Sponsored MarkAI Find prospects already talking about the problem you solve AI watches the communities your customers use to find qualified prospects, then alerts you when a conversation is worth joining. See MarkAI

Background

The net/http package in Go provides a set of functions and types for building HTTP servers and clients. It is a fundamental package used in many Go applications for handling HTTP requests and responses. However, a vulnerability has been discovered in the package that can lead to a panic when clients send an 'Expect: 100-continue' header while the server is simultaneously reading from the request body and writing a response.

Vulnerability Detail

The vulnerability arises due to a panic condition triggered by the 'Expect: 100-continue' header. When this header is received, the server attempts to read from the request body while also writing a response. This concurrent operation can cause the server to panic, resulting in a crash or unexpected behavior. The impact of this vulnerability can vary depending on the application using the net/http package. In some cases, it may lead to denial of service or data corruption.

How To Fix

Latest published version: go1.25.5 as of 22 Oct 2026

go get stdlib@vgo1.25.5

Upgrading to it may include breaking changes; the versions below are the minimum fixed release for this vulnerability.

If you can't move to the latest

The minimum fixed version depends on the release line you run.

  • < 1.13.13 1.13.13
    go get stdlib@v1.13.13
  • >= 1.14.0-0, < 1.14.5 1.14.5
    go get stdlib@v1.14.5

Tip — Not sure which release line you're on? Vulert can find the fix for the version you are using. Scan free →

Workaround

If updating the Go version is not immediately feasible, a workaround can be implemented by disabling the 'Expect: 100-continue' header in the client requests. This can be achieved by removing or modifying the code responsible for adding the 'Expect' header in the client implementation. However, this workaround may not be suitable for all scenarios and should be carefully evaluated.

Conclusion

The net/http package in Go is vulnerable to a panic condition triggered by the 'Expect: 100-continue' header. This vulnerability can lead to crashes or unexpected behavior, potentially causing denial of service or data corruption. It is recommended to update to the fixed versions of Go or apply the provided workaround. For further assistance with vulnerability remediation, please contact DevNack.com.

See every vulnerability recorded for stdlib →

Share this vulnerability

FAQ

The impact can vary depending on the application, but it can lead to denial of service or data corruption.

Versions 1.13.0 to 1.13.12 and 1.14.0 to 1.14.4 are affected.

You can use the Vulert Playground at Vulert Scanner to check if your application is affected by this vulnerability.

Yes, updating to Go version 1.13.13 or later (for Go 1.13.x) or 1.14.5 or later (for Go 1.14.x) will fix the vulnerability.

A workaround is to disable the 'Expect: 100-continue' header in client requests, but it may not be suitable for all scenarios.

Related vulnerabilities

Recent vulnerabilities recorded for stdlib.

How To Fix

Latest published version: go1.25.5 as of 22 Oct 2026

go get stdlib@vgo1.25.5

Upgrading to it may include breaking changes; the versions below are the minimum fixed release for this vulnerability.

If you can't move to the latest

The minimum fixed version depends on the release line you run.

  • < 1.13.13 1.13.13
    go get stdlib@v1.13.13
  • >= 1.14.0-0, < 1.14.5 1.14.5
    go get stdlib@v1.14.5

Tip — Not sure which release line you're on? Vulert can find the fix for the version you are using. Scan free →

Subscribe to Vulert on Telegram
Daily digest of new CVEs, critical and high severity, affected packages and fixes — plus a weekly roundup.
Join the channel →
Help improve this record
Report an issue or send feedback