CVE-2023-1428

7.5 HIGH

📋 TL;DR

This vulnerability in gRPC's C++ implementation causes an abort() call when specific malformed HTTP/2 headers are sent, leading to denial of service. Any system using vulnerable gRPC versions with HTTP/2 enabled is affected. The vulnerability requires sending specific headers that push total header size past 8KB.

💻 Affected Systems

Products:
  • gRPC C++ implementation
Versions: All versions before git commit 2485fa94bd8a723e5c977d55a3ce10b301b437f8 and v1.53
Operating Systems: All operating systems running gRPC C++
Default Config Vulnerable: ⚠️ Yes
Notes: Only affects HTTP/2 implementations. Requires gRPC to be configured to use HTTP/2 transport.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Complete service disruption through denial of service, potentially affecting multiple dependent services in microservices architectures.

🟠

Likely Case

Service crashes and restarts, causing temporary unavailability and potential cascading failures in dependent systems.

🟢

If Mitigated

Minimal impact with proper monitoring and automatic restart mechanisms in place.

🌐 Internet-Facing: HIGH - Attackers can remotely trigger the abort() without authentication via HTTP/2 requests.
🏢 Internal Only: MEDIUM - Internal attackers or compromised internal systems could exploit this, but requires network access to gRPC endpoints.

🎯 Exploit Status

Public PoC: ✅ No
Weaponized: LIKELY
Unauthenticated Exploit: ⚠️ Yes
Complexity: LOW

Exploitation is straightforward - sending specific malformed HTTP/2 headers triggers the abort(). No authentication required.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: v1.53 and above, or after git commit 2485fa94bd8a723e5c977d55a3ce10b301b437f8

Vendor Advisory: https://github.com/grpc/grpc/commit/2485fa94bd8a723e5c977d55a3ce10b301b437f8

Restart Required: Yes

Instructions:

1. Update gRPC to version 1.53 or later. 2. Rebuild and redeploy applications using gRPC. 3. Restart affected services.

🔧 Temporary Workarounds

HTTP/2 Header Filtering

all

Implement network filtering or WAF rules to block malformed headers before they reach gRPC services.

Rate Limiting

all

Implement rate limiting on HTTP/2 connections to reduce impact of potential DoS attacks.

🧯 If You Can't Patch

  • Implement network-level filtering to block requests containing the specific malformed headers (te: x where x != trailers, :scheme: x where x != http/https, grpclb_client_stats: any value)
  • Deploy gRPC services behind reverse proxies with header validation and size limits

🔍 How to Verify

Check if Vulnerable:

Check gRPC version: if using C++ implementation and version < 1.53, system is vulnerable. Also check if HTTP/2 is enabled.

Check Version:

Check application dependencies or build configuration for gRPC version. For compiled applications, may require checking build manifests or package files.

Verify Fix Applied:

Verify gRPC version is >= 1.53 or includes commit 2485fa94bd8a723e5c977d55a3ce10b301b437f8. Test with malformed headers to ensure no abort() occurs.

📡 Detection & Monitoring

Log Indicators:

  • Unexpected service crashes/restarts
  • abort() calls in application logs
  • HTTP/2 connection resets

Network Indicators:

  • HTTP/2 requests with malformed headers matching the patterns
  • Requests causing total header size > 8KB

SIEM Query:

search 'abort()' OR 'crash' AND 'grpc' OR 'http2' in application logs

🔗 References

📤 Share & Export