Skip to content

fix: send the GREASE extension once in chrome100–116 and ios18 - #577

Open
jackc625 wants to merge 1 commit into
apify:masterfrom
jackc625:fix/duplicate-grease-extension
Open

jackc625 wants to merge 1 commit into
apify:masterfrom
jackc625:fix/duplicate-grease-extension

Conversation

@jackc625

Copy link
Copy Markdown
Contributor

Fixes #575.

chrome_100 (shared by chrome101–116) and ios_18 listed ExtensionType::Grease twice in extension_order. The rustls fork has one GREASE extension type (0xbaba), so it went out twice and BoringSSL servers rejected the handshake. This drops the second one and adds a test that builds every profile's ClientHello and checks that no extension type repeats.

With the fix, these profiles connect to Google, Cloudflare and Let's Encrypt again. JA3 and JA4 are unchanged; only peetprint changes, since the ClientHello now has one GREASE extension instead of two.

These profiles listed `ExtensionType::Grease` twice in `extension_order`.
rustls has a single GREASE extension type (0xbaba), so the ClientHello
carried it twice. TLS 1.3 forbids repeated extensions, and BoringSSL-based
servers (Google, Cloudflare, Let's Encrypt) rejected the handshake with
`decode_error`. JA3 and JA4 are unchanged, since both ignore GREASE.

Adds a test that builds every profile's ClientHello and checks that no
extension type appears twice.

Fixes apify#575

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-16T15:31:40.821566Z 92e30be PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

chrome100–chrome116 and ios18 fail TLS handshakes with Google, Cloudflare and Let's Encrypt

2 participants