CVE-2019-16276
📋 TL;DR
CVE-2019-16276 is an HTTP request smuggling vulnerability in Go's net/http package that allows attackers to bypass security controls and potentially poison web caches or hijack user sessions. It affects applications built with Go versions before 1.12.10 and 1.13.x before 1.13.1 that handle HTTP traffic. This vulnerability enables attackers to smuggle malicious requests through front-end proxies to back-end servers.
💻 Affected Systems
- Go programming language
- Applications built with Go
📦 What is this software?
Fedora by Fedoraproject
Fedora by Fedoraproject
Fedora by Fedoraproject
Go by Golang
Go by Golang
Leap by Opensuse
Leap by Opensuse
⚠️ Risk & Real-World Impact
Worst Case
Attackers could poison web caches, hijack user sessions, bypass authentication, or perform cross-site scripting attacks against other users.
Likely Case
Cache poisoning leading to credential theft or malware distribution through compromised cached content.
If Mitigated
Limited impact with proper input validation and request sanitization at both proxy and application layers.
🎯 Exploit Status
Exploitation requires understanding of HTTP request smuggling techniques and the ability to send crafted HTTP requests to vulnerable servers.
🛠️ Fix & Mitigation
✅ Official Fix
Patch Version: Go 1.12.10 or Go 1.13.1
Vendor Advisory: https://golang.org/doc/devel/release#go1.12.10
Restart Required: Yes
Instructions:
1. Update Go installation to version 1.12.10 or 1.13.1 using your package manager or from golang.org. 2. Recompile all Go applications with the updated version. 3. Restart all Go-based services and applications.
🔧 Temporary Workarounds
Use HTTP/2 exclusively
allConfigure servers to only accept HTTP/2 connections, which is not vulnerable to this specific request smuggling attack.
Configure your HTTP server to disable HTTP/1.1 and only accept HTTP/2 connections
Deploy WAF with request validation
allImplement a web application firewall that validates and sanitizes HTTP requests before they reach the Go application.
🧯 If You Can't Patch
- Deploy reverse proxies with strict HTTP request validation and normalization
- Implement additional request sanitization middleware in your Go applications
🔍 How to Verify
Check if Vulnerable:
Check Go version with 'go version' command. If output shows version earlier than 1.12.10 or 1.13.x earlier than 1.13.1, the system is vulnerable.
Check Version:
go version
Verify Fix Applied:
Run 'go version' and confirm output shows 1.12.10 or later, or 1.13.1 or later. Test HTTP request handling with known smuggling test vectors.
📡 Detection & Monitoring
Log Indicators:
- Unusual HTTP request patterns
- Multiple requests with same connection
- Malformed HTTP headers in logs
- Unexpected 400/413 responses
Network Indicators:
- HTTP requests with unusual Content-Length or Transfer-Encoding headers
- Requests that appear to contain multiple HTTP messages
SIEM Query:
http.method=* AND (http.content_length:* OR http.transfer_encoding:*) AND (http.status_code=400 OR http.status_code=413)
🔗 References
- http://lists.opensuse.org/opensuse-security-announce/2019-11/msg00043.html
- http://lists.opensuse.org/opensuse-security-announce/2019-11/msg00044.html
- https://access.redhat.com/errata/RHSA-2020:0101
- https://access.redhat.com/errata/RHSA-2020:0329
- https://access.redhat.com/errata/RHSA-2020:0652
- https://github.com/golang/go/issues/34540
- https://groups.google.com/forum/#%21msg/golang-announce/cszieYyuL9Q/g4Z7pKaqAgAJ
- https://lists.debian.org/debian-lts-announce/2021/03/msg00014.html
- https://lists.debian.org/debian-lts-announce/2021/03/msg00015.html
- https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/LULL72EUUKIY4NWDZVJVN2LIB4MXHS5P/
- https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/O7GMJ3VXF5RXK2C7CL66KJ6XOOTOL5BJ/
- https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/Q5MD2F7ATWSTB45ZJIPJHBAAHVRGRAKG/
- https://security.netapp.com/advisory/ntap-20191122-0004/
- http://lists.opensuse.org/opensuse-security-announce/2019-11/msg00043.html
- http://lists.opensuse.org/opensuse-security-announce/2019-11/msg00044.html
- https://access.redhat.com/errata/RHSA-2020:0101
- https://access.redhat.com/errata/RHSA-2020:0329
- https://access.redhat.com/errata/RHSA-2020:0652
- https://github.com/golang/go/issues/34540
- https://groups.google.com/forum/#%21msg/golang-announce/cszieYyuL9Q/g4Z7pKaqAgAJ
- https://lists.debian.org/debian-lts-announce/2021/03/msg00014.html
- https://lists.debian.org/debian-lts-announce/2021/03/msg00015.html
- https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/LULL72EUUKIY4NWDZVJVN2LIB4MXHS5P/
- https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/O7GMJ3VXF5RXK2C7CL66KJ6XOOTOL5BJ/
- https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/Q5MD2F7ATWSTB45ZJIPJHBAAHVRGRAKG/
- https://security.netapp.com/advisory/ntap-20191122-0004/