drop MRAP and CloudFront from findings

MRAP aliases (<alias>.mrap.accesspoint.s3-global.amazonaws.com) were 91,560 of
91,561 S3 findings: AWS-generated, not customer buckets, never publicly
resolvable, and they monopolised pipeline capacity. CloudFront distributions are
CDN endpoints, not buckets or databases. Both are now excluded so real buckets
and databases get the capacity.
This commit is contained in:
StasonJatham committed 2026-09-22 15:36:08 +02:00
1 parent 7034aab4b6
commit 816fa572df
2 files changed
+10 -6

No files matched your search

+8 -4
View File
@@ -25,10 +25,12 @@ func classifyCloudFront(s *scanner) (model.Match, bool) {
if n != 3 || s.label(n-1) != "net" || s.label(n-2) != "cloudfront" { if n != 3 || s.label(n-1) != "net" || s.label(n-2) != "cloudfront" {
return model.Match{}, false return model.Match{}, false
} }
// CloudFront distributions are CDN endpoints, not buckets or databases, so
// they are identified but not stored as findings.
return model.Match{ return model.Match{
Provider: model.ProviderAWS, Provider: model.ProviderAWS,
Service: model.ServiceWebApp, Service: model.ServiceWebApp,
ResourceSpecific: true, ResourceSpecific: false,
PublicSemantic: model.PublicSemanticPublicEndpoint, PublicSemantic: model.PublicSemanticPublicEndpoint,
Resource: s.label(0), Resource: s.label(0),
}, true }, true
@@ -113,11 +115,13 @@ func classifyAWSS3(s *scanner) (model.Match, bool) {
} }
} }
// Multi-region access point: <res>.mrap.accesspoint.s3-global.amazonaws.com // Multi-region access point aliases (<alias>.mrap.accesspoint.s3-global...) are
// AWS-generated and appear in CT in enormous volume. They are not customer
// bucket names, do not resolve publicly, and were flooding the pipeline, so
// they are deliberately not treated as findings.
if n >= 6 && s.label(n-5) == "mrap" && s.label(n-4) == "accesspoint" && if n >= 6 && s.label(n-5) == "mrap" && s.label(n-4) == "accesspoint" &&
s.label(n-3) == "s3-global" { s.label(n-3) == "s3-global" {
return aws(model.ProviderAWS, model.ServiceS3, return model.Match{}, false
model.PublicSemanticNone, s.label(0), ""), true
} }
// S3 Express: <bucket>.s3express-<zone>.<region>.amazonaws.com // S3 Express: <bucket>.s3express-<zone>.<region>.amazonaws.com
+2 -2
View File
@@ -59,7 +59,6 @@ func TestClassifyMatches(t *testing.T) {
{"ap-123456.s3-accesspoint.us-east-1.amazonaws.com", want{model.ProviderAWS, model.ServiceS3, "ap-123456", "us-east-1", true, 0}}, {"ap-123456.s3-accesspoint.us-east-1.amazonaws.com", want{model.ProviderAWS, model.ServiceS3, "ap-123456", "us-east-1", true, 0}},
{"x.s3-accesspoint.dualstack.us-east-1.amazonaws.com", want{model.ProviderAWS, model.ServiceS3, "x", "us-east-1", true, 0}}, {"x.s3-accesspoint.dualstack.us-east-1.amazonaws.com", want{model.ProviderAWS, model.ServiceS3, "x", "us-east-1", true, 0}},
{"x.s3-accesspoint-fips.us-east-1.amazonaws.com", want{model.ProviderAWS, model.ServiceS3, "x", "us-east-1", true, 0}}, {"x.s3-accesspoint-fips.us-east-1.amazonaws.com", want{model.ProviderAWS, model.ServiceS3, "x", "us-east-1", true, 0}},
{"x.mrap.accesspoint.s3-global.amazonaws.com", want{model.ProviderAWS, model.ServiceS3, "x", "", true, 0}},
{"bucket.s3express-zone1.eu-west-1.amazonaws.com", want{model.ProviderAWS, model.ServiceS3, "bucket", "eu-west-1", true, 0}}, {"bucket.s3express-zone1.eu-west-1.amazonaws.com", want{model.ProviderAWS, model.ServiceS3, "bucket", "eu-west-1", true, 0}},
{"bucket-01.s3-eu-west-1.amazonaws.com", want{model.ProviderAWS, model.ServiceS3, "bucket-01", "eu-west-1", true, 0}}, {"bucket-01.s3-eu-west-1.amazonaws.com", want{model.ProviderAWS, model.ServiceS3, "bucket-01", "eu-west-1", true, 0}},
// AWS databases // AWS databases
@@ -94,7 +93,7 @@ func TestClassifyMatches(t *testing.T) {
{"project.firebaseio.com", want{model.ProviderGCP, model.ServiceFirebaseDB, "project", "", true, 0}}, {"project.firebaseio.com", want{model.ProviderGCP, model.ServiceFirebaseDB, "project", "", true, 0}},
{"project.europe-west1.firebasedatabase.app", want{model.ProviderGCP, model.ServiceFirebaseDB, "project", "europe-west1", true, 0}}, {"project.europe-west1.firebasedatabase.app", want{model.ProviderGCP, model.ServiceFirebaseDB, "project", "europe-west1", true, 0}},
{"myproject.appspot.com", want{model.ProviderGCP, model.ServiceWebApp, "myproject", "", true, 0}}, {"myproject.appspot.com", want{model.ProviderGCP, model.ServiceWebApp, "myproject", "", true, 0}},
{"d111111abcdef8.cloudfront.net", want{model.ProviderAWS, model.ServiceWebApp, "d111111abcdef8", "", true, model.PublicSemanticPublicEndpoint}}, {"d111111abcdef8.cloudfront.net", want{model.ProviderAWS, model.ServiceWebApp, "d111111abcdef8", "", false, model.PublicSemanticPublicEndpoint}},
// Cloudflare // Cloudflare
{"acct.r2.cloudflarestorage.com", want{model.ProviderCloudflare, model.ServiceObjectStorage, "acct", "", true, 0}}, {"acct.r2.cloudflarestorage.com", want{model.ProviderCloudflare, model.ServiceObjectStorage, "acct", "", true, 0}},
{"mybucket.r2.dev", want{model.ProviderCloudflare, model.ServiceObjectStorage, "mybucket", "", true, model.PublicSemanticPublicURL}}, {"mybucket.r2.dev", want{model.ProviderCloudflare, model.ServiceObjectStorage, "mybucket", "", true, model.PublicSemanticPublicURL}},
@@ -138,6 +137,7 @@ func TestClassifyRejects(t *testing.T) {
"cache.amazonaws.com", "cache.amazonaws.com",
"use1.cache.amazonaws.com", "use1.cache.amazonaws.com",
"s3-global.amazonaws.com", "s3-global.amazonaws.com",
"x.mrap.accesspoint.s3-global.amazonaws.com",
// Azure bare service endpoints // Azure bare service endpoints
"blob.core.windows.net", "blob.core.windows.net",
"database.windows.net", "database.windows.net",