Attackers abuse GitHub's commit system to impersonate trusted developers and fabricate activity to cover their tracks. Most commit metadata is trivially spoofable, let's explore what's actually verified and what not to trust.
01 What Can You Trust? Tap or hover to inspect
This imposter commit impersonates Guillermo Rauch (CEO of Vercel). It appears in actions/checkout via cross-fork object sharing, but was never merged—the attacker spoofed his identity. Check any commit →
Date: line below.git config user.name and user.email. Anyone can set these to any value—no verification required.GIT_COMMITTER_DATE or --date.{
"sha": "70379aad1a8b40919ce8b382d3cd7d0315cde1d0",
"commit": {
"author"Spoofable IdentityFrom git config user.name and user.email. Anyone can set these to any value—no verification required.: {
"name": "Guillermo Rauch",
"email": "rauchg@gmail.com",
"date": "2026-01-09T07:42:00Z"
},
"committer"Also SpoofableSame as author—set via git config. Often identical to author, but can differ (e.g., when someone applies a patch).: {
"name": "Guillermo Rauch",
"email": "rauchg@gmail.com",
"date": "2026-01-09T07:42:00Z"
},
"message": "Fix tag handling: preserve annotations...",
"verification"Signature CheckGitHub checks for GPG/SSH signatures. verified: false means no valid signature was found—anyone could have made this commit.: {
"verified": false,
"reason": "unsigned",
"signature": null
}
},
"author"Misleading LookupGitHub matches the commit email to a registered account. This shows the linked account, not who actually made the commit. Attackers use victim emails to trigger this link.: {
"login": "rauchg",
"id": 13041,
"type": "User"
},
"committer"Same LookupSame email-to-account matching. The avatar and profile link you see on GitHub come from this lookup—not from the commit itself.: {
"login": "rauchg",
"id": 13041,
"type": "User"
},
"stats": { "additions": 16, "deletions": 3 },
"files": [{ "filename": "action.yml", "status": "modified" }]
}02 Vigilant Mode
Most commits are unsigned. Without vigilant mode, you don't see this—absence of a badge feels like implicit trust.
Enable vigilant mode: Settings → SSH and GPG keys → Flag unsigned commits as unverified. GitHub Docs ↗
03 GitHub vs. Local Verification
- ✓ Signature exists
- ✓ Key in GitHub's registry
- ? Key still valid?
- ? Key compromised?
- ? Right person's key?
Trusts GitHub's key management
- ✓ Signature exists
- ✓ Key in YOUR keyring
- ✓ You checked revocation
- ✓ You trust this key
$ git verify-commit abc123fgpg: Good signature from "Name <email>"
When does this matter? High-security environments, compliance requirements, or when you can't fully trust GitHub as an intermediary.
04 In The Wild
xz-utils Backdoor
TeamPCP Supply Chain Campaign
git config, then pushed malicious fork commits that appeared authored by trusted developers. GitHub displayed the victim's avatar and profile.