Revert "Merge pull request #22 from darcosion/main"

This commit is contained in:
Matt Keeley
2024-02-28 12:15:15 -07:00
committed by GitHub
parent c4b72af123
commit 9b08e7ed97
3 changed files with 55 additions and 142 deletions

6
.gitignore vendored
View File

@@ -130,9 +130,3 @@ dmypy.json
# Pyre type checker # Pyre type checker
.pyre/ .pyre/
# Xls files
*.xls
# ignore mac os system extension
.DS_Store

View File

@@ -1,83 +0,0 @@
def is_spoofable(domain, p, aspf, spf_record, spf_all, spf_includes, sp, pct):
"""This function takes in DMARC and SPF data for a domain, as well as subdomain policy and percentage options,
and determines if the domain is vulnerable to email spoofing. The function returns an integer value indicating
the class of vulnerability.
ID Handler:
0: Indicates that spoofing is possible for the domain.
1: Indicates that subdomain spoofing is possible for the domain.
2: Indicates that organizational domain spoofing is possible for the domain.
3: Indicates that spoofing might be possible for the domain.
4: Indicates that spoofing might be possible (mailbox dependent) for the domain.
5: Indicates that organizational domain spoofing may be possible for the domain.
6: Indicates that subdomain spoofing might be possible (mailbox dependent) for the domain.
7: Indicates that subdomain spoofing is possible, and organizational domain spoofing might be possible.
8: Indicates that spoofing is not possible for the domain.
"""
try:
if pct and int(pct) != 100:
return 3
elif spf_record is None:
if p is None:
return 0
else:
return 8
elif spf_includes > 10 and p is None:
return 0
elif spf_all == "2many":
if p == "none":
return 3
else:
return 8
elif spf_all and p is None:
return 0
elif spf_all == "-all":
if p and aspf and sp == "none":
return 1
elif aspf is None and sp == "none":
return 1
elif p == "none" and (aspf == "r" or aspf is None) and sp is None:
return 4
elif p == "none" and aspf == "r" and (sp == "reject" or sp == "quarentine"):
return 2
elif p == "none" and aspf is None and (sp == "reject" or sp == "quarentine"):
return 5
elif p == "none" and aspf is None and sp == "none":
return 7
else:
return 8
elif spf_all == "~all":
if p == "none" and sp == "reject" or sp == "quarentine":
return 2
elif p == "none" and sp is None:
return 0
elif p == "none" and sp == "none":
return 7
elif (p == "reject" or p == "quarentine") and aspf is None and sp == "none":
return 1
elif (p == "reject" or p == "quarentine") and aspf and sp == "none":
return 1
else:
return 8
elif spf_all == "?all":
if (p == "reject" or p == "quarentine") and aspf and sp == "none":
return 6
elif (p == "reject" or p == "quarentine") and aspf is None and sp == "none":
return 6
elif p == "none" and aspf == "r" and sp is None:
return 0
elif p == "none" and aspf == "r" and sp == "none":
return 7
elif p == "none" and aspf == "s" or None and sp == "none":
return 7
elif p == "none" and aspf == "s" or None and sp is None:
return 6
elif p == "none" and aspf and (sp == "reject" or sp == "quarentine"):
return 5
elif p == "none" and aspf is None and sp == "reject":
return 5
else:
return 8
else:
return 8
except:
print("If you hit this error message, Open an issue with your testcase.")

View File

@@ -17,65 +17,67 @@ def is_spoofable(domain, p, aspf, spf_record, spf_all, spf_includes, sp, pct):
if pct and int(pct) != 100: if pct and int(pct) != 100:
return 3 return 3
elif spf_record is None: elif spf_record is None:
return 0 if p is None else 8 if p is None:
return 0
else:
return 8
elif spf_includes > 10 and p is None: elif spf_includes > 10 and p is None:
return 0 return 0
elif spf_all == "2many": elif spf_all == "2many":
return 3 if p == "none" else 8 if p == "none":
return 3
else:
return 8
elif spf_all and p is None: elif spf_all and p is None:
return 0 return 0
elif spf_all == "-all": elif spf_all == "-all":
if p == "none": if p and aspf and sp == "none":
if aspf == "r" and (sp == "reject" or sp == "quarantine"): return 1
return 2
elif aspf is None and (sp == "reject" or sp == "quarantine"):
return 5
elif aspf is None and sp == "none": elif aspf is None and sp == "none":
return 7 return 1
elif (aspf == "r" or aspf is None) and sp is None: elif p == "none" and (aspf == "r" or aspf is None) and sp is None:
return 4 return 4
else: elif p == "none" and aspf == "r" and (sp == "reject" or sp == "quarentine"):
return 8 return 2
elif p and aspf and sp == "none": elif p == "none" and aspf is None and (sp == "reject" or sp == "quarentine"):
return 1 return 5
elif aspf is None and sp == "none": elif p == "none" and aspf is None and sp == "none":
return 1 return 7
else: else:
return 8 return 8
elif spf_all == "~all": elif spf_all == "~all":
if p == "none": if p == "none" and sp == "reject" or sp == "quarentine":
if sp == "reject" or sp == "quarantine":
return 2 return 2
elif sp is None: elif p == "none" and sp is None:
return 0 return 0
elif sp == "none": elif p == "none" and sp == "none":
return 7 return 7
else: elif (p == "reject" or p == "quarentine") and aspf is None and sp == "none":
return 8 return 1
elif (p == "reject" or p == "quarantine") and (aspf is None or aspf) and sp == "none": elif (p == "reject" or p == "quarentine") and aspf and sp == "none":
return 1 return 1
else: else:
return 8 return 8
elif spf_all == "?all": elif spf_all == "?all":
if p == "none": if (p == "reject" or p == "quarentine") and aspf and sp == "none":
if (aspf == "r" or aspf is None) and sp is None:
return 6 return 6
elif aspf == "r" and sp == "none": elif (p == "reject" or p == "quarentine") and aspf is None and sp == "none":
return 6
elif p == "none" and aspf == "r" and sp is None:
return 0
elif p == "none" and aspf == "r" and sp == "none":
return 7 return 7
elif (aspf == "s" or aspf is None) and sp == "none": elif p == "none" and aspf == "s" or None and sp == "none":
return 7 return 7
elif aspf and (sp == "reject" or sp == "quarantine"): elif p == "none" and aspf == "s" or None and sp is None:
return 6
elif p == "none" and aspf and (sp == "reject" or sp == "quarentine"):
return 5 return 5
elif aspf is None and sp == "reject": elif p == "none" and aspf is None and sp == "reject":
return 5 return 5
else: else:
return 8 return 8
elif (p == "reject" or p == "quarantine") and (aspf is None or aspf) and sp == "none":
return 6
else: else:
return 8 return 8
else: except:
return 8 print("If you hit this error message, Open an issue with your testcase.")
except Exception as e:
print("An error occurred: ", e)
print("Open an issue with your testcase.")