CVE-2024-24783 Overview
CVE-2024-24783 is a Null Pointer Dereference vulnerability affecting the Go programming language's crypto/tls package. The vulnerability causes a panic when verifying a certificate chain that contains a certificate with an unknown public key algorithm. This flaw impacts all crypto/tls clients and servers configured with Config.ClientAuth set to VerifyClientCertIfGiven or RequireAndVerifyClientCert.
Critical Impact
Attackers can cause TLS clients and properly configured TLS servers to crash by presenting a maliciously crafted certificate chain with an unknown public key algorithm, leading to denial of service conditions.
Affected Products
- Go programming language crypto/tls package
- Applications using Go TLS clients
- Go TLS servers with client certificate verification enabled (VerifyClientCertIfGiven or RequireAndVerifyClientCert)
Discovery Timeline
- 2024-03-05 - CVE-2024-24783 published to NVD
- 2024-11-21 - Last updated in NVD database
Technical Details for CVE-2024-24783
Vulnerability Analysis
This vulnerability is classified under CWE-476 (NULL Pointer Dereference). The core issue lies in the Certificate.Verify function within Go's crypto/tls package. When processing a certificate chain, if the code encounters a certificate containing a public key algorithm that is not recognized or supported, the verification routine fails to handle this edge case gracefully and instead triggers a panic.
The attack requires network access but involves high complexity, as the attacker must craft a certificate chain with specific characteristics and successfully present it during the TLS handshake process. While the vulnerability does not impact confidentiality or availability of data directly, it compromises the integrity of TLS connections by allowing attackers to disrupt the certificate verification process.
Root Cause
The root cause is improper handling of unknown or unsupported public key algorithms during certificate chain verification. The Certificate.Verify function does not implement adequate error handling when it encounters a certificate with an unrecognized public key algorithm, resulting in a null pointer dereference that causes the application to panic and crash.
Attack Vector
The attack vector is network-based. An attacker can exploit this vulnerability by:
- Crafting a certificate chain that includes a certificate with an unknown or unsupported public key algorithm
- Presenting this malicious certificate during a TLS handshake
- When the target Go application attempts to verify the certificate chain, the Certificate.Verify function panics
For TLS clients, this affects all connections where certificate verification occurs. For TLS servers, exploitation requires the server to be configured to verify client certificates (using VerifyClientCertIfGiven or RequireAndVerifyClientCert). The default TLS server behavior does not verify client certificates, limiting server-side exposure.
The vulnerability manifests in the certificate verification logic when processing unknown public key algorithms. For detailed technical information, refer to the Go.dev Issue Tracker and the Go.dev Vulnerability Report.
Detection Methods for CVE-2024-24783
Indicators of Compromise
- Unexpected application crashes or panics in Go applications during TLS handshakes
- Log entries indicating panics in crypto/tls or certificate verification routines
- Abnormal TLS connection failures with stack traces referencing Certificate.Verify
Detection Strategies
- Monitor application logs for panic messages originating from Go's crypto/tls package
- Implement crash monitoring and alerting for Go-based services handling TLS connections
- Review TLS handshake logs for unusual certificate chains or malformed certificates
- Deploy network monitoring to detect certificates with non-standard public key algorithms
Monitoring Recommendations
- Enable verbose logging for TLS operations in production Go applications
- Set up automated alerts for application panics and unexpected restarts
- Monitor service availability metrics for Go applications that process TLS traffic
- Implement circuit breakers to prevent cascading failures from repeated exploitation attempts
How to Mitigate CVE-2024-24783
Immediate Actions Required
- Update Go installations to patched versions that address this vulnerability
- Review and update all Go applications that utilize the crypto/tls package
- For TLS servers, evaluate whether client certificate verification is required; if not, ensure Config.ClientAuth is set to the default (no verification)
- Implement panic recovery handlers in critical Go applications as a defense-in-depth measure
Patch Information
The Go team has released security patches to address this vulnerability. Review the Go.dev Code Review for patch details and the Golang Announce Post for official release information. Additionally, NetApp has published a Security Advisory for affected products.
Organizations using Go should update to the latest patched versions and rebuild all applications that depend on the crypto/tls package.
Workarounds
- For TLS servers that do not require client certificate authentication, ensure Config.ClientAuth is not set to VerifyClientCertIfGiven or RequireAndVerifyClientCert
- Implement application-level recovery handlers to gracefully handle panics and prevent complete service disruption
- Use a reverse proxy or load balancer with TLS termination in front of vulnerable Go applications
- Consider implementing certificate pre-validation at network boundaries to filter malformed certificates
# Check Go version and update to patched release
go version
# Update Go to latest patched version using your package manager or download from golang.org
# After updating, rebuild affected applications
go build -o myapp ./cmd/myapp
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

