svn commit: r1936520 - in spamassassin/trunk: lib/Mail/SpamAssassin/Plugin rules rulesrc/sandbox/gbechis
[email protected] Thu, 23 Jul 2026 11:04:23 -0000
| Newsgroups | gmane.mail.spam.spamassassin.cvs |
|---|---|
| Message-ID | <178480466370.1322486.17014247858688026823@svn03-he-fi> |
Author: gbechis
Date: Thu Jul 23 11:04:23 2026
New Revision: 1936520
Log:
detect Microsoft Oauth2 service abuse
Added:
spamassassin/trunk/rulesrc/sandbox/gbechis/20_ms.cf
Modified:
spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Redirectors.pm
spamassassin/trunk/rules/25_url_redirectors.cf
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Redirectors.pm
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Redirectors.pm Thu Jul 23 10:46:30 2026 (r1936519)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Redirectors.pm Thu Jul 23 11:04:23 2026 (r1936520)
@@ -1172,6 +1172,17 @@ sub _do_http {
return;
} else {
$newurl = $ua->get_current_url();
+ # get_current_url() right after ->get() only reflects the page that
+ # just finished loading, it does not wait for any client-side
+ # (JS/timer-driven) navigation that page goes on to trigger a few
+ # seconds later, poll for a bit before concluding this wasn't a redirect.
+ my $wait_secs = $conf->{url_redirector_timeout} || 5;
+ for (1 .. $wait_secs) {
+ last if $newurl ne $redir_url;
+ sleep 1;
+ my $polled = eval { $ua->get_current_url() };
+ $newurl = $polled if defined $polled;
+ }
if($newurl ne $redir_url) {
$rcode = 301;
} else {
Modified: spamassassin/trunk/rules/25_url_redirectors.cf
==============================================================================
--- spamassassin/trunk/rules/25_url_redirectors.cf Thu Jul 23 10:46:30 2026 (r1936519)
+++ spamassassin/trunk/rules/25_url_redirectors.cf Thu Jul 23 11:04:23 2026 (r1936520)
@@ -271,6 +271,7 @@ endif
#
if can(Mail::SpamAssassin::Plugin::Redirectors::has_url_redirector_selenium)
url_redirector_selenium .blob.core.windows.net
+ url_redirector_selenium login.microsoftonline.com/common/oauth2/v2.0/authorize
url_redirector_selenium uselesstools.jonfinger.com/r
endif
Added: spamassassin/trunk/rulesrc/sandbox/gbechis/20_ms.cf
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ spamassassin/trunk/rulesrc/sandbox/gbechis/20_ms.cf Thu Jul 23 11:04:23 2026 (r1936520)
@@ -0,0 +1,10 @@
+# real Microsoft authorize links only honor the
+# pre-registered "redirect_uri"; a "redirect_url" (or similar look-alike)
+# query parameter carrying an external URL is not a real OAuth2 parameter
+# and is a strong sign the link was built by a phishing kit riding on
+# Microsoft's domain reputation.
+uri __GB_MSFT_OAUTH_AUTHORIZE /^https?:\/\/login\.microsoftonline\.com\/[^\/?\#]+\/oauth2\/v2\.0\/authorize\?/i
+uri __GB_MSFT_OAUTH_FAKE_REDIR /[?&]redirect_url=https?(?::|%3a)/i
+meta GB_MSFT_OAUTH_CONSENT_PHISH (__GB_MSFT_OAUTH_AUTHORIZE && __GB_MSFT_OAUTH_FAKE_REDIR)
+describe GB_MSFT_OAUTH_CONSENT_PHISH Message links to a Microsoft OAuth authorize URL carrying a spoofed non-standard redirect parameter
+score GB_MSFT_OAUTH_CONSENT_PHISH 1.5 # limit