Skip to content

The QUIC Problem

As I already mentioned a few times, most of network security today comes down to one simple rule: you can’t protect what you can’t see. Firewalls, DLP, IPS, all of it depends on somebody being able to look into the payload. And even that part isn’t fully solved already – I wrote before about how decryption on classic TCP/TLS traffic comes with its own baggage, certificate pinning breaks apps, performance, and I’ve seen decryption sign-off take months while the network side was ready in a week. Most organizations end up decrypting only part of their traffic or sometimes even nothing.

QUIC or HTTP/3 adoption keeps growing year over year, and it’s built on a transport most of the security stack still can’t touch at all.

With classic HTTPS over TCP, decryption is a well understood. The firewall sits in the middle, terminates the client’s TLS session, opens its own TLS session to the server, and re-encrypts everything in between. It works because TCP and TLS are two separate, well documented layers stacked on top of each other, and the handshake itself have enough metadata – SNI, cipher suite, certificate.

QUIC doesn’t give you that. It runs over UDP, and it doesn’t sit “on top” of TLS – it embeds the TLS 1.3 handshake directly inside its own transport. Almost everything past the first packet is encrypted, including packet numbers and most of the header fields security tools normally use to track a connection. What’s left in clear text is basically the connection ID and a couple of flags. You can see a QUIC connection exists. You can’t really see what’s happening inside of it, and building a transparent interception proxy for QUIC means reimplementing a full QUIC stack on both ends. Some vendors are experimenting with it already – Cisco added experimental QUIC decryption support to Secure Firewall.

Block QUIC

If you can’t decrypt QUIC, the only way to get visibility back is forcing the client off it entirely, back onto a transport you can actually decrypt. That’s why Palo Alto, Fortinet and basically everyone else in this space land on the exact same move: block QUIC and force fallback to plain TLS over TCP, where the existing decryption policy still applies.

Fallback

Blocking QUIC on the firewall should force the browser back onto TCP, and most of the time it does. But not always, and the reason sits in how HTTP/3 negotiation actually works. A server offering HTTP/3, and the browser caches that preference for a fixed period rather than checking it fresh on every request. Normally, if QUIC then fails, the browser retries over TCP and moves on quietly. But because the preference sits in cache instead of being reevaluated, I’ve seen it many times, on Edge – keep retrying QUIC on a domain that just failed a moment earlier, instead of switching to TLS. From the user side it just looks like “this one service is broken today” – tab hangs, page won’t load –  so it usually lands as a support ticket.

So where does this leave us? Right now, with HTTP/3 adoption still climbing and most vendors nowhere near proper QUIC decryption, blocking is really the only option . TLS 1.3 itself was painful for inspection tools when it landed, now it’s just the standard everybody built around, so I’d expect the same to eventually happen with QUIC.

And there’s one more reason not to treat this as a future problem. C2 frameworks added QUIC, as example Kaspersky documented QUIC RAT running its command and control traffic through HTTP/3. The blind spot isn’t theoretical. Threat actors already using it.

4 Comment on this post

  1. I understand the recommendation to block QUIC in environments where payload inspection is required but the platform does not support it for HTTP/3. However, I would add a point about visibility without full decryption.

    QUIC is not completely opaque to passive monitoring. For Initial packets, keys can be derived from publicly available information, allowing an observer to remove header protection and decrypt the payload, as described in RFC 9001 §5.2 and §5.4. RFC 9312 §3.4.1 even describes extracting SNI this way, subject to the limitations introduced by ECH. This does not reveal the keys used to protect subsequent application traffic.

    Client application fingerprinting is also possible and can help distinguish client stacks and browser families. David McGrew provides a practical example using mercury in “QUIC Fixes for Network Security Monitoring” (FloCon 2023).

    Separately, Smith, Mittal, and Perrig demonstrated website identification from encrypted traffic patterns in “Website Fingerprinting in the Age of QUIC” (PoPETs 2021). Interestingly, QUIC was not inherently more difficult to fingerprint than TCP, but classifiers trained on TCP traffic did not generalize well to QUIC.

    Of course, none of this replaces payload inspection for DLP/IPS or invalidates the need to block QUIC in the scenario described. It does, however, show that there is considerable room for analysis and detection between full decryption and a complete lack of visibility.

    https://www.rfc-editor.org/rfc/rfc9312.html#section-3.4.1
    https://www.sei.cmu.edu/library/quic-fixes-for-network-security-monitoring/
    https://www.petsymposium.org/popets/2021/popets-2021-0017.php

Join the conversation

Your email address will not be published. Required fields are marked *