BAD SKY.NET

padding

padding adds filler bytes to keep the ClientHello at a size that old middleboxes handle. Few current clients send it.

TLS extensionCode 0x0015 (21)

What it is

padding (extension 21) is defined in RFC 7685. It carries nothing but zero bytes, added to change the size of the ClientHello.

It was created as a workaround for at least one TLS implementation that hung on ClientHello records between 256 and 511 bytes long. Clients whose ClientHello landed in that range padded it up to at least 512 bytes so that these devices would not break the handshake.

Modern ClientHello messages are much larger, mainly because of post-quantum key shares and Encrypted Client Hello, so they are well past the problem range and padding is rarely needed. Some TLS libraries still add it whenever their ClientHello would otherwise fall in the affected size range.

Because it carries only zeros, the extension has no effect on security.

Who sends it

Chrome 153 (macOS) browser Not sent
curl_cffi (impersonate chrome) Not sent
curl-impersonate chrome116 Sent at position 16
curl-impersonate ff117 Sent at position 15
curl 8.7 (macOS) Not sent
curl 7.88 (Debian 12) Sent at position 12
Python requests Not sent
Python httpx Not sent
Python httpx (HTTP/2) Not sent
Go net/http Not sent
Node.js fetch Not sent
PHP Guzzle Not sent

Measured on 2026-10-25 against our own test server: sent by 3 of 12 clients. Position counts from 1 and ignores GREASE values.

Why it matters for fingerprinting

In our measurements only Debian curl and both curl-impersonate profiles send it. Chrome 153, curl_cffi, Python requests, httpx, Go net/http, Node.js fetch and Guzzle do not. An impersonation profile that still sends padding while claiming a current Chrome therefore looks outdated.

Check whether your client sends it

Open the test from your browser, or call it from your script, and look for padding in the TLS details.

Run the TLS fingerprint test

References

Related