Skip to content

Commit

Permalink
Merge pull request #23 from Khnaz35/dev
Browse files Browse the repository at this point in the history
Merge pull request #22 from darcosion/main
  • Loading branch information
MattKeeley authored Feb 28, 2024
2 parents b578427 + 412d72b commit c4b72af
Show file tree
Hide file tree
Showing 3 changed files with 142 additions and 55 deletions.
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -130,3 +130,9 @@ dmypy.json

# Pyre type checker
.pyre/

# Xls files
*.xls

# ignore mac os system extension
.DS_Store
83 changes: 83 additions & 0 deletions libs/logic-ori.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
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.")
108 changes: 53 additions & 55 deletions libs/logic.py
Original file line number Diff line number Diff line change
@@ -1,83 +1,81 @@
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.
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
return 0 if p is None else 8
elif spf_includes > 10 and p is None:
return 0
elif spf_all == "2many":
if p == "none":
return 3
else:
return 8
return 3 if p == "none" else 8
elif spf_all and p is None:
return 0
elif spf_all == "-all":
if p and aspf and sp == "none":
if p == "none":
if aspf == "r" and (sp == "reject" or sp == "quarantine"):
return 2
elif aspf is None and (sp == "reject" or sp == "quarantine"):
return 5
elif aspf is None and sp == "none":
return 7
elif (aspf == "r" or aspf is None) and sp is None:
return 4
else:
return 8
elif 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":
if p == "none":
if sp == "reject" or sp == "quarantine":
return 2
elif sp is None:
return 0
elif sp == "none":
return 7
else:
return 8
elif (p == "reject" or p == "quarantine") and (aspf is None or 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:
if p == "none":
if (aspf == "r" or aspf is None) and sp is None:
return 6
elif aspf == "r" and sp == "none":
return 7
elif (aspf == "s" or aspf is None) and sp == "none":
return 7
elif aspf and (sp == "reject" or sp == "quarantine"):
return 5
elif aspf is None and sp == "reject":
return 5
else:
return 8
elif (p == "reject" or p == "quarantine") and (aspf is None or aspf) and sp == "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.")
except Exception as e:
print("An error occurred: ", e)
print("Open an issue with your testcase.")

0 comments on commit c4b72af

Please sign in to comment.