github.com SPF TXT record is inconsistent across authoritative nameservers — causing SPF permerror on ~75% of DNS queries #190368
Replies: 5 comments 3 replies
-
|
💬 Your Product Feedback Has Been Submitted 🎉 Thank you for taking the time to share your insights with us! Your feedback is invaluable as we build a better GitHub experience for all our users. Here's what you can expect moving forward ⏩
Where to look to see what's shipping 👀
What you can do in the meantime 💻
As a member of the GitHub community, your participation is essential. While we can't promise that every suggestion will be implemented, we want to emphasize that your feedback is instrumental in guiding our decisions and priorities. Thank you once again for your contribution to making GitHub even better! We're grateful for your ongoing support and collaboration in shaping the future of our platform. ⭐ |
Beta Was this translation helpful? Give feedback.
-
|
This looks like a real GitHub-side DNS issue. The fix has to be on GitHub’s side: make all authoritative nameservers return the same valid SPF record. |
Beta Was this translation helpful? Give feedback.
-
|
Hi, |
Beta Was this translation helpful? Give feedback.
-
|
Your diagnosis is correct. I ran into this exact issue with another provider when their API auto-split a long TXT record. The DNS provider wrapped each mechanism in quotes but dropped the spaces. RFC 7208 requires direct concatenation, which breaks SPF syntax and triggers a permerror. This is a provisioning bug on GitHub's side for the NSOne zone. Community Discussions cannot update authoritative DNS. Open a ticket with GitHub Support or email security@github.com. Include your dig output and explicitly mention the NSOne multi-string concatenation failure. If you run GitHub Enterprise, use the enterprise support portal. For immediate mitigation, configure your inbound mail gateway to downgrade SPF permerrors for github.com to neutral. I am not sure how strict your DMARC policy is, so verify that change does not break your alignment checks. The fix will only happen when GitHub corrects the TXT record format in their NSOne dashboard. |
Beta Was this translation helpful? Give feedback.
-
|
Final update - March 26, 2026 GitHub Security confirmed the fix and our SPF failures are resolved. The NSOne servers are fully corrected and our email security is back to normal. For completeness, the 4 AWS Route53 authoritative servers are still returning no SPF record - so the fix isn't fully deployed across all nameservers. That said, this is now GitHub's operational concern to finish, not a blocker for us. Thanks to Josh and the GitHub Security team for responding and moving on it. And thanks to everyone who engaged on this thread - hopefully it saved a few teams from chasing a mysterious SPF failure. If you're still seeing issues, run: for ns in $(dig NS github.com +short); do
echo "--- $ns ---"
dig TXT github.com @"$ns" +short | grep -i spf
doneIf your resolver is hitting a Route53 server, you may still see permerror until GitHub completes the fix on that side. Worth checking which NS your resolver queries. Marking this as resolved from my end. 🙏 |
Beta Was this translation helpful? Give feedback.

Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Summary
I've confirmed that the
github.comSPF TXT record exists in three different, incompatible formats across GitHub's 8 authoritative nameservers. Approximately 6 out of 8 servers serve either a syntactically broken or completely missing SPF record, causing SPFpermerrorfor any mail system that queries those servers. This is affecting delivery of GitHub notification emails in production environments.Reproduction
Run this against all authoritative nameservers directly:
Actual output (github.dig.txt — attached):
Root Cause
GitHub's DNS is split across two providers: NSOne (dns1–4.p08.nsone.net) and AWS Route53 (ns-.awsdns-). The SPF record is in three distinct states:
❌ NSOne — 4/8 servers — BROKEN
Each SPF mechanism is a separate TXT character-string:
Per RFC 7208 §3.3, SPF evaluators concatenate multi-string TXT records directly, without any implicit separator. Concatenation yields:
No whitespace between any tokens. No conforming SPF parser can evaluate this. Result:
permerror.✅ AWS Route53 (ns-1283, ns-520) — 2/8 servers — VALID
Record stored as two long strings properly split at ~255 bytes, with space delimiters preserved. Concatenation produces a valid SPF string.
❌ AWS Route53 (ns-1707, ns-421) — 2/8 servers — MISSING
No SPF TXT record returned at all. Result:
permerroror neutral.Impact
~75% of resolvers will get a broken or missing record depending on which authoritative server they hit. Any organisation enforcing SPF will intermittently quarantine or reject GitHub notification emails (Actions, Dependabot, security alerts, PR comments).
Required Fix
ns-1707.awsdns-21.co.ukandns-421.awsdns-52.comReferences:
Attachment: github.dig.txt
# GitHub Community Forum PostCategory: Infrastructure / Email & Notifications
Title: Bug: github.com SPF TXT record is inconsistent across authoritative nameservers — causing SPF permerror on ~75% of DNS queries
Summary
I've confirmed that the
github.comSPF TXT record exists in three different, incompatible formats across GitHub's 8 authoritative nameservers. Approximately 6 out of 8 servers serve either a syntactically broken or completely missing SPF record, causing SPFpermerrorfor any mail system that queries those servers. This is affecting delivery of GitHub notification emails in production environments.Reproduction
Run this against all authoritative nameservers directly:
Actual output (github.dig.txt — attached):
Root Cause
GitHub's DNS is split across two providers: NSOne (dns1–4.p08.nsone.net) and AWS Route53 (ns-.awsdns-). The SPF record is in three distinct states:
❌ NSOne — 4/8 servers — BROKEN
Each SPF mechanism is a separate TXT character-string:
Per [RFC 7208 §3.3](https://www.rfc-editor.org/rfc/rfc7208#section-3.3), SPF evaluators concatenate multi-string TXT records directly, without any implicit separator. Concatenation yields:
No whitespace between any tokens. No conforming SPF parser can evaluate this. Result:
permerror.✅ AWS Route53 (ns-1283, ns-520) — 2/8 servers — VALID
Record stored as two long strings properly split at ~255 bytes, with space delimiters preserved. Concatenation produces a valid SPF string.
❌ AWS Route53 (ns-1707, ns-421) — 2/8 servers — MISSING
No SPF TXT record returned at all. Result:
permerroror neutral.Impact
permerror— unparseable recordpermerror/ neutral — no record~75% of resolvers will get a broken or missing record depending on which authoritative server they hit. Any organisation enforcing SPF will intermittently quarantine or reject GitHub notification emails (Actions, Dependabot, security alerts, PR comments).
Required Fix
ns-1707.awsdns-21.co.ukandns-421.awsdns-52.comReferences:
Beta Was this translation helpful? Give feedback.
All reactions