Skip to content

Preserve unknown/GREASE HTTP/2 SETTINGS entries in Akamai fingerprint output - #47

Draft
pagpeter with Copilot wants to merge 2 commits into
masterfrom
copilot/fix-http2-settings-frame
Draft

Preserve unknown/GREASE HTTP/2 SETTINGS entries in Akamai fingerprint output#47
pagpeter with Copilot wants to merge 2 commits into
masterfrom
copilot/fix-http2-settings-frame

Conversation

Copilot AI commented Jul 27, 2026

Copy link
Copy Markdown

Chrome sends a GREASE-like HTTP/2 SETTINGS entry that was being dropped from TrackMe’s Akamai fingerprint output. This made TrackMe diverge from real Chrome SETTINGS fingerprints when unknown setting IDs were present.

  • Problem

    • getSettingsFingerprint only mapped known setting names.
    • UNKNOWN_SETTING_<id> entries (including GREASE IDs) produced empty/malformed fingerprint segments.
  • Change

    • Added fallback handling for UNKNOWN_SETTING_<id> in /pkg/http/fingerprint_h2.go.
    • When a setting name is unknown but matches that pattern, the numeric <id> is parsed and emitted as the setting key in the fingerprint.
    • Invalid unknown-setting identifiers now fail closed with the existing "error" output path.
  • Targeted coverage

    • Added unit tests in /pkg/http/fingerprint_h2_test.go for:
      • preserving unknown/GREASE IDs in fingerprint serialization,
      • rejecting malformed unknown-setting identifiers.
settingID := mapping[parts[0]]
if settingID == "" && strings.HasPrefix(parts[0], "UNKNOWN_SETTING_") {
    rawID := strings.TrimPrefix(parts[0], "UNKNOWN_SETTING_")
    if _, err := strconv.ParseUint(rawID, 10, 16); err != nil {
        return "error"
    }
    settingID = rawID
}

Copilot AI changed the title [WIP] Fix missing GREASE entry in HTTP/2 SETTINGS frame Preserve unknown/GREASE HTTP/2 SETTINGS entries in Akamai fingerprint output Jul 27, 2026
Copilot AI requested a review from pagpeter July 27, 2026 19:05
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.

HTTP/2 SETTINGS frame is missing the GREASE entry real Chrome sends

2 participants