Skip to content

feat: add chrome155, chrome156 and chrome157 browser fingerprints - #616

Open
jackc625 wants to merge 6 commits into
apify:masterfrom
jackc625:feat/chrome155-156
Open

jackc625 wants to merge 6 commits into
apify:masterfrom
jackc625:feat/chrome155-156

Conversation

@jackc625

Copy link
Copy Markdown
Contributor

Fixes #588.

Adds chrome155, chrome156 and chrome157 fingerprints (Rust, Node and Python), using the Trust Anchor IDs extension, signature GREASE and GREASE extensions from apify/rustls#27 (rev bumped to its merge commit). They advertise only the 13 roots from Chrome's trust anchor list (all in the Mozilla set impit trusts), not Chrome's intermediates, so a server can't pick a chain impit can't verify. JA4 matches real Chrome 155–157.

As you suggested in #588, chrome151 now also sends the empty 0xca34 and Chrome's two GREASE extensions, so its JA4 changes from t13d1516h2_8daaf6152771_806a8c22fdea to t13d1517h2_8daaf6152771_cb7bf5808d99.

jackc625 and others added 6 commits November 11, 2026 09:05
Since Chrome 152, every ClientHello carries the Trust Anchor IDs extension
(0xca34) and a GREASE value first in signature_algorithms. chrome155 is
chrome_151 plus those two, with 155 headers (accept gains image/jxl). It
lists only the 13 roots from Chrome's trust anchor list, not Chrome's
intermediates, so a server can't pick a chain impit can't verify.

This adds ExtensionType::TrustAnchors, SignatureAlgorithm::Grease and
TlsExtensions::with_trust_anchors, and a test that chrome155's JA4_r equals
real Chrome 155's (155.0.8059.80, Windows 11). The ClientHello parser it
shares with the Firefox tests moves to database.rs.

Needs the apify/rustls change that adds both (apify/rustls#27); it doesn't
build against the pinned rev until a later commit bumps it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
chrome151 and chrome155 now send Chrome's two GREASE extensions, an
empty one first and a 1-byte one last, through the new
`TlsExtensions::with_grease_first_and_last` opt-in. chrome151 also
gets the empty `trust_anchors` (0xca34) that Chrome for Testing 151
sends with the field-trial testing config. chrome151's JA4 is now
t13d1517h2_8daaf6152771_cb7bf5808d99.

Needs apify/rustls#27.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
chrome156 is chrome155 with Chrome 156's headers: sec-ch-ua and the user
agent carry 156, and sec-ch-ua has a new GREASE brand and brand order.
Consumer Chrome 156.0.8078.48 (Windows 11) sends the same TLS and HTTP/2
as 155, including the same Trust Anchor IDs list, so the JA4_r test
checks it against Chrome 155's value. Both were checked on tls.peet.ws
and in a decrypted Wireshark capture.

Needs apify/rustls#27; it doesn't build against the pinned rev until a
later commit bumps it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adds `Browser.Chrome155` / `Browser.Chrome156` to impit-node (with
`index.d.ts` regenerated by `pnpm build:debug`) and `'chrome155'` /
`'chrome156'` to impit-python.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Points the rustls patch at 2b5779e2, the squash merge of
apify/rustls#27. Only the rustls source line in Cargo.lock changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
chrome157 is chrome156 with Chrome 157's headers: sec-ch-ua and the user
agent carry 157, and sec-ch-ua has a new GREASE brand and brand order.
Consumer Chrome 157.0.8103.51 (Windows 11) sends the same TLS and HTTP/2
as 156, including the same Trust Anchor IDs list, so the JA4_r test
checks it against Chrome 155's value. Checked on tls.peet.ws and in a
decrypted Wireshark capture.

Also adds chrome157 to the Node and Python bindings.

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

Copy link
Copy Markdown
Codex Review Summary: ❌ Failed

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

Review Status Commit Review trigger
📝 Code Review ❌ Failed 2026-11-11T15:11:41.792250Z
We couldn’t complete this review. Comment @codex review to try again.
5d4e95c 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.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

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.

chrome155/chrome156 profiles need Chrome's Trust Anchor IDs extension

1 participant